scipy.linalg.

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 w und optional die Eigenvektormatrix v der Matrix a, wobei b positiv definit ist, sodass für jeden Eigenwert λ (i-ter Eintrag von w) und seinen Eigenvektor vi (i-te Spalte von v) gilt:

              a @ vi = λ * b @ vi
vi.conj().T @ a @ vi = λ
vi.conj().T @ b @ vi = 1

Im Standardproblem wird angenommen, dass b die 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 a und, falls zutreffend, von b entnommen 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 über int() 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 Sie np.inf fü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 w und v gelö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 Spalte v[:,i]. Wird nur zurückgegeben, wenn eigvals_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

eigvalsh

Eigenwerte von symmetrischen oder hermiteschen Arrays

eig

Eigenwerte und rechte Eigenvektoren für nicht-symmetrische Arrays

eigh_tridiagonal

Eigenwerte 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, und he, 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>evr wird als optimale Wahl für die meisten allgemeinen Fälle angesehen. Es gibt jedoch bestimmte Fälle, in denen <sy/he>evd schneller berechnet, jedoch mehr Speicher benötigt. <sy/he>evx ist 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)