当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.eigh_tridiagonal用法及代码示例


本文简要介绍 python 语言中 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

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

参数

d ndarray,形状(ndim,)

数组的对角元素。

e ndarray,形状(ndim-1,)

数组的非对角元素。

eigvals_only 布尔型,可选

仅计算特征值而不计算特征向量。 (默认:还计算特征向量)

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

计算哪些特征值

选择

计算出来的

‘a’

所有特征值

‘v’

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

‘i’

具有索引 min <= i <= max 的特征值

select_range (最小,最大),可选

所选特征值的范围

check_finite 布尔型,可选

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

tol 浮点数

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

lapack_driver str

要使用的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

如果特征值计算不收敛。

注意

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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.eigh_tridiagonal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。