scipy.sparse.linalg.

eigs#

scipy.sparse.linalg.eigs(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, OPpart=None)[source]#

查找方阵 A 的 k 个特征值和特征向量。

求解 A @ x[i] = w[i] * x[i],即标准特征值问题,其中 w[i] 是特征值,x[i] 是对应的特征向量。

如果指定了 M,则求解 A @ x[i] = w[i] * M @ x[i],即广义特征值问题,其中 w[i] 是特征值,x[i] 是对应的特征向量。

参数:
Andarray、稀疏矩阵或 LinearOperator

代表操作 A @ x 的数组、稀疏矩阵或 LinearOperator,其中 A 是实数或复数方阵。

kint,可选

所需特征值和特征向量的数量。k 必须小于 N-1。无法计算矩阵的所有特征向量。

Mndarray、稀疏矩阵或 LinearOperator,可选

代表广义特征值问题中操作 M@x 的数组、稀疏矩阵或 LinearOperator。

A @ x = w * M @ x。

如果 A 是实数,则 M 必须代表实数对称矩阵;如果 A 是复数,则 M 必须代表复数厄米矩阵。为了获得最佳效果,M 的数据类型应与 A 相同。此外,

如果sigma 为 None,则 M 为正定。

如果 sigma 已指定,则 M 为半正定。

如果 sigma 为 None,则 eigs 需要一个运算符来计算线性方程 M @ x = b 的解。对于显式矩阵 M,这是通过内部的(稀疏)LU 分解完成的;对于一般的线性算子,则通过迭代求解器完成。或者,用户可以提供矩阵或算子 Minv,它给出 x = Minv @ b = M^-1 @ b

sigma实数或复数,可选

使用移位-反转模式查找 sigma 附近的特征值。这需要一个运算符来计算线性系统 [A - sigma * M] @ x = b 的解,其中 M 如果未指定,则为单位矩阵。对于显式矩阵 A 和 M,这是通过内部的(稀疏)LU 分解完成的;如果 A 或 M 是一般的线性算子,则通过迭代求解器完成。或者,用户可以提供矩阵或算子 OPinv,它给出 x = OPinv @ b = [A - sigma * M]^-1 @ b。对于实数矩阵 A,移位-反转可以在虚数模式或实数模式下进行,由参数 OPpart (‘r’ 或 ‘i’) 指定。请注意,当指定 sigma 时,关键字 ‘which’(如下)指的是移位的特征值 w'[i],其中

如果 A 是实数且 OPpart == ‘r’(默认值),

w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))].

如果 A 是实数且 OPpart == ‘i’,

w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))].

如果 A 是复数,则 w'[i] = 1/(w[i]-sigma)

v0ndarray,可选

迭代的起始向量。默认值:随机

ncvint,可选

生成的 Lanczos 向量数量。ncv 必须大于k;建议 ncv > 2*k。默认值:min(n, max(2*k + 1, 20))

whichstr,[‘LM’ | ‘SM’ | ‘LR’ | ‘SR’ | ‘LI’ | ‘SI’],可选

要查找的k 个特征向量和特征值

‘LM’:最大幅度

‘SM’:最小幅度

‘LR’:最大实部

‘SR’:最小实部

‘LI’:最大虚部

‘SI’:最小虚部

当 sigma != None 时,‘which’ 指的是移位的特征值 w’[i](参见上面的 ‘sigma’ 中的讨论)。ARPACK 通常更擅长查找大值而不是小值。如果需要小特征值,请考虑使用移位-反转模式以获得更好的性能。

maxiterint,可选

允许的 Arnoldi 更新迭代次数上限。默认值:n*10

tolfloat,可选

特征值的相对精度(停止标准)。0 的默认值表示机器精度。

return_eigenvectorsbool,可选

除了特征值之外,是否返回特征向量(True)

Minvndarray、稀疏矩阵或 LinearOperator,可选

参见上面的 M 中的说明。

OPinvndarray、稀疏矩阵或 LinearOperator,可选

参见上面的 sigma 中的说明。

OPpart{‘r’ 或 ‘i’},可选

参见上面的 sigma 中的说明

返回值:
wndarray

包含 k 个特征值的数组。

vndarray

包含k 个特征向量的数组。 v[:, i] 是与特征值 w[i] 对应的特征向量。

引发:
ArpackNoConvergence

当未获得请求的收敛时。当前收敛的特征值和特征向量可以在异常对象的 eigenvalueseigenvectors 属性中找到。

参见

eigsh

对称矩阵 A 的特征值和特征向量

svds

矩阵 A 的奇异值分解

说明

此函数是对 ARPACK [1] SNEUPD、DNEUPD、CNEUPD、ZNEUPD 函数的包装,这些函数使用隐式重启 Arnoldi 方法来查找特征值和特征向量 [2]

参考文献

[1]

ARPACK 软件,opencollab/arpack-ng

[2]

R. B. Lehoucq、D. C. Sorensen 和 C. Yang,ARPACK 用户指南:通过隐式重启 Arnoldi 方法求解大规模特征值问题。SIAM,费城,宾夕法尼亚州,1998 年。

示例

查找单位矩阵的 6 个特征向量

>>> import numpy as np
>>> from scipy.sparse.linalg import eigs
>>> id = np.eye(13)
>>> vals, vecs = eigs(id, k=6)
>>> vals
array([ 1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j])
>>> vecs.shape
(13, 6)