eigh#
- scipy.linalg.eigh(a, b=None, *, lower=True, eigvals_only=False, overwrite_a=False, overwrite_b=False, type=1, check_finite=True, subset_by_index=None, subset_by_value=None, driver=None)[Quelle]#
Löst ein Standard- oder verallgemeinertes Eigenwertproblem für eine komplexe hermitesche oder reelle symmetrische Matrix.
Finden Sie die Eigenwertmatrix
wund optional die Eigenvektormatrixvder Matrixa, wobeibpositiv definit ist, sodass für jeden Eigenwert λ (i-ter Eintrag von w) und seinen Eigenvektorvi(i-te Spalte vonv) gilt:a @ vi = λ * b @ vi vi.conj().T @ a @ vi = λ vi.conj().T @ b @ vi = 1
Im Standardproblem wird angenommen, dass
bdie Einheitsmatrix ist.Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.
- Parameter:
- a(M, M) array_like
Eine komplexe hermitesche oder reelle symmetrische Matrix, deren Eigenwerte und Eigenvektoren berechnet werden.
- b(M, M) array_like, optional
Eine komplexe hermitesche oder reelle symmetrische, positiv definite Matrix. Wenn weggelassen, wird die Einheitsmatrix angenommen.
- lowerbool, optional
Ob die relevanten Array-Daten aus dem unteren oder oberen Dreieck von
aund, falls zutreffend, vonbentnommen werden. (Standard: lower)- eigvals_onlybool, optional
Ob nur Eigenwerte und keine Eigenvektoren berechnet werden sollen. (Standard: beide werden berechnet)
- subset_by_indexiterable, optional
Wenn angegeben, definiert dieses zweielementige Iterable den Start- und Endindex der gewünschten Eigenwerte (aufsteigend sortiert und 0-indiziert). Um nur die zweitkleinsten bis fünftkleinsten Eigenwerte zurückzugeben, wird
[1, 4]verwendet.[n-3, n-1]gibt die größten drei zurück. Nur verfügbar mit den Treibern "evr", "evx" und "gvx". Die Einträge werden direkt überint()in Ganzzahlen umgewandelt.- subset_by_valueiterable, optional
Wenn angegeben, definiert dieses zweielementige Iterable das halboffene Intervall
(a, b], innerhalb dessen, falls vorhanden, nur die Eigenwerte zurückgegeben werden. Nur verfügbar mit den Treibern "evr", "evx" und "gvx". Verwenden Sienp.inffür die unbeschränkten Enden.- driverstr, optional
Gibt an, welcher LAPACK-Treiber verwendet werden soll. Gültige Optionen sind "ev", "evd", "evr", "evx" für Standardprobleme und "gv", "gvd", "gvx" für verallgemeinerte Probleme (wenn b nicht None ist). Siehe den Abschnitt "Hinweise". Der Standardwert für Standardprobleme ist "evr". Für verallgemeinerte Probleme wird "gvd" für die vollständige Menge und "gvx" für angeforderte Teilmengen verwendet.
- typeint, optional
Bei verallgemeinerten Problemen gibt dieses Schlüsselwort den Problemtyp an, der für
wundvgelöst werden soll (kann nur die Werte 1, 2, 3 annehmen)1 => a @ v = w @ b @ v 2 => a @ b @ v = w @ v 3 => b @ a @ v = w @ v
Dieses Schlüsselwort wird für Standardprobleme ignoriert.
- overwrite_abool, optional
Ob Daten in
aüberschrieben werden sollen (kann die Leistung verbessern). Standard ist False.- overwrite_bbool, optional
Ob Daten in
büberschrieben werden sollen (kann die Leistung verbessern). Standard ist False.- check_finitebool, optional
Ob überprüft werden soll, ob die Eingabematrizen nur endliche Zahlen enthalten. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürzen, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.
- Rückgabe:
- w(N,) ndarray
Die N (N<=M) ausgewählten Eigenwerte, in aufsteigender Reihenfolge, jeweils wiederholt entsprechend ihrer Vielfachheit.
- v(M, N) ndarray
Der normalisierte Eigenvektor, der dem Eigenwert
w[i]entspricht, ist die Spaltev[:,i]. Wird nur zurückgegeben, wenneigvals_only=False.
- Löst aus:
- LinAlgError
Wenn die Eigenwertberechnung nicht konvergiert, ein Fehler aufgetreten ist oder die Matrix b nicht positiv definit ist. Beachten Sie, dass, wenn die Eingabematrizen nicht symmetrisch oder hermitesch sind, keine Fehlermeldung ausgegeben wird, die Ergebnisse jedoch falsch sind.
Siehe auch
eigvalshEigenwerte von symmetrischen oder hermiteschen Arrays
eigEigenwerte und rechte Eigenvektoren für nicht-symmetrische Arrays
eigh_tridiagonalEigenwerte und rechte Eigenvektoren für symmetrische/hermitesche tridiagonale Matrizen
Hinweise
Diese Funktion überprüft nicht, ob das Eingabearray hermitesch/symmetrisch ist, um die Darstellung von Arrays mit nur ihren oberen/unteren Dreiecksteilen zu ermöglichen. Beachten Sie auch, dass die Endlichkeitsprüfung, obwohl nicht berücksichtigt, für das gesamte Array gilt und vom "lower"-Schlüsselwort unbeeinflusst bleibt.
Diese Funktion verwendet LAPACK-Treiber für Berechnungen in allen möglichen Schlüsselwortkombinationen, präfixiert mit
sy, wenn Arrays reell sind, undhe, wenn sie komplex sind, z.B. wird ein Float-Array mit dem Treiber "evr" über "syevr" gelöst, komplexe Arrays mit dem Treiber "gvx" über "hegvx" usw.Kurz gesagt, der langsamste und robusteste Treiber ist der klassische
<sy/he>ev, der symmetrische QR verwendet.<sy/he>evrwird als optimale Wahl für die meisten allgemeinen Fälle angesehen. Es gibt jedoch bestimmte Fälle, in denen<sy/he>evdschneller berechnet, jedoch mehr Speicher benötigt.<sy/he>evxist zwar schneller als<sy/he>ev, schneidet aber oft schlechter ab als die anderen, es sei denn, es werden nur sehr wenige Eigenwerte für große Arrays angefordert, obwohl es immer noch keine Leistungsgarantie gibt.Beachten Sie, dass die zugrunde liegenden LAPACK-Algorithmen unterschiedlich sind, je nachdem, ob eigvals_only True oder False ist – daher können die Eigenwerte davon abweichen, ob Eigenvektoren angefordert werden oder nicht. Die Differenz ist im Allgemeinen von der Größenordnung des Maschinen-Epsilon multipliziert mit dem größten Eigenwert, so dass sie wahrscheinlich nur bei Null- oder Null-nahen Eigenwerten sichtbar ist.
Für das verallgemeinerte Problem erfolgt die Normierung in Bezug auf das angegebene type-Argument
type 1 and 3 : v.conj().T @ a @ v = w type 2 : inv(v).conj().T @ a @ inv(v) = w type 1 or 2 : v.conj().T @ b @ v = I type 3 : v.conj().T @ inv(b) @ v = I
Beispiele
>>> import numpy as np >>> from scipy.linalg import eigh >>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]]) >>> w, v = eigh(A) >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4))) True
Nur die Eigenwerte anfordern
>>> w = eigh(A, eigvals_only=True)
Eigenwerte anfordern, die kleiner als 10 sind.
>>> A = np.array([[34, -4, -10, -7, 2], ... [-4, 7, 2, 12, 0], ... [-10, 2, 44, 2, -19], ... [-7, 12, 2, 79, -34], ... [2, 0, -19, -34, 29]]) >>> eigh(A, eigvals_only=True, subset_by_value=[-np.inf, 10]) array([6.69199443e-07, 9.11938152e+00])
Den zweitkleinsten Eigenwert und seinen Eigenvektor anfordern
>>> w, v = eigh(A, subset_by_index=[1, 1]) >>> w array([9.11938152]) >>> v.shape # only a single column is returned (5, 1)