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 = bmit 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
Axmithilfe von z. B.LinearOperatorerzeugen 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 istrtol=1e-5undatol=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, wobeixkder 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. Diec-Elemente in den Tupeln könnenNonesein, in diesem Fall werden die Vektoren neu berechnet mitc = A ubeim 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