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')[源代码][源代码]#

求解实对称三对角矩阵的特征值问题。

找到特征值 w 和可选的右特征向量 va:

a v[:,i] = w[i] v[:,i]
v.H v    = identity

对于一个具有对角元素 d 和非对角元素 e 的实对称矩阵 a

参数:
dndarray, 形状 (ndim,)

数组的对角元素。

endarray, 形状 (ndim-1,)

数组的非对角元素。

eigvals_onlybool, 可选

仅计算特征值,不计算特征向量。(默认:同时计算特征向量)

选择{‘a’, ‘v’, ‘i’}, 可选

计算哪些特征值

选择

计算的

‘a’

所有特征值

‘v’

区间 (min, max] 中的特征值

‘我’

特征值与索引 min <= i <= max

选择范围(最小值, 最大值), 可选

选定特征值的范围

check_finitebool, 可选

是否检查输入矩阵是否仅包含有限数值。禁用可能会提高性能,但如果输入包含无穷大或NaN,可能会导致问题(崩溃、非终止)。

tol浮动

每个特征值所需的绝对容差(仅在使用 ‘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 时返回。

Raises:
LinAlgError

如果特征值计算不收敛。

参见

eigvalsh_tridiagonal

对称/Hermitian 三对角矩阵的特征值

eig

非对称数组的特征值和右特征向量

eigh

对称/厄米数组的特征值和右特征向量

eig_banded

对称/厄米带矩阵的特征值和右特征向量

注释

此函数使用了 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