scipy.optimize.

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.linalg implementiert. 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, wobei x den aktuellen Punkt und f den aktuellen Funktionswert angibt.

outer_kint, optional

Größe des Unterraums, der über LGMRES-nichtlineare Iterationen beibehalten wird. Siehe scipy.sparse.linalg.lgmres fü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.gmres für Details.

%(params_extra)s

Methoden

alsVorkonditionierer

matvec

Einrichtung

solve

update

Siehe auch

root

Schnittstelle zu Wurzel-Findungsalgorithmen für multivariate Funktionen. Insbesondere siehe method='krylov'.

scipy.sparse.linalg.gmres
scipy.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.linalg bietet 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])