scipy.linalg.

eigvalsh_tridiagonal#

scipy.linalg.eigvalsh_tridiagonal(d, e, select='a', select_range=None, check_finite=True, tol=0.0, lapack_driver='auto')[source]#

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

查找 a 的特征值 w

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

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

文档假定数组参数具有指定的“核心”形状。但是,此函数的数组参数可以在核心形状之前附加额外的“批处理”维度。在这种情况下,数组被视为较低维度切片的批处理;有关详细信息,请参阅 批处理线性操作

参数:
dndarray, 形状 (ndim,)

数组的对角线元素。

endarray, 形状 (ndim-1,)

数组的非对角线元素。

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

要计算哪些特征值

select

计算结果

‘a’

所有特征值

‘v’

在区间 (min, max] 内的特征值

‘i’

索引在 min <= i <= max 范围内的特征值

select_range(min, max), 可选

所选特征值的范围

check_finite布尔值, 可选

是否检查输入矩阵只包含有限数字。禁用此选项可能会提高性能,但如果输入包含无穷大或 NaN,则可能会导致问题(崩溃,不终止)。

tol浮点数

每个特征值所需的绝对容差(仅当 lapack_driver='stebz' 时使用)。如果特征值(或簇)位于此宽度区间内,则认为其已收敛。如果 <= 0.(默认),则使用值 eps*|a|,其中 eps 是机器精度,|a| 是矩阵 a 的 1-范数。

lapack_driver字符串

要使用的 LAPACK 函数,可以是 'auto'、'stemr'、'stebz'、'sterf'、'stev' 或 'stevd'。当为 'auto'(默认)时,如果 select='a' 则使用 'stevd',否则使用 'stebz'。'sterf' 和 'stev' 只能在 select='a' 时使用。

返回:
w(M,) ndarray

特征值,按升序排列,每个值根据其重数重复。

抛出:
LinAlgError

如果特征值计算不收敛。

另请参阅

eigh_tridiagonal

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

示例

>>> import numpy as np
>>> from scipy.linalg import eigvalsh_tridiagonal, eigvalsh
>>> d = 3*np.ones(4)
>>> e = -1*np.ones(3)
>>> w = eigvalsh_tridiagonal(d, e)
>>> A = np.diag(d) + np.diag(e, k=1) + np.diag(e, k=-1)
>>> w2 = eigvalsh(A)  # Verify with other eigenvalue routines
>>> np.allclose(w - w2, np.zeros(4))
True