# HG changeset patch # User Carlo de Falco # Date 1284938393 -7200 # Node ID fa18ed792272d8306682ade99046b03cb11b7459 # Parent 9f45b76c16e3e457cf42c79b63b36f6a745eb98b patched fzero to better search for initial bracketing diff -r 9f45b76c16e3 -r fa18ed792272 scripts/ChangeLog --- a/scripts/ChangeLog Sun Sep 19 18:50:30 2010 -0400 +++ b/scripts/ChangeLog Mon Sep 20 01:19:53 2010 +0200 @@ -1,3 +1,10 @@ +2010-09-19 Carlo de Falco + + * optimization/fzero.m: Modify heuristics used to find an + initial bracketing. + * optimization/fzero.m: Set default TolX option to eps for + compatibility. + 2010-09-19 Ben Abbott * /plot/legend.m: Treat line, patch, and surface objects differetly. diff -r 9f45b76c16e3 -r fa18ed792272 scripts/optimization/fzero.m --- a/scripts/optimization/fzero.m Sun Sep 19 18:50:30 2010 -0400 +++ b/scripts/optimization/fzero.m Mon Sep 20 01:19:53 2010 +0200 @@ -97,7 +97,7 @@ ## Get default options if requested. if (nargin == 1 && ischar (fun) && strcmp (fun, 'defaults')) - x = optimset ("MaxIter", Inf, "MaxFunEvals", Inf, "TolX", 1e-8, \ + x = optimset ("MaxIter", Inf, "MaxFunEvals", Inf, "TolX", eps, \ "OutputFcn", [], "FunValCheck", "off"); return; endif @@ -114,7 +114,7 @@ ## displev = optimget (options, "Display", "notify"); funvalchk = strcmpi (optimget (options, "FunValCheck", "off"), "on"); outfcn = optimget (options, "OutputFcn"); - tolx = optimget (options, "TolX", 1e-8); + tolx = optimget (options, "TolX", eps); maxiter = optimget (options, "MaxIter", Inf); maxfev = optimget (options, "MaxFunEvals", Inf); @@ -144,11 +144,12 @@ else ## Try to get b. if (a == 0) - aa = 1; + bstep = 1/100; else - aa = a; + bstep = a/100; endif - for b = [0.9*aa, 1.1*aa, aa-1, aa+1, 0.5*aa 1.5*aa, -aa, 2*aa, -10*aa, 10*aa] + bnum = 10; + for b = (a + [(cumsum (bstep * (sqrt (2) .^ (0:bnum)))); -(cumsum (bstep * (sqrt (2) .^ (0:bnum))))](:))' fb = fun (b); nfev += 1; if (sign (fa) * sign (fb) <= 0) break;