changeset 16338:8aeb5d5c3747

fplot.m: Overhaul code to use modern coding practices. * scripts/plot/fplot.m: Use default values in function header. Use err variable rather than re-calculating it. Use fix rather than floor to test for an integer. Use name of bad argument in error() string. Correct indentation.
author Rik <rik@octave.org>
date Tue, 19 Mar 2013 16:00:09 -0700
parents 6bfd8dbd7d3c
children 0c340bf413d7
files scripts/plot/fplot.m
diffstat 1 files changed, 11 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/fplot.m	Tue Mar 19 18:03:23 2013 -0400
+++ b/scripts/plot/fplot.m	Tue Mar 19 16:00:09 2013 -0700
@@ -42,26 +42,17 @@
 
 ## Author: Paul Kienzle <pkienzle@users.sf.net>
 
-function fplot (fn, limits, n, fmt)
+function fplot (fn, limits, n = 0.002, fmt = "")
+
   if (nargin < 2 || nargin > 4)
     print_usage ();
   endif
 
-  if (!isreal (limits) || (numel (limits) != 2 && numel (limits) != 4))
-    error ("fplot: second input argument must be a real vector with 2 or 4 elements");
-  endif
-
-  if (nargin < 3)
-    n = 0.002;
-  endif
-
-  have_linespec = true;
-  if (nargin < 4)
-    have_linespec = false;
+  if (iscomplex (limits) || (numel (limits) != 2 && numel (limits) != 4))
+    error ("fplot: LIMITS must be a real vector with 2 or 4 elements");
   endif
 
   if (ischar (n))
-    have_linespec = true;
     fmt = n;
     n = 0.002;
   endif
@@ -74,13 +65,13 @@
   elseif (all (isalnum (fn)))
     nam = fn;
   elseif (ischar (fn))
-     fn = vectorize (inline (fn));
-     nam = formula (fn);
+    fn = vectorize (inline (fn));
+    nam = formula (fn);
   else
-    error ("fplot: first input argument must be a function handle, inline function or string");
+    error ("fplot: FN must be a function handle, inline function, or string");
   endif
 
-  if (floor (n) != n)
+  if (n != fix (n))
     tol = n;
     x0 = linspace (limits(1), limits(2), 5)';
     y0 = feval (fn, x0);
@@ -92,7 +83,7 @@
     while (n < 2 .^ 20)
       y00 = interp1 (x0, y0, x, "linear");
       err = 0.5 * max (abs ((y00 - y) ./ (y00 + y))(:));
-      if (err == err0 || 0.5 * max (abs ((y00 - y) ./ (y00 + y))(:)) < tol)
+      if (err == err0 || err < tol)
         break;
       endif
       x0 = x;
@@ -107,11 +98,7 @@
     y = feval (fn, x);
   endif
 
-  if (have_linespec)
-    plot (x, y, fmt);
-  else
-    plot (x, y);
-  endif
+  plot (x, y, fmt);
 
   if (length (limits) > 2)
     axis (limits);
@@ -125,6 +112,7 @@
     endfor
     legend (nams{:});
   endif
+
 endfunction