# HG changeset patch # User Rik # Date 1266559596 -3600 # Node ID 7c97da90fc8fe5b755162001c753f7ee3e6b0fb4 # Parent 1603dfe72933232303305213b95eb000fe828483 check for discontinuities in fzero diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2010-02-19 Rik + + * optimization/fzero.m: Add test for discontinuity at the end. + 2010-02-18 John W. Eaton * image/imfinfo.m: Don't handle file time stamp here. diff --git a/scripts/optimization/fzero.m b/scripts/optimization/fzero.m --- a/scripts/optimization/fzero.m +++ b/scripts/optimization/fzero.m @@ -38,6 +38,8 @@ ## Maximum number of iterations or function evaluations has been exhausted. ## @item -1 ## The algorithm has been terminated from user output function. +## @item -5 +## The algorithm may have converged to a singular point. ## @end itemize ## @seealso{optimset, fsolve} ## @end deftypefn @@ -133,6 +135,8 @@ error ("fzero:bracket", "fzero: not a valid initial bracketing"); endif + slope0 = (fb - fa) / (b - a); + itype = 1; if (abs (fa) < abs (fb)) @@ -281,6 +285,13 @@ endif endwhile + ## Check solution for a singularity by examining slope + if (info == 1) + if ((b - a) != 0 && abs ((fb - fa)/(b - a) / slope0) > max (1e6, 0.5/tolx)) + info = -5; + endif + endif + output.iterations = niter; output.funcCount = nfev; output.bracket = [a, b];