Skip to main content
`Ctrl`+`K`
scipy.optimize.

# BroydenFirst

class scipy.optimize.BroydenFirst(alpha=None, reduction_method='restart', max_rank=None)

  Find a root of a function, using Broyden’s first Jacobian approximation.

  This method is also known as “Broyden’s good method”.

  Parameters:
    %(params_basic)s
    %(broyden_params)s
    %(params_extra)s

  Methods

  aspreconditioner |
  matvec |
  rmatvec |
  rsolve |
  setup |
  solve |
  todense |
  update |

  See also

  `root`

    Interface to root finding algorithms for multivariate functions. See `method='broyden1'` in particular.

  Notes

  This algorithm implements the inverse Jacobian Quasi-Newton update

  \[H_+ = H + (dx - H df) dx^\dagger H / ( dx^\dagger H df)\]

  which corresponds to Broyden’s first Jacobian update

  \[J_+ = J + (df - J dx) dx^\dagger / dx^\dagger dx\]

  References

  [1]

  B.A. van der Rotten, PhD thesis, “A limited memory Broyden method to solve high-dimensional systems of nonlinear equations”. Mathematisch Instituut, Universiteit Leiden, The Netherlands (2003). https://math.leidenuniv.nl/scripties/Rotten.pdf

  Examples

  The following functions define a system of nonlinear equations

      >>> def fun(x):
      ...     return [x[0]  + 0.5 * (x[0] - x[1])**3 - 1.0,
      ...             0.5 * (x[1] - x[0])**3 + x[1]]

  A solution can be obtained as follows.

      >>> from scipy import optimize
      >>> sol = optimize.broyden1(fun, [0, 0])
      >>> sol
      array([0.84116396, 0.15883641])