scipy.sparse.linalg.

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 @ x darstellt, wobei A reell symmetrisch oder komplex hermitesch ist. Für den Knickmodus (siehe unten) muss A zusä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 Eigenwert w[i] entspricht.

Andere Parameter:
MEine N x N Matrix, Array, sparse matrix oder LinearOperator, die

die Operation M @ x für das verallgemeinerte Eigenwertproblem

A @ 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 = b zu 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, der x = Minv @ b = M^-1 @ b liefert.

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, der x = OPinv @ b = [A - sigma * M]^-1 @ b liefert. Unabhängig vom gewählten Modus (normal, cayley oder buckling) sollte OPinv immer als OPinv = [A - sigma * M]^-1 bereitgestellt werden.

Beachten Sie, dass sich das Schlüsselwort 'which' bei Angabe von sigma auf die verschobenen Eigenwerte w'[i] bezieht, wobei

wenn 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 Problems A @ 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 eigenvalues und eigenvectors des Ausnahmeobjekts.

Siehe auch

eigs

Eigenwerte und Eigenvektoren für eine allgemeine (nicht-symmetrische) Matrix A

svds

Singulärwertzerlegung für eine Matrix A

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)