Mercurial > octave
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")); +