scipy.sparse.linalg.

eigsh#

scipy.sparse.linalg.eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, mode='normal')[源代码][源代码]#

找到实对称方阵或复Hermitian矩阵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]。

请注意,对于 A 是复数 Hermitian 矩阵的情况,没有专门的例程。在这种情况下,eigsh() 将调用 eigs() 并返回所获得特征值的实部。

参数:
Andarray、稀疏矩阵或线性算子

一个表示运算 A @ x 的平方算子,其中 A 是实对称或复 Hermitian 矩阵。对于屈曲模式(见下文),A 还必须是正定的。

kint, 可选

所需的特征值和特征向量的数量。k 必须小于 N。无法计算矩阵的所有特征向量。

返回:
w数组

k 个特征值的数组。

v数组

一个表示 k 个特征向量的数组。列 v[:, i] 是与特征值 w[i] 对应的特征向量。

其他参数:
M一个 N x N 的矩阵、数组、稀疏矩阵或线性算子表示

广义特征值问题的操作 M @ x

A @ x = w * M @ x.

如果 A 是实数,M 必须表示一个实对称矩阵;如果 A 是复数,M 必须表示一个复数厄米矩阵。为了获得最佳结果,M 的数据类型应与 A 的数据类型相同。此外:

如果 sigma 为 None,则 M 是对称正定矩阵。

如果指定了 sigma,M 是对称正半定矩阵。

在屈曲模式下,M 是对称不定矩阵。

如果 sigma 为 None,eigsh 需要一个算子来计算线性方程 M @ x = b 的解。这是通过内部的一个(稀疏)LU 分解来完成的,对于显式矩阵 M,或者通过一个迭代求解器来完成对于一般线性算子。或者,用户可以提供矩阵或算子 Minv,它给出 x = Minv @ b = M^-1 @ b

sigma真实的

使用移位反演模式查找接近sigma的特征值。这需要一个算子来计算线性系统 [A - sigma * M] x = b 的解,其中如果未指定,M是单位矩阵。这是通过内部计算的(稀疏)LU分解来实现的,对于显式矩阵A和M,或者通过迭代求解器来实现,如果A或M是广义线性算子。或者,用户可以提供矩阵或算子OPinv,它给出 x = OPinv @ b = [A - sigma * M]^-1 @ b。请注意,当指定sigma时,关键字’which’指的是移位的特征值 w'[i] 其中:

如果模式为 ‘normal’,则 w'[i] = 1 / (w[i] - sigma)

如果模式为 ‘cayley’,则 w'[i] = (w[i] + sigma) / (w[i] - sigma)

如果模式为 ‘buckling’,则 w'[i] = w[i] / (w[i] - sigma)

(参见下面的’mode’中的进一步讨论)

v0ndarray,可选

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

ncvint, 可选

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

哪个str [‘LM’ | ‘SM’ | ‘LA’ | ‘SA’ | ‘BE’]

如果 A 是一个复数 Hermitian 矩阵,’BE’ 是无效的。要找到哪些 k 个特征向量和特征值:

‘LM’ : 最大(按模)特征值。

‘SM’ : 最小(按量级)特征值。

‘LA’ : 最大(代数)特征值。

‘SA’ : 最小的(代数)特征值。

‘BE’ : 频谱两端的各一半 (k/2)。

当 k 为奇数时,从高端返回一个更多 (k/2+1) 的值。当 sigma != None 时,’which’ 指的是移位的特征值 ``w’[i]``(参见上面的 ‘sigma’ 讨论)。ARPACK 通常在寻找大值方面比小值更好。如果需要小特征值,考虑使用移位-反演模式以获得更好的性能。

maxiterint, 可选

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

tol浮动

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

MinvN x N 矩阵、数组、稀疏矩阵或线性算子

参见上方 M 中的注释。

OPinvN x N 矩阵、数组、稀疏矩阵或线性算子

参见上方 sigma 中的注释。

return_eigenvectors布尔

返回特征向量(True)以及特征值。此值决定了特征值的排序顺序。排序顺序还依赖于 which 变量。

对于 = ‘LM’ 或 ‘SA’:

如果 return_eigenvectors 为 True,特征值按代数值排序。

如果 return_eigenvectors 为 False,特征值将按绝对值排序。

对于哪个 = ‘BE’ 或 ‘LA’:

特征值总是按代数值排序。

对于 = ‘SM’:

如果 return_eigenvectors 为 True,特征值按代数值排序。

如果 return_eigenvectors 为 False,特征值按绝对值递减排序。

模式字符串 [‘正常’ | ‘屈曲’ | ‘凯莱’]

指定用于移位-反演模式的策略。此参数仅适用于实值 A 且 sigma != None 的情况。对于移位-反演模式,ARPACK 内部解决特征值问题 OP @ x'[i] = w'[i] * B @ x'[i] 并将得到的 Ritz 向量 x’[i] 和 Ritz 值 w’[i] 转换为所需的问题 A @ x[i] = w[i] * M @ x[i] 的特征向量和特征值。模式如下:

‘normal’ :

OP = [A - sigma * M]^-1 @ M, B = M, w’[i] = 1 / (w[i] - sigma)

‘屈曲’ :

OP = [A - sigma * M]^-1 @ A, B = A, w’[i] = w[i] / (w[i] - sigma)

‘cayley’ :

OP = [A - sigma * M]^-1 @ [A + sigma * M], B = M, w’[i] = (w[i] + sigma) / (w[i] - sigma)

模式的选取将影响关键字 ‘which’ 选择的特征值,并且也可能影响收敛的稳定性(详见 [2] 的讨论)。

Raises:
ArpackNoConvergence

当未达到请求的收敛时。

当前收敛的特征值和特征向量可以在异常对象的 eigenvalueseigenvectors 属性中找到。

参见

eigs

一般(非对称)矩阵 A 的特征值和特征向量

svds

矩阵 A 的奇异值分解

注释

此函数是对 ARPACK [1] SSEUPD 和 DSEUPD 函数的封装,这些函数使用隐式重启的 Lanczos 方法来寻找特征值和特征向量 [2]

参考文献

[1]

ARPACK 软件, opencollab/arpack-ng

[2]

R. B. Lehoucq, D. C. Sorensen, and C. Yang, ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods. SIAM, Philadelphia, PA, 1998.

示例

>>> import numpy as np
>>> from scipy.sparse.linalg import eigsh
>>> identity = np.eye(13)
>>> eigenvalues, eigenvectors = eigsh(identity, k=6)
>>> eigenvalues
array([1., 1., 1., 1., 1., 1.])
>>> eigenvectors.shape
(13, 6)