# [SciPy-dev] SciPy improvements

Matthieu Brucher matthieu.brucher@gmail....
Wed Apr 11 15:56:45 CDT 2007

```>
> 2) Nonlinear solvers
>
> I have written these nonlinear solvers for the problem R(x) = 0, where
> x and R has a dimension "n":
>
>     broyden1 - Broyden's first method - is a quasi-Newton-Raphson method
> for
>         updating an approximate Jacobian and then inverting it
>     broyden2 - Broyden's second method - the same as broyden1, but updates
> the
>         inverse Jacobian directly
>     broyden3 - Broyden's second method - the same as broyden2, but instead
> of
>         directly computing the inverse Jacobian, it remembers how to
> construct
>         it using vectors, and when computing inv(J)*F, it uses those
> vectors to
>         compute this product, thus avoding the expensive NxN matrix
>         multiplication.
>     broyden_generalized - Generalized Broyden's method, the same as
> broyden2,
>         but instead of approximating the full NxN Jacobian, it construct
> it at
>         every iteration in a way that avoids the NxN matrix
> multiplication.
>         This is not as precise as broyden3.
>     anderson - extended Anderson method, the same as the
> broyden_generalized,
>         but added w_0^2*I to before taking inversion to improve the
> stability
>     anderson2 - the Anderson method, the same as anderson, but formulated
>         differently
>     linear_mixing
>     exciting_mixing
>
> I use them in the self-consistent cycle of the Density Functional
> Theory (so I use a terminology of DFT literature in the names of the
> methods).

Could the part that computes the step be separated from the function iself
and the optimizer ? I'm trying to "modularize" non linear solvers so as to
select more efficiently what is needed - kind of optimizer, kind of step,
kind of stopping criterion, ... -

Matthieu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/scipy-dev/attachments/20070411/2e1c7c26/attachment.html
```