123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717 |
- """
- Unified interfaces to root finding algorithms.
- Functions
- ---------
- - root : find a root of a vector function.
- """
- __all__ = ['root']
- import numpy as np
- ROOT_METHODS = ['hybr', 'lm', 'broyden1', 'broyden2', 'anderson',
- 'linearmixing', 'diagbroyden', 'excitingmixing', 'krylov',
- 'df-sane']
- from warnings import warn
- from ._optimize import MemoizeJac, OptimizeResult, _check_unknown_options
- from ._minpack_py import _root_hybr, leastsq
- from ._spectral import _root_df_sane
- from . import _nonlin as nonlin
- def root(fun, x0, args=(), method='hybr', jac=None, tol=None, callback=None,
- options=None):
- r"""
- Find a root of a vector function.
- Parameters
- ----------
- fun : callable
- A vector function to find a root of.
- x0 : ndarray
- Initial guess.
- args : tuple, optional
- Extra arguments passed to the objective function and its Jacobian.
- method : str, optional
- Type of solver. Should be one of
- - 'hybr' :ref:`(see here) <optimize.root-hybr>`
- - 'lm' :ref:`(see here) <optimize.root-lm>`
- - 'broyden1' :ref:`(see here) <optimize.root-broyden1>`
- - 'broyden2' :ref:`(see here) <optimize.root-broyden2>`
- - 'anderson' :ref:`(see here) <optimize.root-anderson>`
- - 'linearmixing' :ref:`(see here) <optimize.root-linearmixing>`
- - 'diagbroyden' :ref:`(see here) <optimize.root-diagbroyden>`
- - 'excitingmixing' :ref:`(see here) <optimize.root-excitingmixing>`
- - 'krylov' :ref:`(see here) <optimize.root-krylov>`
- - 'df-sane' :ref:`(see here) <optimize.root-dfsane>`
- jac : bool or callable, optional
- If `jac` is a Boolean and is True, `fun` is assumed to return the
- value of Jacobian along with the objective function. If False, the
- Jacobian will be estimated numerically.
- `jac` can also be a callable returning the Jacobian of `fun`. In
- this case, it must accept the same arguments as `fun`.
- tol : float, optional
- Tolerance for termination. For detailed control, use solver-specific
- options.
- callback : function, optional
- Optional callback function. It is called on every iteration as
- ``callback(x, f)`` where `x` is the current solution and `f`
- the corresponding residual. For all methods but 'hybr' and 'lm'.
- options : dict, optional
- A dictionary of solver options. E.g., `xtol` or `maxiter`, see
- :obj:`show_options()` for details.
- Returns
- -------
- sol : OptimizeResult
- The solution represented as a ``OptimizeResult`` object.
- Important attributes are: ``x`` the solution array, ``success`` a
- Boolean flag indicating if the algorithm exited successfully and
- ``message`` which describes the cause of the termination. See
- `OptimizeResult` for a description of other attributes.
- See also
- --------
- show_options : Additional options accepted by the solvers
- Notes
- -----
- This section describes the available solvers that can be selected by the
- 'method' parameter. The default method is *hybr*.
- Method *hybr* uses a modification of the Powell hybrid method as
- implemented in MINPACK [1]_.
- Method *lm* solves the system of nonlinear equations in a least squares
- sense using a modification of the Levenberg-Marquardt algorithm as
- implemented in MINPACK [1]_.
- Method *df-sane* is a derivative-free spectral method. [3]_
- Methods *broyden1*, *broyden2*, *anderson*, *linearmixing*,
- *diagbroyden*, *excitingmixing*, *krylov* are inexact Newton methods,
- with backtracking or full line searches [2]_. Each method corresponds
- to a particular Jacobian approximations.
- - Method *broyden1* uses Broyden's first Jacobian approximation, it is
- known as Broyden's good method.
- - Method *broyden2* uses Broyden's second Jacobian approximation, it
- is known as Broyden's bad method.
- - Method *anderson* uses (extended) Anderson mixing.
- - Method *Krylov* uses Krylov approximation for inverse Jacobian. It
- is suitable for large-scale problem.
- - Method *diagbroyden* uses diagonal Broyden Jacobian approximation.
- - Method *linearmixing* uses a scalar Jacobian approximation.
- - Method *excitingmixing* uses a tuned diagonal Jacobian
- approximation.
- .. warning::
- The algorithms implemented for methods *diagbroyden*,
- *linearmixing* and *excitingmixing* may be useful for specific
- problems, but whether they will work may depend strongly on the
- problem.
- .. versionadded:: 0.11.0
- References
- ----------
- .. [1] More, Jorge J., Burton S. Garbow, and Kenneth E. Hillstrom.
- 1980. User Guide for MINPACK-1.
- .. [2] C. T. Kelley. 1995. Iterative Methods for Linear and Nonlinear
- Equations. Society for Industrial and Applied Mathematics.
- <https://archive.siam.org/books/kelley/fr16/>
- .. [3] W. La Cruz, J.M. Martinez, M. Raydan. Math. Comp. 75, 1429 (2006).
- Examples
- --------
- The following functions define a system of nonlinear equations and its
- jacobian.
- >>> import numpy as np
- >>> def fun(x):
- ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
- ... 0.5 * (x[1] - x[0])**3 + x[1]]
- >>> def jac(x):
- ... return np.array([[1 + 1.5 * (x[0] - x[1])**2,
- ... -1.5 * (x[0] - x[1])**2],
- ... [-1.5 * (x[1] - x[0])**2,
- ... 1 + 1.5 * (x[1] - x[0])**2]])
- A solution can be obtained as follows.
- >>> from scipy import optimize
- >>> sol = optimize.root(fun, [0, 0], jac=jac, method='hybr')
- >>> sol.x
- array([ 0.8411639, 0.1588361])
- **Large problem**
- Suppose that we needed to solve the following integrodifferential
- equation on the square :math:`[0,1]\times[0,1]`:
- .. math::
- \nabla^2 P = 10 \left(\int_0^1\int_0^1\cosh(P)\,dx\,dy\right)^2
- with :math:`P(x,1) = 1` and :math:`P=0` elsewhere on the boundary of
- the square.
- The solution can be found using the ``method='krylov'`` solver:
- >>> from scipy import optimize
- >>> # parameters
- >>> nx, ny = 75, 75
- >>> hx, hy = 1./(nx-1), 1./(ny-1)
- >>> P_left, P_right = 0, 0
- >>> P_top, P_bottom = 1, 0
- >>> def residual(P):
- ... d2x = np.zeros_like(P)
- ... d2y = np.zeros_like(P)
- ...
- ... d2x[1:-1] = (P[2:] - 2*P[1:-1] + P[:-2]) / hx/hx
- ... d2x[0] = (P[1] - 2*P[0] + P_left)/hx/hx
- ... d2x[-1] = (P_right - 2*P[-1] + P[-2])/hx/hx
- ...
- ... d2y[:,1:-1] = (P[:,2:] - 2*P[:,1:-1] + P[:,:-2])/hy/hy
- ... d2y[:,0] = (P[:,1] - 2*P[:,0] + P_bottom)/hy/hy
- ... d2y[:,-1] = (P_top - 2*P[:,-1] + P[:,-2])/hy/hy
- ...
- ... return d2x + d2y - 10*np.cosh(P).mean()**2
- >>> guess = np.zeros((nx, ny), float)
- >>> sol = optimize.root(residual, guess, method='krylov')
- >>> print('Residual: %g' % abs(residual(sol.x)).max())
- Residual: 5.7972e-06 # may vary
- >>> import matplotlib.pyplot as plt
- >>> x, y = np.mgrid[0:1:(nx*1j), 0:1:(ny*1j)]
- >>> plt.pcolormesh(x, y, sol.x, shading='gouraud')
- >>> plt.colorbar()
- >>> plt.show()
- """
- if not isinstance(args, tuple):
- args = (args,)
- meth = method.lower()
- if options is None:
- options = {}
- if callback is not None and meth in ('hybr', 'lm'):
- warn('Method %s does not accept callback.' % method,
- RuntimeWarning)
- # fun also returns the Jacobian
- if not callable(jac) and meth in ('hybr', 'lm'):
- if bool(jac):
- fun = MemoizeJac(fun)
- jac = fun.derivative
- else:
- jac = None
- # set default tolerances
- if tol is not None:
- options = dict(options)
- if meth in ('hybr', 'lm'):
- options.setdefault('xtol', tol)
- elif meth in ('df-sane',):
- options.setdefault('ftol', tol)
- elif meth in ('broyden1', 'broyden2', 'anderson', 'linearmixing',
- 'diagbroyden', 'excitingmixing', 'krylov'):
- options.setdefault('xtol', tol)
- options.setdefault('xatol', np.inf)
- options.setdefault('ftol', np.inf)
- options.setdefault('fatol', np.inf)
- if meth == 'hybr':
- sol = _root_hybr(fun, x0, args=args, jac=jac, **options)
- elif meth == 'lm':
- sol = _root_leastsq(fun, x0, args=args, jac=jac, **options)
- elif meth == 'df-sane':
- _warn_jac_unused(jac, method)
- sol = _root_df_sane(fun, x0, args=args, callback=callback,
- **options)
- elif meth in ('broyden1', 'broyden2', 'anderson', 'linearmixing',
- 'diagbroyden', 'excitingmixing', 'krylov'):
- _warn_jac_unused(jac, method)
- sol = _root_nonlin_solve(fun, x0, args=args, jac=jac,
- _method=meth, _callback=callback,
- **options)
- else:
- raise ValueError('Unknown solver %s' % method)
- return sol
- def _warn_jac_unused(jac, method):
- if jac is not None:
- warn('Method %s does not use the jacobian (jac).' % (method,),
- RuntimeWarning)
- def _root_leastsq(fun, x0, args=(), jac=None,
- col_deriv=0, xtol=1.49012e-08, ftol=1.49012e-08,
- gtol=0.0, maxiter=0, eps=0.0, factor=100, diag=None,
- **unknown_options):
- """
- Solve for least squares with Levenberg-Marquardt
- Options
- -------
- col_deriv : bool
- non-zero to specify that the Jacobian function computes derivatives
- down the columns (faster, because there is no transpose operation).
- ftol : float
- Relative error desired in the sum of squares.
- xtol : float
- Relative error desired in the approximate solution.
- gtol : float
- Orthogonality desired between the function vector and the columns
- of the Jacobian.
- maxiter : int
- The maximum number of calls to the function. If zero, then
- 100*(N+1) is the maximum where N is the number of elements in x0.
- epsfcn : float
- A suitable step length for the forward-difference approximation of
- the Jacobian (for Dfun=None). If epsfcn is less than the machine
- precision, it is assumed that the relative errors in the functions
- are of the order of the machine precision.
- factor : float
- A parameter determining the initial step bound
- (``factor * || diag * x||``). Should be in interval ``(0.1, 100)``.
- diag : sequence
- N positive entries that serve as a scale factors for the variables.
- """
- _check_unknown_options(unknown_options)
- x, cov_x, info, msg, ier = leastsq(fun, x0, args=args, Dfun=jac,
- full_output=True,
- col_deriv=col_deriv, xtol=xtol,
- ftol=ftol, gtol=gtol,
- maxfev=maxiter, epsfcn=eps,
- factor=factor, diag=diag)
- sol = OptimizeResult(x=x, message=msg, status=ier,
- success=ier in (1, 2, 3, 4), cov_x=cov_x,
- fun=info.pop('fvec'))
- sol.update(info)
- return sol
- def _root_nonlin_solve(fun, x0, args=(), jac=None,
- _callback=None, _method=None,
- nit=None, disp=False, maxiter=None,
- ftol=None, fatol=None, xtol=None, xatol=None,
- tol_norm=None, line_search='armijo', jac_options=None,
- **unknown_options):
- _check_unknown_options(unknown_options)
- f_tol = fatol
- f_rtol = ftol
- x_tol = xatol
- x_rtol = xtol
- verbose = disp
- if jac_options is None:
- jac_options = dict()
- jacobian = {'broyden1': nonlin.BroydenFirst,
- 'broyden2': nonlin.BroydenSecond,
- 'anderson': nonlin.Anderson,
- 'linearmixing': nonlin.LinearMixing,
- 'diagbroyden': nonlin.DiagBroyden,
- 'excitingmixing': nonlin.ExcitingMixing,
- 'krylov': nonlin.KrylovJacobian
- }[_method]
- if args:
- if jac:
- def f(x):
- return fun(x, *args)[0]
- else:
- def f(x):
- return fun(x, *args)
- else:
- f = fun
- x, info = nonlin.nonlin_solve(f, x0, jacobian=jacobian(**jac_options),
- iter=nit, verbose=verbose,
- maxiter=maxiter, f_tol=f_tol,
- f_rtol=f_rtol, x_tol=x_tol,
- x_rtol=x_rtol, tol_norm=tol_norm,
- line_search=line_search,
- callback=_callback, full_output=True,
- raise_exception=False)
- sol = OptimizeResult(x=x)
- sol.update(info)
- return sol
- def _root_broyden1_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- Initial guess for the Jacobian is (-1/alpha).
- reduction_method : str or tuple, optional
- Method used in ensuring that the rank of the Broyden
- matrix stays low. Can either be a string giving the
- name of the method, or a tuple of the form ``(method,
- param1, param2, ...)`` that gives the name of the
- method and values for additional parameters.
- Methods available:
- - ``restart``
- Drop all matrix columns. Has no
- extra parameters.
- - ``simple``
- Drop oldest matrix column. Has no
- extra parameters.
- - ``svd``
- Keep only the most significant SVD
- components.
- Extra parameters:
- - ``to_retain``
- Number of SVD components to
- retain when rank reduction is done.
- Default is ``max_rank - 2``.
- max_rank : int, optional
- Maximum rank for the Broyden matrix.
- Default is infinity (i.e., no rank reduction).
- Examples
- --------
- >>> def func(x):
- ... return np.cos(x) + x[::-1] - [1, 2, 3, 4]
- ...
- >>> from scipy import optimize
- >>> res = optimize.root(func, [1, 1, 1, 1], method='broyden1', tol=1e-14)
- >>> x = res.x
- >>> x
- array([4.04674914, 3.91158389, 2.71791677, 1.61756251])
- >>> np.cos(x) + x[::-1]
- array([1., 2., 3., 4.])
- """
- pass
- def _root_broyden2_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- Initial guess for the Jacobian is (-1/alpha).
- reduction_method : str or tuple, optional
- Method used in ensuring that the rank of the Broyden
- matrix stays low. Can either be a string giving the
- name of the method, or a tuple of the form ``(method,
- param1, param2, ...)`` that gives the name of the
- method and values for additional parameters.
- Methods available:
- - ``restart``
- Drop all matrix columns. Has no
- extra parameters.
- - ``simple``
- Drop oldest matrix column. Has no
- extra parameters.
- - ``svd``
- Keep only the most significant SVD
- components.
- Extra parameters:
- - ``to_retain``
- Number of SVD components to
- retain when rank reduction is done.
- Default is ``max_rank - 2``.
- max_rank : int, optional
- Maximum rank for the Broyden matrix.
- Default is infinity (i.e., no rank reduction).
- """
- pass
- def _root_anderson_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- Initial guess for the Jacobian is (-1/alpha).
- M : float, optional
- Number of previous vectors to retain. Defaults to 5.
- w0 : float, optional
- Regularization parameter for numerical stability.
- Compared to unity, good values of the order of 0.01.
- """
- pass
- def _root_linearmixing_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, ``NoConvergence`` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- initial guess for the jacobian is (-1/alpha).
- """
- pass
- def _root_diagbroyden_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- initial guess for the jacobian is (-1/alpha).
- """
- pass
- def _root_excitingmixing_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- alpha : float, optional
- Initial Jacobian approximation is (-1/alpha).
- alphamax : float, optional
- The entries of the diagonal Jacobian are kept in the range
- ``[alpha, alphamax]``.
- """
- pass
- def _root_krylov_doc():
- """
- Options
- -------
- nit : int, optional
- Number of iterations to make. If omitted (default), make as many
- as required to meet tolerances.
- disp : bool, optional
- Print status to stdout on every iteration.
- maxiter : int, optional
- Maximum number of iterations to make. If more are needed to
- meet convergence, `NoConvergence` is raised.
- ftol : float, optional
- Relative tolerance for the residual. If omitted, not used.
- fatol : float, optional
- Absolute tolerance (in max-norm) for the residual.
- If omitted, default is 6e-6.
- xtol : float, optional
- Relative minimum step size. If omitted, not used.
- xatol : float, optional
- Absolute minimum step size, as determined from the Jacobian
- approximation. If the step size is smaller than this, optimization
- is terminated as successful. If omitted, not used.
- tol_norm : function(vector) -> scalar, optional
- Norm to use in convergence check. Default is the maximum norm.
- line_search : {None, 'armijo' (default), 'wolfe'}, optional
- Which type of a line search to use to determine the step size in
- the direction given by the Jacobian approximation. Defaults to
- 'armijo'.
- jac_options : dict, optional
- Options for the respective Jacobian approximation.
- rdiff : float, optional
- Relative step size to use in numerical differentiation.
- method : str or callable, optional
- Krylov method to use to approximate the Jacobian. Can be a string,
- or a function implementing the same interface as the iterative
- solvers in `scipy.sparse.linalg`. If a string, needs to be one of:
- ``'lgmres'``, ``'gmres'``, ``'bicgstab'``, ``'cgs'``, ``'minres'``,
- ``'tfqmr'``.
- The default is `scipy.sparse.linalg.lgmres`.
- inner_M : LinearOperator or InverseJacobian
- Preconditioner for the inner Krylov iteration.
- Note that you can use also inverse Jacobians as (adaptive)
- preconditioners. For example,
- >>> jac = BroydenFirst()
- >>> kjac = KrylovJacobian(inner_M=jac.inverse).
- If the preconditioner has a method named 'update', it will
- be called as ``update(x, f)`` after each nonlinear step,
- with ``x`` giving the current point, and ``f`` the current
- function value.
- inner_tol, inner_maxiter, ...
- Parameters to pass on to the "inner" Krylov solver.
- See `scipy.sparse.linalg.gmres` for details.
- outer_k : int, optional
- Size of the subspace kept across LGMRES nonlinear
- iterations.
- See `scipy.sparse.linalg.lgmres` for details.
- """
- pass
|