eigsh#
- scipy.sparse.linalg.eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, mode='normal')[Quelle]#
Finden Sie k Eigenwerte und Eigenvektoren der reellen symmetrischen quadratischen Matrix oder komplexen hermiteschen Matrix A.
Löst
A @ x[i] = w[i] * x[i], das Standard-Eigenwertproblem für die Eigenwerte w[i] mit den entsprechenden Eigenvektoren x[i].Wenn M angegeben ist, wird
A @ x[i] = w[i] * M @ x[i]gelöst, das verallgemeinerte Eigenwertproblem für die Eigenwerte w[i] mit den entsprechenden Eigenvektoren x[i].Beachten Sie, dass es keine spezialisierte Routine für den Fall gibt, dass A eine komplex-hermitesche Matrix ist. In diesem Fall ruft
eigsh()eigs()auf und gibt die Realteile der erhaltenen Eigenwerte zurück.- Parameter:
- Andarray, sparse matrix oder LinearOperator
Ein quadratischer Operator, der die Operation
A @ xdarstellt, wobeiAreell symmetrisch oder komplex hermitesch ist. Für den Knickmodus (siehe unten) mussAzusätzlich positiv definit sein.- kint, optional
Die Anzahl der gewünschten Eigenwerte und Eigenvektoren. k muss kleiner als N sein. Es ist nicht möglich, alle Eigenvektoren einer Matrix zu berechnen.
- Rückgabe:
- warray
Array von k Eigenwerten.
- varray
Ein Array, das die k Eigenvektoren darstellt. Die Spalte
v[:, i]ist der Eigenvektor, der dem Eigenwertw[i]entspricht.
- Andere Parameter:
- MEine N x N Matrix, Array, sparse matrix oder LinearOperator, die
die Operation
M @ xfür das verallgemeinerte EigenwertproblemA @ x = w * M @ x.
M muss eine reelle symmetrische Matrix darstellen, wenn A reell ist, und eine komplexe hermitesche Matrix, wenn A komplex ist. Für optimale Ergebnisse sollte der Datentyp von M derselbe sein wie der von A. Außerdem
Wenn sigma None ist, ist M symmetrisch positiv definit.
Wenn sigma angegeben ist, ist M symmetrisch positiv semidefinit.
Im Knickmodus ist M symmetrisch indefinit.
Wenn sigma None ist, benötigt eigsh einen Operator, um die Lösung der linearen Gleichung
M @ x = bzu berechnen. Dies geschieht intern durch eine (sparse) LU-Zerlegung für eine explizite Matrix M oder durch einen iterativen Löser für einen allgemeinen linearen Operator. Alternativ kann der Benutzer die Matrix oder den Operator Minv bereitstellen, derx = Minv @ b = M^-1 @ bliefert.- sigmareal
Eigenwerte in der Nähe von sigma mithilfe des Shift-Invert-Modus finden. Dies erfordert einen Operator zur Berechnung der Lösung des linearen Systems
[A - sigma * M] x = b, wobei M die Einheitsmatrix ist, wenn nicht spezifiziert. Dies wird intern durch eine (sparse) LU-Zerlegung für explizite Matrizen A & M oder durch einen iterativen Löser berechnet, wenn entweder A oder M ein allgemeiner linearer Operator ist. Alternativ kann der Benutzer die Matrix oder den Operator OPinv bereitstellen, derx = OPinv @ b = [A - sigma * M]^-1 @ bliefert. Unabhängig vom gewählten Modus (normal, cayley oder buckling) sollte OPinv immer alsOPinv = [A - sigma * M]^-1bereitgestellt werden.Beachten Sie, dass sich das Schlüsselwort 'which' bei Angabe von sigma auf die verschobenen Eigenwerte
w'[i]bezieht, wobeiwenn
mode == 'normal':w'[i] = 1 / (w[i] - sigma).wenn
mode == 'cayley':w'[i] = (w[i] + sigma) / (w[i] - sigma).wenn
mode == 'buckling':w'[i] = w[i] / (w[i] - sigma).(siehe weitere Diskussion in 'mode' unten)
- v0ndarray, optional
Startvektor für die Iteration. Standard: Zufällig
- ncvint, optional
Die Anzahl der generierten Lanczos-Vektoren ncv muss größer als k und kleiner als n sein; es wird empfohlen, dass
ncv > 2*k. Standard:min(n, max(2*k + 1, 20))- whichstr [‘LM’ | ‘SM’ | ‘LA’ | ‘SA’ | ‘BE’]
Wenn A eine komplex-hermitesche Matrix ist, ist 'BE' ungültig. Welche k Eigenvektoren und Eigenwerte gefunden werden sollen
'LM' : Größte (im Betrag) Eigenwerte.
'SM' : Kleinste (im Betrag) Eigenwerte.
'LA' : Größte (algebraische) Eigenwerte.
'SA' : Kleinste (algebraische) Eigenwerte.
'BE' : Die Hälfte (k/2) von jedem Ende des Spektrums.
Wenn k ungerade ist, werden ein weiterer (k/2+1) vom oberen Ende zurückgegeben. Wenn sigma != None, bezieht sich 'which' auf die verschobenen Eigenwerte
w'[i](siehe Diskussion in 'sigma', oben). ARPACK ist generell besser darin, große Werte als kleine Werte zu finden. Wenn kleine Eigenwerte gewünscht sind, sollten Sie den Shift-Invert-Modus für eine bessere Leistung in Betracht ziehen.- maxiterint, optional
Maximale Anzahl erlaubter Arnoldi-Update-Iterationen. Standard:
n*10- tolfloat
Relative Genauigkeit für Eigenwerte (Abbruchkriterium). Der Standardwert 0 bedeutet Maschinenpräzision.
- MinvN x N Matrix, Array, sparse matrix oder LinearOperator
Siehe Hinweise in M, oben.
- OPinvN x N Matrix, Array, sparse matrix oder LinearOperator
Siehe Hinweise in sigma, oben.
- return_eigenvectorsbool
Gibt zusätzlich zu den Eigenwerten auch die Eigenvektoren (True) zurück. Dieser Wert bestimmt die Reihenfolge, in der die Eigenwerte sortiert werden. Die Sortierreihenfolge hängt auch von der Variablen which ab.
- Für which = ‘LM’ oder ‘SA’
Wenn return_eigenvectors True ist, werden die Eigenwerte nach algebraischem Wert sortiert.
Wenn return_eigenvectors False ist, werden die Eigenwerte nach Betrag sortiert.
- Für which = ‘BE’ oder ‘LA’
werden die Eigenwerte immer nach algebraischem Wert sortiert.
- Für which = ‘SM’
Wenn return_eigenvectors True ist, werden die Eigenwerte nach algebraischem Wert sortiert.
Wenn return_eigenvectors False ist, werden die Eigenwerte nach absteigendem Betrag sortiert.
- modestring [‘normal’ | ‘buckling’ | ‘cayley’]
Gibt die Strategie für den Shift-Invert-Modus an. Dieses Argument gilt nur für reellwertige A und sigma != None. Für den Shift-Invert-Modus löst ARPACK intern das Eigenwertproblem
OP @ x'[i] = w'[i] * B @ x'[i]und transformiert die resultierenden Ritz-Vektoren x'[i] und Ritz-Werte w'[i] in die gewünschten Eigenvektoren und Eigenwerte des ProblemsA @ x[i] = w[i] * M @ x[i]. Die Modi sind wie folgt:- 'normal'
OP = [A - sigma * M]^-1 @ M, B = M, w’[i] = 1 / (w[i] - sigma)
- 'buckling'
OP = [A - sigma * M]^-1 @ A, B = A, w’[i] = w[i] / (w[i] - sigma)
- 'cayley'
OP = [A - sigma * M]^-1 @ [A + sigma * M], B = M, w’[i] = (w[i] + sigma) / (w[i] - sigma)
Die Wahl des Modus beeinflusst, welche Eigenwerte mit dem Schlüsselwort 'which' ausgewählt werden, und kann auch die Konvergenzstabilität beeinflussen (siehe [2] für eine Diskussion).
- Löst aus:
- ArpackNoConvergence
Wenn die angeforderte Konvergenz nicht erreicht wird.
Die derzeit konvergierten Eigenwerte und Eigenvektoren finden Sie als Attribute
eigenvaluesundeigenvectorsdes Ausnahmeobjekts.
Siehe auch
Hinweise
Diese Funktion ist ein Wrapper für die ARPACK [1] SSEUPD- und DSEUPD-Funktionen, die die Methode der implizit wiederhergestellten Lanczos-Vektoren verwenden, um die Eigenwerte und Eigenvektoren zu finden [2].
Referenzen
[1]ARPACK Software, opencollab/arpack-ng
[2]R. B. Lehoucq, D. C. Sorensen, und C. Yang, ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods. SIAM, Philadelphia, PA, 1998.
Beispiele
>>> import numpy as np >>> from scipy.sparse.linalg import eigsh >>> identity = np.eye(13) >>> eigenvalues, eigenvectors = eigsh(identity, k=6) >>> eigenvalues array([1., 1., 1., 1., 1., 1.]) >>> eigenvectors.shape (13, 6)