scipy.sparse.linalg.

qmr#

scipy.sparse.linalg.qmr(A, b, x0=None, *, rtol=1e-05, atol=0.0, maxiter=None, M1=None, M2=None, callback=None)[Quelle]#

Löst Ax = b mit der Quasi-Minimal Residual Methode.

Parameter:
A{sparse array, ndarray, LinearOperator}

Die reellwertige N-mal-N-Matrix des linearen Systems. Alternativ kann A ein linearer Operator sein, der Ax und A^T x erzeugen kann, z.B. mit scipy.sparse.linalg.LinearOperator.

bndarray

Rechte Seite des linearen Systems. Hat die Form (N,) oder (N,1).

x0ndarray

Startschätzung für die Lösung.

atol, rtolfloat, optional

Parameter für den Konvergenztest. Für Konvergenz sollte norm(b - A @ x) <= max(rtol*norm(b), atol) erfüllt sein. Der Standardwert ist atol=0. und rtol=1e-5.

maxiterinteger

Maximale Anzahl von Iterationen. Die Iteration wird nach maxiter-Schritten beendet, auch wenn die angegebene Toleranz nicht erreicht wurde.

M1{sparse array, ndarray, LinearOperator}

Linke Vorbedingung für A.

M2{sparse array, ndarray, LinearOperator}

Rechte Vorbedingung für A. Wird zusammen mit der linken Vorbedingung M1 verwendet. Die Matrix M1@A@M2 sollte besser konditioniert sein als A allein.

callbackfunction

Vom Benutzer bereitgestellte Funktion, die nach jeder Iteration aufgerufen wird. Sie wird als callback(xk) aufgerufen, wobei xk der aktuelle Lösungsvektor ist.

Rückgabe:
xndarray

Die konvergierte Lösung.

infointeger
Liefert Konvergenzinformationen

0 : erfolgreicher Abbruch >0 : Konvergenz zur Toleranz nicht erreicht, Anzahl der Iterationen <0 : Parameterzusammenbruch

Siehe auch

LinearOperator

Beispiele

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import qmr
>>> A = csc_array([[3., 2., 0.], [1., -1., 0.], [0., 5., 1.]])
>>> b = np.array([2., 4., -1.])
>>> x, exitCode = qmr(A, b, atol=1e-5)
>>> print(exitCode)            # 0 indicates successful convergence
0
>>> np.allclose(A.dot(x), b)
True