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,则 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
当未达到请求的收敛时。当前已收敛的特征值和特征向量可以作为异常对象的
eigenvalues
和eigenvectors
属性找到。
备注
此函数是 ARPACK [1] SNEUPD、DNEUPD、CNEUPD、ZNEUPD 函数的包装器,这些函数使用隐式重启 Arnoldi 方法来查找特征值和特征向量 [2]。
参考文献
[1]ARPACK Software, opencollab/arpack-ng
[2]R. B. Lehoucq, D. C. Sorensen, and C. Yang, ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods. SIAM, Philadelphia, PA, 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)