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 Parameterto_retainentgegen, der die Anzahl der beim Rangabbau beizubehaltenden SVD-Komponenten bestimmt. Standard istmax_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
NoConvergenceausgelö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
rootSchnittstelle 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])