eigh_tridiagonal#
- scipy.linalg.eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None, check_finite=True, tol=0.0, lapack_driver='auto')[原始碼]#
求解實對稱三對角矩陣的特徵值問題。
尋找
a
的特徵值 w 和可選的右特徵向量 va v[:,i] = w[i] v[:,i] v.H v = identity
對於具有對角線元素 d 和非對角線元素 e 的實對稱矩陣
a
。- 參數:
- dndarray,形狀 (ndim,)
陣列的對角線元素。
- endarray,形狀 (ndim-1,)
陣列的非對角線元素。
- eigvals_onlybool,選填
僅計算特徵值,不計算特徵向量。(預設:同時計算特徵向量)
- select{‘a’, ‘v’, ‘i’},選填
要計算哪些特徵值
select
calculated
‘a’
所有特徵值
‘v’
區間 (min, max] 中的特徵值
‘i’
索引 min <= i <= max 的特徵值
- select_range(min, max),選填
選取特徵值的範圍
- check_finitebool,選填
是否檢查輸入矩陣是否僅包含有限數字。停用此項可能會提高效能,但如果輸入包含無限大或 NaN,可能會導致問題(崩潰、無法終止)。
- tolfloat
每個特徵值所需的絕對容差(僅在 ‘stebz’ 為 lapack_driver 時使用)。如果特徵值(或叢集)位於此寬度的區間內,則視為已收斂。如果 <= 0.(預設值),則使用值
eps*|a|
,其中 eps 是機器精度,而|a|
是矩陣a
的 1-範數。- lapack_driverstr
要使用的 LAPACK 函數,可以是 ‘auto’、‘stemr’、‘stebz’、‘sterf’ 或 ‘stev’。當 ‘auto’(預設值)時,如果
select='a'
,則會使用 ‘stemr’,否則使用 ‘stebz’。當使用 ‘stebz’ 尋找特徵值且eigvals_only=False
時,則會使用第二個 LAPACK 呼叫(呼叫?STEIN
)來尋找相應的特徵向量。‘sterf’ 只能在eigvals_only=True
和select='a'
時使用。‘stev’ 只能在select='a'
時使用。
- 回傳值:
- w(M,) ndarray
特徵值,依遞增順序排列,每個值根據其重數重複。
- v(M, M) ndarray
對應於特徵值
w[i]
的標準化特徵向量是列v[:,i]
。僅在eigvals_only=False
時回傳。
- 引發:
- LinAlgError
如果特徵值計算不收斂。
參見
eigvalsh_tridiagonal
對稱/ Hermitian 三對角矩陣的特徵值
eig
非對稱陣列的特徵值和右特徵向量
eigh
對稱/ Hermitian 陣列的特徵值和右特徵向量
eig_banded
對稱/ Hermitian 帶狀矩陣的特徵值和右特徵向量
註解
此函數使用 LAPACK
S/DSTEMR
常式。範例
>>> import numpy as np >>> from scipy.linalg import eigh_tridiagonal >>> d = 3*np.ones(4) >>> e = -1*np.ones(3) >>> w, v = eigh_tridiagonal(d, e) >>> A = np.diag(d) + np.diag(e, k=1) + np.diag(e, k=-1) >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4))) True