官网来源:
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.eigs.html#scipy-sparse-linalg-eigs
资料参考:
https://vimsky.com/examples/usage/python-scipy.sparse.linalg.eigs.html
————————
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 ] , A * x[i] = w[i] * x[i], A∗x[i]=w[i]∗x[i],具有相应特征向量x [i]的w [i]个特征值的标准特征值问题。
如果指定了 M M M,则求解 A ∗ x [ i ] = w [ i ] ∗ M ∗ x [ i ] A * x[i] = w[i] * M * x[i] A∗x[i]=w[i]∗M∗x[i],具有对应特征向量 x [ i ] 的 w [ i ] x [i]的w [i] x[i]的w[i]个特征值的广义特征值问题.
3. 参数
- A:ndarray, sparse matrix 或 LinearOperator
表示操作的数组,稀疏矩阵或LinearOperatorA * x,其中A是实或复方矩阵。- k:int, 可选参数
所需的特征值和特征向量的数量。 k必须小于N-1。不可能计算矩阵的所有特征向量。- M:ndarray, sparse matrix 或 LinearOperator, 可选参数
表示广义特征值问题的运算M * x的数组,稀疏矩阵或LinearOperator
A * x = w * M * x.
如果A是实数,则M必须表示一个实对称矩阵,如果A是复数,则M必须表示一个复杂的厄米矩阵。为了获得最佳结果,M的数据类型应该与A的数据类型相同。此外
If sigma is None, M is positive definite
If sigma is specified, M is positive semi-definite
如果sigma为None
,则eigs要求运算符计算线性方程的解M * x = b
。这是通过对显式矩阵M的(稀疏)LU分解或对于一般线性算子的迭代求解器在内部完成的。另外,用户可以提供矩阵或运算符Minv,x = Minv * b = M^-1 * b
- sigma:real 或 complex, 可选参数
使用shift-invert
模式查找sigma
附近的特征值。这需要操作员计算线性系统的解[A - sigma * M] * x = b
,其中M
是未指定的单位矩阵。这是通过对显式矩阵A和M的(稀疏)LU分解在内部计算的,或者如果A或M为一般线性算子,则通过迭代求解器进行内部计算。或者,用户可以提供矩阵或运算符OPinv,这样可以x = OPinv * b = [A - sigma * M]^-1 * b
。对于实数矩阵A,shift-invert可以在由参数OPpart(‘r’或‘i’)指定的虚模式或实模式下完成。请注意,当指定sigma时,关键字‘which’
(如下)表示已偏移的特征值w'[i]
其中:
If A is real and OPpart == ‘r’ (default),
w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))].
If A is real and OPpart == ‘i’,
w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))].
If A is complex, w'[i] = 1/(w[i]-sigma).
- v0:ndarray, 可选参数
迭代的起始向量。默认值:随机- ncv:int, 可选参数
ncv生成的Lanczos向量的数量必须大于k;建议 n c v > 2 ∗ k ncv > 2*k ncv>2∗k。默认:min(n, max(2*k + 1, 20)
- which:str, [‘LM’ | ‘SM’ | ‘LR’ | ‘SR’ | ‘LI’ | ‘SI’], 可选参数
查找哪个k个特征向量和特征值:
‘LM’:largest magnitude
‘SM’:smallest magnitude
‘LR’:largest real part
‘SR’:smallest real part
‘LI’:largest imaginary part
‘SI’:smallest imaginary part
当sigma!= None时,‘which’表示偏移的特征值w’i。通常,ARPACK在查找大值上比在小值上更好。如果需要较小的特征值,请考虑使用shift-invert模式以获得更好的性能。- maxiter:int, 可选参数
允许的最大Arnoldi更新迭代次数默认值:n*10- tol:float, 可选参数
特征值的相对精度(停止标准)默认值0表示机器精度。- return_eigenvectors:bool, 可选参数
除特征值外还返回特征向量(True)- Minv:ndarray, sparse matrix 或 LinearOperator, 可选参数
请参阅上面的M中的注释。- OPinv:ndarray, sparse matrix 或 LinearOperator, 可选参数
请参阅上面的sigma中的注释。- OPpart:{‘r’ 或 ‘i’}, 可选参数
请参阅上面的sigma中的注释
- w:ndarray
k个特征值的数组。- v:ndarray
k个特征向量的数组。v[:, i]
是对应于特征值w [i]
的特征向量。
ArpackNoConvergence
>>> 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)