对于广义特征值问题,为什么 EIGS 无法重现与 EIG 相同的结果?

问题描述 投票:0回答:1

我有一个广义特征值问题:

A**q = 阿尔法**B*q

其中

A
B
是复方矩阵。 使用
eig
我可以轻松找到给定
A
B
矩阵的正确答案:

from scipy import linalg
alpha, q = linalg.eig(A,B)

如果我在复杂的计划中绘制结果特征值 alpha,其中

alpha_r
是特征值的实部,
alpha_i
是特征值的虚部:

enter image description here

现在我想解决同样的问题,但是使用 Scipy 中的“eigs”稀疏算法,并且发生了一些奇怪的事情:

from scipy.linalg.sparse import eigs
alpha, q = eigs(A,k=40,B,sigma=1.0+0.0J)

enter image description here

我知道这可能与矩阵

A
B
的特征有关,但我不知道到底是什么。使用
eigs
应该会更有效,特别是在矩阵稀疏的情况下。

在这里您可以找到

A
B
数据、
eig
解和
eigs
解:

https://drive.google.com/drive/folders/1p_3AZzRtFfF64P7Sh5tDEA-I-voRtfAi?usp=share_link

加载数据:

import numpy as np

data  = np.load('YourPath/matrix.npz')
A     = data['A']
B     = data['B']
data  = np.load('YourPath/eig_result.npz')
alpha = data['alpha']
q     = data['q']
data  = np.load('YourPath/eigs_result.npz')
alpha = data['alpha']
q     = data['q']
python scipy sparse-matrix eigenvalue
1个回答
0
投票

我们更正导入和语法错误后:

from scipy.sparse.linalg import eigs
alpha, q = eigs(A, 40, B, sigma=1.0+0.0J)

您的代码可以正常工作。根据要求,您会在

sigma
附近获得 40 个特征值。

array([0.99993559-6.02277730e-04j, 0.99986439-5.92891387e-04j,
       0.99984541-5.82508178e-04j, 1.00060288-5.54493240e-05j,
       1.00060185+8.78867080e-06j, 1.00060228+3.45125669e-05j,
       1.00059443+8.31001392e-05j, 1.00057832+1.50555166e-04j,
       1.00055579+2.22482930e-04j, 1.00053452+2.72854744e-04j,
       1.00052089+3.02154060e-04j, 1.00048812+3.44265642e-04j,
       1.00047857+3.79635475e-04j, 1.00044081+4.06980723e-04j,
       1.00038241+4.59795947e-04j, 1.00032251+5.04692481e-04j,
       1.00028255+5.31513341e-04j, 1.00025619+5.53819872e-04j,
       1.0002222 +5.67191736e-04j, 1.00015771+5.87069257e-04j,
       1.00004671+6.05910511e-04j, 0.99984943+5.35140391e-04j,
       0.99997949+6.04750831e-04j, 0.99992759+6.01713086e-04j,
       0.99987301+5.81525426e-04j, 0.99966821+4.46327203e-04j,
       0.99961854+4.56911384e-04j, 0.99956986+4.23305158e-04j,
       0.99953443+3.81722342e-04j, 0.99945911-2.71575368e-04j,
       0.99949376+3.27515008e-04j, 0.9994566 +2.71569533e-04j,
       0.99944039+2.24490632e-04j, 0.99943237-1.82314379e-04j,
       0.99942089+1.57459951e-04j, 0.99941313-1.15507981e-04j,
       0.999405  +8.73089164e-05j, 0.99940182-4.55513495e-05j,
       0.99939719+3.80410988e-05j, 0.99939794+5.99174621e-06j])

请参阅 sigma 参数的

文档

使用移位反转模式查找

sigma
附近的特征值。

如果您想要最接近不同点的

k
特征值,请将该点指定为
sigma
。如果你想要最大幅度、最小幅度等特征值,不要指定
sigma
;请参阅
which
的文档。如果您想要除最小特征值之外的所有特征值,请指定
k = A.shape[0] - 1
并准备等待!

© www.soinside.com 2019 - 2024. All rights reserved.