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')[source]#
求解实对称三对角矩阵的特征值问题。
找出
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
已计算
‘a’
所有特征值
‘v’
区间 (min, max] 内的特征值
‘i’
索引 min <= i <= max 的特征值
- select_range(min, max), 可选
选定特征值的范围
- check_finitebool, 可选
是否检查输入矩阵仅包含有限数。禁用此功能可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能导致问题(崩溃、不终止)。
- tolfloat
每个特征值所需的绝对容差(仅当 lapack_driver 为 ‘stebz’ 时使用)。如果特征值(或簇)位于此宽度的区间内,则认为它已收敛。如果 <= 0.(默认),则使用值
eps*|a|
,其中 eps 是机器精度,|a|
是矩阵a
的 1-范数。- lapack_driverstr
要使用的 LAPACK 函数,可以是 ‘auto’、‘stemr’、‘stebz’、‘sterf’、‘stev’ 或 ‘stevd’。当为 ‘auto’(默认)时,如果
select='a'
则使用 ‘stevd’,否则使用 ‘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