KrylovJacobian#
- class scipy.optimize.KrylovJacobian(rdiff=None, method='lgmres', inner_maxiter=20, inner_M=None, outer_k=10, **kw)[Quelle]#
Findet eine Wurzel einer Funktion mithilfe einer Krylov-Approximation für die inverse Jacobi-Matrix.
Diese Methode eignet sich zum Lösen von Problemen mit großen Dimensionen.
- Parameter:
- %(params_basic)s
- rdifffloat, optional
Relativer Schrittgrößenwert für die numerische Differenzierung.
- methodstr oder aufrufbar, optional
Krylov-Methode zur Approximation der Jacobi-Matrix. Kann ein String oder eine Funktion sein, die dieselbe Schnittstelle wie die iterativen Löser in
scipy.sparse.linalgimplementiert. Wenn es sich um einen String handelt, muss es einer der folgenden sein:'lgmres','gmres','bicgstab','cgs','minres','tfqmr'.Der Standardwert ist
scipy.sparse.linalg.lgmres.- inner_maxiterint, optional
Parameter für den „inneren“ Krylov-Löser: maximale Anzahl von Iterationen. Die Iteration wird nach maxiter Schritten beendet, auch wenn die angegebene Toleranz noch nicht erreicht wurde.
- inner_MLinearOperator oder InverseJacobian
Vorkonditionierer für die innere Krylov-Iteration. Beachten Sie, dass Sie auch inverse Jacobi-Matrizen als (adaptive) Vorkonditionierer verwenden können. Zum Beispiel,
>>> from scipy.optimize import BroydenFirst, KrylovJacobian >>> from scipy.optimize import InverseJacobian >>> jac = BroydenFirst() >>> kjac = KrylovJacobian(inner_M=InverseJacobian(jac))
Wenn der Vorkonditionierer eine Methode namens „update“ hat, wird diese nach jedem nichtlinearen Schritt mit
update(x, f)aufgerufen, wobeixden aktuellen Punkt undfden aktuellen Funktionswert angibt.- outer_kint, optional
Größe des Unterraums, der über LGMRES-nichtlineare Iterationen beibehalten wird. Siehe
scipy.sparse.linalg.lgmresfür Details.- inner_kwargskwargs
Schlüsselwortargumente für den „inneren“ Krylov-Löser (definiert mit method). Parameternamen müssen mit dem Präfix inner_ beginnen, der vor der Übergabe an die innere Methode gestrichen wird. Siehe z.B.
scipy.sparse.linalg.gmresfür Details.- %(params_extra)s
Methoden
alsVorkonditionierer
matvec
Einrichtung
solve
update
Siehe auch
rootSchnittstelle zu Wurzel-Findungsalgorithmen für multivariate Funktionen. Insbesondere siehe
method='krylov'.scipy.sparse.linalg.gmresscipy.sparse.linalg.lgmres
Hinweise
Diese Funktion implementiert einen Newton-Krylov-Löser. Die Grundidee besteht darin, die Inverse der Jacobi-Matrix mit einer iterativen Krylov-Methode zu berechnen. Diese Methoden erfordern nur die Auswertung von Jacobi-Vektor-Produkten, die bequem durch endliche Differenzen approximiert werden.
\[J v \approx (f(x + \omega*v/|v|) - f(x)) / \omega\]Aufgrund der Verwendung iterativer Matrixinversen können diese Methoden mit nichtlinearen Problemen großer Dimensionen umgehen.
SciPys Modul
scipy.sparse.linalgbietet eine Auswahl an Krylov-Lösern. Der Standard hier ist lgmres, eine Variante der unterbrochenen GMRES-Iteration, die einige der Informationen aus früheren Newton-Schritten wiederverwendet, um Jacobi-Matrizen in nachfolgenden Schritten zu invertieren.Eine Übersicht über Newton-Krylov-Methoden finden Sie beispielsweise in [1] und für die LGMRES-Methode der sparsen Inversion siehe [2].
Referenzen
[1]C. T. Kelley, Solving Nonlinear Equations with Newton’s Method, SIAM, S. 57-83, 2003. DOI:10.1137/1.9780898718898.ch3
[2]D.A. Knoll und D.E. Keyes, J. Comp. Phys. 193, 357 (2004). DOI:10.1016/j.jcp.2003.08.010
[3]A.H. Baker und E.R. Jessup und T. Manteuffel, SIAM J. Matrix Anal. Appl. 26, 962 (2005). DOI:10.1137/S0895479803422014
Beispiele
Die folgenden Funktionen definieren ein System von nichtlinearen Gleichungen
>>> def fun(x): ... return [x[0] + 0.5 * x[1] - 1.0, ... 0.5 * (x[1] - x[0]) ** 2]
Eine Lösung kann wie folgt erzielt werden.
>>> from scipy import optimize >>> sol = optimize.newton_krylov(fun, [0, 0]) >>> sol array([0.66731771, 0.66536458])