【稀疏矩阵】【scipy.sparse.linalg.eigs】函数详解~

scipy.sparse.linalg.eigs


官网来源:
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

————————

  1. 用法:
    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)
  2. 用途

求平方矩阵A的k个特征值和特征向量。

解决 A ∗ x [ i ] = w [ i ] ∗ x [ i ] , A * x[i] = w[i] * x[i], Ax[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] Ax[i]=w[i]Mx[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>2k。默认: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中的注释
  1. 返回值:
  • w:ndarray
    k个特征值的数组。
  • v:ndarray
    k个特征向量的数组。v[:, i]是对应于特征值w [i]的特征向量。
  1. 异常:
    ArpackNoConvergence
    未获得所需的收敛性时。当前收敛的特征值和特征向量可以找到为eigenvalues和eigenvectors异常对象的属性。
  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)

你可能感兴趣的:(#,python,模块,python,scipy)