scipy.sparse.linalg.

gcrotmk#

scipy.sparse.linalg.gcrotmk(A, b, x0=None, *, rtol=1e-05, atol=0.0, maxiter=1000, M=None, callback=None, m=20, k=None, CU=None, discard_C=False, truncate='oldest')[Quelle]#

Löst Ax = b mit dem flexiblen GCROT(m,k)-Algorithmus.

Parameter:
A{sparse array, ndarray, LinearOperator}

Die reelle oder komplexe N-mal-N-Matrix des linearen Gleichungssystems. Alternativ kann A ein linearer Operator sein, der Ax mithilfe von z. B. LinearOperator erzeugen kann.

bndarray

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

x0ndarray

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 ist rtol=1e-5 und atol=0.0.

maxiterint, optional

Maximale Anzahl von Iterationen. Die Iteration wird nach maxiter Schritten gestoppt, auch wenn die angegebene Toleranz noch nicht erreicht wurde. Der Standardwert ist 1000.

M{sparse array, ndarray, LinearOperator}, optional

Präkonditionierer für A. Der Präkonditionierer sollte die Inverse von A approximieren. gcrotmk ist ein „flexibler“ Algorithmus und der Präkonditionierer kann von Iteration zu Iteration variieren. Eine effektive Präkonditionierung verbessert die Konvergenzrate dramatisch, was bedeutet, dass weniger Iterationen benötigt werden, um eine gegebene Fehlertoleranz zu erreichen.

callbackfunction, optional

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

mint, optional

Anzahl der inneren FGMRES-Iterationen pro äußerer Iteration. Standard: 20

kint, optional

Anzahl der Vektoren, die zwischen den inneren FGMRES-Iterationen beibehalten werden. Laut [2] sind gute Werte um m herum.

CUlist of tuples, optional

Liste von Tupeln (c, u), die die Spalten der Matrizen C und U im GCROT(m,k)-Algorithmus enthalten. Details finden Sie unter [2]. Die gegebene Liste und die darin enthaltenen Vektoren werden in-place modifiziert. Wenn nicht gegeben, werden leere Matrizen verwendet. Die c-Elemente in den Tupeln können None sein, in diesem Fall werden die Vektoren neu berechnet mit c = A u beim Start und wie in [3] beschrieben orthogonalisiert.

discard_Cbool, optional

C-Vektoren am Ende verwerfen. Nützlich, wenn Krylov-Unterräume für verschiedene lineare Systeme wiederverwendet werden.

truncate{‘oldest’, ‘smallest’}, optional

Verwendetes Kürzungsschema. Verwerfen: älteste Vektoren oder Vektoren mit kleinsten Singulärwerten gemäß dem in [1,2] beschriebenen Schema. Detaillierte Vergleiche finden Sie unter [2]. Standard: ‘oldest’

Rückgabe:
xndarray

Die gefundene Lösung.

infoint

Liefert Konvergenzinformationen

  • 0 : erfolgreicher Abschluss

  • >0 : Konvergenz zur Toleranz nicht erreicht, Anzahl der Iterationen

Referenzen

[1]

E. de Sturler, ‘’Truncation strategies for optimal Krylov subspace methods’’, SIAM J. Numer. Anal. 36, 864 (1999).

[2] (1,2,3)

J.E. Hicken und D.W. Zingg, ‘’A simplified and flexible variant of GCROT for solving nonsymmetric linear systems’’, SIAM J. Sci. Comput. 32, 172 (2010).

[3]

M.L. Parks, E. de Sturler, G. Mackey, D.D. Johnson, S. Maiti, ‘’Recycling Krylov subspaces for sequences of linear systems’’, SIAM J. Sci. Comput. 28, 1651 (2006).

Beispiele

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import gcrotmk
>>> R = np.random.randn(5, 5)
>>> A = csc_array(R)
>>> b = np.random.randn(5)
>>> x, exit_code = gcrotmk(A, b, atol=1e-5)
>>> print(exit_code)
0
>>> np.allclose(A.dot(x), b)
True