tfqmr#
- scipy.sparse.linalg.tfqmr(A, b, x0=None, *, rtol=1e-05, atol=0.0, maxiter=None, M=None, callback=None, show=False)[Quelle]#
Löse
Ax = bmit der Transpose-Free Quasi-Minimal Residual Methode.- Parameter:
- A{sparse array, ndarray, LinearOperator}
Die reelle oder komplexe N-mal-N-Matrix des linearen Systems. Alternativ kann A ein linearer Operator sein, der
Axerzeugen kann, z.B. mitscipy.sparse.linalg.LinearOperator.- b{ndarray}
Rechte Seite des linearen Systems. Hat die Form (N,) oder (N,1).
- x0{ndarray}
Startschätzung für die Lösung.
- rtol, atolfloat, optional
Parameter für den Konvergenztest. Für Konvergenz sollte
norm(b - A @ x) <= max(rtol*norm(b), atol)erfüllt sein. Der Standardwert istrtol=1e-5, der Standardwert füratolist0.0.- maxiterint, optional
Maximale Anzahl von Iterationen. Die Iteration stoppt nach maxiter Schritten, auch wenn die angegebene Toleranz nicht erreicht wurde. Standard ist
min(10000, ndofs * 10), wobeindofs = A.shape[0].- M{sparse array, ndarray, LinearOperator}
Inverse des Vorbedingers von A. M sollte die Inverse von A approximieren und leicht lösbar sein (siehe Anmerkungen). Effektive Vorbedingung verbessert die Konvergenzrate dramatisch, was bedeutet, dass weniger Iterationen benötigt werden, um eine gegebene Fehlertoleranz zu erreichen. Standardmäßig wird kein Vorbedingung verwendet.
- callbackfunction, optional
Vom Benutzer bereitgestellte Funktion, die nach jeder Iteration aufgerufen wird. Sie wird als
callback(xk)aufgerufen, wobeixkder aktuelle Lösungsvektor ist.- showbool, optional
Setzen Sie
show = True, um die Konvergenz anzuzeigen,show = Falseschließt die Ausgabe der Konvergenz. Standard ist False.
- Rückgabe:
- xndarray
Die konvergierte Lösung.
- infoint
Liefert Konvergenzinformationen
0 : erfolgreicher Abschluss
>0 : Konvergenz zur Toleranz nicht erreicht, Anzahl der Iterationen
<0 : ungültige Eingabe oder Zusammenbruch
Hinweise
Der Transpose-Free QMR-Algorithmus leitet sich vom CGS-Algorithmus ab. Im Gegensatz zu CGS werden die Konvergenzkurven für die TFQMR-Methode jedoch geglättet, indem eine Quasi-Minimierung der Residuen-Norm berechnet wird. Die Implementierung unterstützt linke Vorbedingungen, und die „Residuen-Norm“, die im Konvergenzkriterium berechnet wird, ist tatsächlich eine obere Schranke für die tatsächliche Residuen-Norm
||b - Axk||.Referenzen
[1]R. W. Freund, A Transpose-Free Quasi-Minimal Residual Algorithm for Non-Hermitian Linear Systems, SIAM J. Sci. Comput., 14(2), 470-482, 1993.
[2]Y. Saad, Iterative Methods for Sparse Linear Systems, 2nd edition, SIAM, Philadelphia, 2003.
[3]C. T. Kelley, Iterative Methods for Linear and Nonlinear Equations, number 16 in Frontiers in Applied Mathematics, SIAM, Philadelphia, 1995.
Beispiele
>>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import tfqmr >>> A = csc_array([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float) >>> b = np.array([2, 4, -1], dtype=float) >>> x, exitCode = tfqmr(A, b, atol=0.0) >>> print(exitCode) # 0 indicates successful convergence 0 >>> np.allclose(A.dot(x), b) True