scipy.linalg.

eigvalsh#

scipy.linalg.eigvalsh(a, b=None, *, lower=True, overwrite_a=False, overwrite_b=False, type=1, check_finite=True, subset_by_index=None, subset_by_value=None, driver=None)[source]#

為複 Hermitian 或實對稱矩陣求解標準或廣義特徵值問題。

尋找陣列 a 的特徵值陣列 w,其中 b 是正定矩陣,使得對於每個特徵值 λ(w 的第 i 個條目)及其特徵向量 vi(v 的第 i 個列)滿足

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

在標準問題中,b 假設為單位矩陣。

參數:
a(M, M) array_like

將計算其特徵值的複 Hermitian 或實對稱矩陣。

b(M, M) array_like, optional

複 Hermitian 或實對稱正定矩陣。如果省略,則假設為單位矩陣。

lowerbool, optional

指示相關陣列資料是否取自 a 和(如果適用)b 的下三角或上三角。(預設值:lower)

overwrite_abool, optional

是否覆寫 a 中的資料(可能會提高效能)。預設值為 False。

overwrite_bbool, optional

是否覆寫 b 中的資料(可能會提高效能)。預設值為 False。

typeint, optional

對於廣義問題,此關鍵字指定要為 wv 求解的問題類型(僅接受 1、2、3 作為可能的輸入)

1 =>     a @ v = w @ b @ v
2 => a @ b @ v = w @ v
3 => b @ a @ v = w @ v

對於標準問題,此關鍵字會被忽略。

check_finitebool, optional

是否檢查輸入矩陣是否僅包含有限數字。停用可能會提高效能,但如果輸入確實包含無限或 NaN,則可能會導致問題(崩潰、非終止)。

subset_by_indexiterable, optional

如果提供,則此雙元素可迭代物件定義了所需特徵值的開始和結束索引(升序和從 0 開始索引)。若要僅傳回第二小到第五小的特徵值,則使用 [1, 4][n-3, n-1] 傳回最大的三個。僅適用於 “evr”、“evx” 和 “gvx” 驅動程式。條目會透過 int() 直接轉換為整數。

subset_by_valueiterable, optional

如果提供,則此雙元素可迭代物件定義了半開區間 (a, b],如果有的話,則僅傳回這些值之間的特徵值。僅適用於 “evr”、“evx” 和 “gvx” 驅動程式。對不受約束的端點使用 np.inf

driverstr, optional

定義應使用哪個 LAPACK 驅動程式。有效選項為標準問題的 “ev”、“evd”、“evr”、“evx” 和廣義問題(其中 b 不是 None)的 “gv”、“gvd”、“gvx”。請參閱 scipy.linalg.eigh 的「注意事項」章節。

返回:
w(N,) ndarray

N (N<=M) 個選定的特徵值,按升序排列,每個特徵值根據其重數重複。

引發:
LinAlgError

如果特徵值計算不收斂、發生錯誤,或 b 矩陣不是正定矩陣。請注意,如果輸入矩陣不是對稱或 Hermitian 矩陣,則不會報告錯誤,但結果將會錯誤。

參見

eigh

對稱/Hermitian 陣列的特徵值和右特徵向量

eigvals

一般陣列的特徵值

eigvals_banded

對稱/Hermitian 帶狀矩陣的特徵值

eigvalsh_tridiagonal

對稱/Hermitian 三對角矩陣的特徵值

注意事項

此函數不會檢查輸入陣列是否為 Hermitian/對稱,以便允許僅使用其上/下三角部分表示陣列。

此函數作為 scipy.linalg.eigh 的單行簡寫,選項為 eigvals_only=True,以取得特徵值而非特徵向量。此處保留它是為了方便舊版程式碼。使用主函數可能更有益,以便完全控制並更符合 Python 風格。

範例

如需更多範例,請參閱 scipy.linalg.eigh

>>> import numpy as np
>>> from scipy.linalg import eigvalsh
>>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]])
>>> w = eigvalsh(A)
>>> w
array([-3.74637491, -0.76263923,  6.08502336, 12.42399079])