当前位置: 首页>>代码示例>>用法及示例精选>>正文


python 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],具有相应特征向量x [i]的w [i]个特征值的标准特征值问题。

如果指定了M,则求解A * x[i] = w[i] * M * x[i],具有对应特征向量x [i]的w [i]个特征值的广义特征值问题

参数:

Andarray, sparse matrix 或 LinearOperator

表示操作的数组,稀疏矩阵或LinearOperatorA * x,其中A是实或复方矩阵。

kint, 可选参数

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

Mndarray, 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

sigmareal 或 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).

v0ndarray, 可选参数

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

ncvint, 可选参数

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

whichstr, [‘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](请参见上面‘sigma’中的讨论)。通常,ARPACK在查找大值上比在小值上更好。如果需要较小的特征值,请考虑使用shift-invert模式以获得更好的性能。

maxiterint, 可选参数

允许的最大Arnoldi更新迭代次数默认值:n*10

tolfloat, 可选参数

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

return_eigenvectorsbool, 可选参数

除特征值外还返回特征向量(True)

Minvndarray, sparse matrix 或 LinearOperator, 可选参数

请参阅上面的M中的注释。

OPinvndarray, sparse matrix 或 LinearOperator, 可选参数

请参阅上面的sigma中的注释。

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

请参阅上面的sigma中的注释

返回值:

wndarray

k个特征值的数组。

vndarray

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

异常:

ArpackNoConvergence

未获得所需的收敛性时。当前收敛的特征值和特征向量可以找到为eigenvalueseigenvectors异常对象的属性。

注意:

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

参考文献:

1

ARPACK软件,http://www.caam.rice.edu/software/ARPACK/

2

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

例子:

找到单位矩阵的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)

源码:

scipy.sparse.linalg.eigs的API实现见:[源代码]

相关用法

注:本文由纯净天空筛选整理自 scipy.sparse.linalg.eigs。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。