diff scripts/optimization/fminsearch.m @ 22962:fba8a6c742c6 stable

fminsearch.m: Fix error in "guarded_eval". * fminsearch.m: Fix typo in guarded_eval which meant nothing was being tested. Add BIST tests to check for proper behavior.
author Markus Muetzel <markus.muetzel@gmx.de>
date Mon, 11 Jul 2016 18:08:25 +0200
parents bac0d6f07a3e
children 5a8999b1c5f3 e9a0469dedd9
line wrap: on
line diff
--- a/scripts/optimization/fminsearch.m	Tue Dec 27 09:43:28 2016 -0800
+++ b/scripts/optimization/fminsearch.m	Mon Jul 11 18:08:25 2016 +0200
@@ -329,11 +329,11 @@
 
   y = fun (x);
 
-  if (! (isreal (f)))
+  if (! (isreal (y)))
     error ("fminsearch:notreal", "fminsearch: non-real value encountered");
-  elseif (any (isnan (f(:))))
+  elseif (any (isnan (y(:))))
     error ("fminsearch:isnan", "fminsearch: NaN value encountered");
-  elseif (any (isinf (f(:))))
+  elseif (any (isinf (y(:))))
     error ("fminsearch:isinf", "fminsearch: Inf value encountered");
   endif
 
@@ -341,13 +341,23 @@
 
 
 %!demo
-%! fcn = @(x) (x(1)-5).^2 + (x(2)-8).^4
+%! fcn = @(x) (x(1)-5).^2 + (x(2)-8).^4;
 %! x0 = [0;0];
 %! [xmin, fval] = fminsearch (fcn, x0)
 
-%!assert (fminsearch (@sin, 3, optimset ("MaxIter", 3)), 4.8750, 1e-4)
-%!assert (fminsearch (@sin, 3, optimset ("MaxIter", 30)), 4.7124, 1e-4)
-%!shared c
+%!assert (fminsearch (@sin, 3, optimset ("MaxIter", 30)), 3*pi/2, 1e-4)
+%!test
 %! c = 1.5;
-%!assert (fminsearch (@(x) x(1).^2+c*x(2).^2,[1;1]), [0;0], 1e-4)
+%! assert (fminsearch (@(x) x(1).^2+c*x(2).^2,[1;1]), [0;0], 1e-4);
+
+%!error fminsearch ()
+%!error fminsearch (1)
 
+## Tests for guarded_eval
+%!error <non-real value encountered>
+%! fminsearch (@(x) ([0 2i]), 0, optimset ("FunValCheck", "on"));
+%!error <NaN value encountered>
+%! fminsearch (@(x) (NaN), 0, optimset ("FunValCheck", "on"));
+%!error <Inf value encountered>
+%! fminsearch (@(x) (Inf), 0, optimset ("FunValCheck", "on"));
+