Mercurial > hg > octave-nkf
diff scripts/optimization/fsolve.m @ 9207:25f50d2d76b3
improve TR updating strategy for fminunc and fsolve
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Sun, 17 May 2009 17:54:51 +0200 |
parents | 5247e89688e1 |
children | 923c7cb7f13f |
line wrap: on
line diff
--- a/scripts/optimization/fsolve.m +++ b/scripts/optimization/fsolve.m @@ -256,6 +256,8 @@ lastratio = 0; nfail = 0; nsuc = 0; + decfac = 0.5; + ## Inner loop. while (niter <= maxiter && nfev < maxfev && ! info) @@ -296,10 +298,11 @@ endif ## Update delta. - if (ratio < min(max(0.1, lastratio), 0.9)) + if (ratio < min(max(0.1, 0.8*lastratio), 0.9)) nsuc = 0; nfail ++; - delta *= 0.5; + delta *= decfac; + decfac ^= 1.4142; if (delta <= 1e1*macheps*xn) ## Trust region became uselessly small. info = -3; @@ -307,12 +310,13 @@ endif else lastratio = ratio; + decfac = 0.5; nfail = 0; nsuc ++; if (abs (1-ratio) <= 0.1) - delta = 2*sn; + delta = 1.4142*sn; elseif (ratio >= 0.5 || nsuc > 1) - delta = max (delta, 2*sn); + delta = max (delta, 1.4142*sn); endif endif