# [Scipy-tickets] [SciPy] #791: optimize.broyden* termination conditions

SciPy scipy-tickets@scipy....
Wed Nov 12 18:18:09 CST 2008

```#791: optimize.broyden* termination conditions
--------------------+-------------------------------------------------------
Reporter:  pv      |       Owner:  somebody
Type:  defect  |      Status:  new
Priority:  normal  |   Milestone:  0.7.0
Component:  Other   |     Version:
Severity:  major   |    Keywords:
--------------------+-------------------------------------------------------
Scipy r5056:

The optimize.broyden1/2/3 methods currently offer only the number of
iterations as a termination condition.

This is, however, often not very useful. Users of optimization/root-
finding algorithms typically except the algorithm to terminate when
certain tolerances (on residuals or estimated accuracy) are met, or when a
maximum for number of iterations is reached.

Also, if Broyden methods are run to extremely close to the solution, the
step length decreases, which eventually causes problems (in the Jacobian
update, I believe). Consider a simple problem for which the default value
of 'iter' is too large:
{{{
import scipy.optimize as so
import traceback

def f(x)
return x

print "fsolve"
print so.fsolve(f, [10])

try:
print "broyden1"
print so.broyden1(f, [10])[0]
except:
traceback.print_exc()

try:
print "broyden2"
print so.broyden2(f, [10])[0]
except:
traceback.print_exc()

try:
print "broyden3"
print so.broyden3(f, [10])[0]
except:
traceback.print_exc()

}}}
which yields
{{{
fsolve
0.0
broyden1
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "scipy/optimize/nonlin.py", line 353, in broyden1
File "scipy/optimize/nonlin.py", line 96, in solve
File "numpy/core/defmatrix.py", line 515, in getI
return asmatrix(func(self))
File "scipy/linalg/basic.py", line 342, in inv
File "numpy/lib/function_base.py", line 724, in asarray_chkfinite
raise ValueError, "array must not contain infs or NaNs"
ValueError: array must not contain infs or NaNs
broyden2
nan
broyden3
nan
}}}
The number of iterations required is usually not known a priori, and
guessing it by calling broyden* is cumbersome.

--
Ticket URL: <http://scipy.org/scipy/scipy/ticket/791>
SciPy <http://www.scipy.org/>
SciPy is open-source software for mathematics, science, and engineering.
```