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)[源代码]¶
求方阵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、稀疏矩阵或线性运算符
表示运算的数组、稀疏矩阵或线性运算符
A * x
,其中A是实数或复方阵。- k整型,可选
所需的特征值和特征向量的数量。 k 必须小于N-1。不可能计算矩阵的所有特征向量。
- Mndarray、稀疏矩阵或线性运算符,可选
表示广义特征值问题的运算M*x的数组、稀疏矩阵或线性运算符
A * x = w * M*x。
如果A是实数,M一定表示实对称矩阵;如果A是复数,M一定表示复埃尔米特矩阵。为获得最佳结果,M的数据类型应与A的数据类型相同。此外:
如果 sigma 为无,则M为正定
如果指定sigma,则M是半正定的
如果sigma为NONE,则eigs需要运算符来计算线性方程的解
M * x = b
。这在内部通过对显式矩阵M的(稀疏)LU分解,或通过对一般线性运算符的迭代求解器来完成。或者,用户可以提供矩阵或运算符Minv,该矩阵或运算符Minv给出x = Minv * b = M^-1 * b
。- sigma真实或复杂,可选
使用Shift-Invert模式查找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时,关键字‘this’(如下所示)指的是移位的特征值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,可选
迭代的起始向量。默认值:随机
- ncv整型,可选
生成的Lanczos向量的数量 ncv 必须大于 k ;建议:
ncv > 2*k
。默认值:min(n, max(2*k + 1, 20))
- which字符串, [‘LM’|‘SM’|‘LR’|‘SR’|‘Li’|‘SI’] ,可选
哪一个 k 要查找的特征向量和特征值:
‘LM’:最大震级
“sm”:最小震级
‘lr’:最大的实部
‘sr’:最小实部
‘li’:最大的虚部
“si”:最小虚部
当sigma!=None时,‘What’指的是移位的特征值w‘。 [i] (见上文“sigma”中的讨论)。ARPACK通常更善于查找较大的值而不是较小的值。如果需要较小的特征值,请考虑使用移位反转模式以获得更好的性能。
- maxiter整型,可选
允许的最大Arnoldi更新迭代次数,默认值:
n*10
- tol浮动,可选
特征值的相对精度(停止准则)默认值0表示机器精度。
- return_eigenvectors布尔值,可选
除了特征值之外,还返回特征向量(True)
- Minvndarray、稀疏矩阵或线性运算符,可选
请参阅上面M中的注释。
- OPinvndarray、稀疏矩阵或线性运算符,可选
请参阅上文西格玛中的注释。
- OPpart{‘r’或‘i’},可选
请参阅上文西格玛中的注释
- 退货
- wndarray
k个特征值的数组。
- vndarray
一组 k 特征向量。
v[:, i]
是对应于特征值w的特征向量吗 [i] 。
- 加薪
- ArpackNoConvergence
当未获得所请求的收敛时。当前收敛的特征值和特征向量可以如下所示
eigenvalues
和eigenvectors
异常对象的属性。
注意事项
此函数是ARPACK的包装 [1] SNEUPD、DNEUPD、CNEUPD、ZNEUPD,使用隐式重新启动的Arnoldi方法求特征值和特征向量的函数 [2].
参考文献
示例
找出单位矩阵的6个特征向量:
>>> 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)