scipy.optimize.

broyden2#

scipy.optimize.broyden2(F, xin, iter=None, alpha=None, reduction_method='restart', max_rank=None, verbose=False, maxiter=None, f_tol=None, f_rtol=None, x_tol=None, x_rtol=None, tol_norm=None, line_search='armijo', callback=None, **kw)#

Finden Sie eine Nullstelle einer Funktion unter Verwendung von Broydens zweiter Jacobi-Approximation.

Diese Methode ist auch bekannt als „Broyden’s bad method“.

Parameter:
FFunktion(x) -> f

Funktion, deren Nullstelle gefunden werden soll; sollte ein Array-ähnliches Objekt entgegennehmen und zurückgeben.

xinarray_like

Erster Schätzwert für die Lösung

alphafloat, optional

Die anfängliche Schätzung für die Jacobi-Matrix ist (-1/alpha).

reduction_methodstr oder tuple, optional

Methode zur Sicherstellung, dass der Rang der Broyden-Matrix niedrig bleibt. Kann entweder ein String mit dem Namen der Methode sein oder ein Tupel der Form (methode, param1, param2, ...), das den Namen der Methode und Werte für zusätzliche Parameter angibt.

Verfügbare Methoden

  • restart: Alle Matrixspalten verwerfen. Hat keine zusätzlichen Parameter.

  • simple: Die älteste Matrixspalte verwerfen. Hat keine zusätzlichen Parameter.

  • svd: Nur die signifikantesten SVD-Komponenten beibehalten. Nimmt einen zusätzlichen Parameter to_retain entgegen, der die Anzahl der beim Rangabbau beizubehaltenden SVD-Komponenten bestimmt. Standard ist max_rank - 2.

max_rankint, optional

Maximaler Rang für die Broyden-Matrix. Standard ist unendlich (d.h. kein Rangabbau).

iterint, optional

Anzahl der durchzuführenden Iterationen. Wenn weggelassen (Standard), werden so viele Iterationen durchgeführt, wie zur Erfüllung der Toleranzen erforderlich sind.

verbosebool, optional

Gibt bei jeder Iteration den Status auf stdout aus.

maxiterint, optional

Maximale Anzahl von Iterationen. Wenn mehr benötigt werden, um die Konvergenz zu erreichen, wird NoConvergence ausgelöst.

f_tolfloat, optional

Absolute Toleranz (in der Maximalnorm) für das Residuum. Wenn weggelassen, beträgt der Standardwert 6e-6.

f_rtolfloat, optional

Relative Toleranz für das Residuum. Wenn weggelassen, wird sie nicht verwendet.

x_tolfloat, optional

Absolute minimale Schrittweite, wie sie aus der Jacobi-Approximation bestimmt wird. Wenn die Schrittweite kleiner ist als dieser Wert, wird die Optimierung als erfolgreich beendet. Wenn weggelassen, wird sie nicht verwendet.

x_rtolfloat, optional

Relative minimale Schrittweite. Wenn weggelassen, wird sie nicht verwendet.

tol_normfunction(vector) -> scalar, optional

Norm, die zur Überprüfung der Konvergenz verwendet wird. Standardmäßig wird die Maximalnorm verwendet.

line_search{None, ‘armijo’ (Standard), ‘wolfe’}, optional

Welche Art von Liniensuche zur Bestimmung der Schrittweite in der durch die Jacobi-Approximation gegebenen Richtung verwendet werden soll. Standardmäßig wird ‘armijo’ verwendet.

callbackfunction, optional

Optionale Callback-Funktion. Sie wird bei jeder Iteration als callback(x, f) aufgerufen, wobei x die aktuelle Lösung und f der entsprechende Rest ist.

Rückgabe:
solndarray

Ein Array (vom ähnlichen Array-Typ wie x0) mit der endgültigen Lösung.

Löst aus:
NoConvergence

Wenn keine Lösung gefunden wurde.

Siehe auch

root

Schnittstelle zu Nullstellungsverfahren für multivariate Funktionen. Siehe insbesondere method='broyden2'.

Hinweise

Dieser Algorithmus implementiert die inverse Jacobi-Quasi-Newton-Aktualisierung

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

entsprechend Broydens zweiter Methode.

Referenzen

[1]

B.A. van der Rotten, PhD-These, „A limited memory Broyden method to solve high-dimensional systems of nonlinear equations“. Mathematisch Instituut, Universiteit Leiden, Niederlande (2003).

https://web.archive.org/web/20161022015821/http://www.math.leidenuniv.nl/scripties/Rotten.pdf

Beispiele

Die folgenden Funktionen definieren ein System von nichtlinearen Gleichungen

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

Eine Lösung kann wie folgt erzielt werden.

>>> from scipy import optimize
>>> sol = optimize.broyden2(fun, [0, 0])
>>> sol
array([0.84116365, 0.15883529])