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 以及可选的右特征向量 v 的
a
::a v[:,i] = w[i] v[:,i] v.H v = identity
对于实对称矩阵
a
使用对角线元素 d 和非对角线单元 e 。- 参数
- dndarray,形状(ndim,)
数组的对角元素。
- endarray,形状(ndim-1,)
数组的非对角线元素。
- select{‘a’,‘v’,‘i’},可选
要计算哪些特征值
选择
已计算
‘a’
所有特征值
“v”
区间内的特征值(最小、最大)
“我”
指标为min<=i<=max的特征值
- select_range(最小,最大),可选
选定特征值的范围
- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- tol浮动
每个特征值所需的绝对公差(仅当‘stebz’为 lapack_driver )。如果特征值(或簇)位于该宽度的区间内,则认为该特征值(或簇)已收敛。如果<=0。(默认值),值
eps*|a|
在EPS是机器精度的情况下使用,并且|a|
是矩阵的1-范数a
。- lapack_driver应力
要使用的LAPACK函数,可以是‘auto’、‘stemr’、‘stebz’、‘sterf’或‘stev’。如果设置为“auto”(默认值),则在以下情况下将使用“stemr”
select='a'
和‘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]
。
- 加薪
- LinAlgError
如果特征值计算不收敛。
参见
eigvalsh_tridiagonal
对称/厄米特三对角阵的特征值
eig
非对称阵列的特征值和右特征向量
eigh
对称/厄米特阵列的特征值和右特征向量
eig_banded
对称/厄米特带状矩阵的特征值和右特征向量
注意事项
此函数利用LAPACK
S/DSTEMR
例行公事。示例
>>> 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