scipy.linalg.

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 和可選的右特徵向量 v

a 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=Trueselect='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