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

当未获得所请求的收敛时。当前收敛的特征值和特征向量可以如下所示 eigenvalueseigenvectors 异常对象的属性。

参见

eigsh

对称矩阵A的特征值和特征向量

svds

矩阵A的奇异值分解

注意事项

此函数是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方法求解大规模特征值问题。暹罗,费城,宾夕法尼亚州,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)