我能';我不理解用Python中的ARPACK来解决这个问题

我能';我不理解用Python中的ARPACK来解决这个问题,python,numpy,matrix,Python,Numpy,Matrix,我试图通过使用Python的numpy包装的ARPACK来解决一个简单的特征值问题。广义特征值问题是Lx=lambdaFx,其中矩阵L和F的超链接就附在下面。我使用numpy.savetxt来保存这些矩阵,因此您只需使用numpy.loadtxt,例如np.loadtxt('F.out'),就可以直接获得二维矩阵,顺便说一下,二维矩阵的尺寸是180*180。如果你有任何问题,请告诉我 然后调用eigs函数 eigs(L, 10, F, sigma=0.6, which='LM') 其中我寻

我试图通过使用Python的numpy包装的ARPACK来解决一个简单的特征值问题。广义特征值问题是Lx=lambdaFx,其中矩阵L和F的超链接就附在下面。我使用numpy.savetxt来保存这些矩阵,因此您只需使用numpy.loadtxt,例如np.loadtxt('F.out'),就可以直接获得二维矩阵,顺便说一下,二维矩阵的尺寸是180*180。如果你有任何问题,请告诉我

然后调用eigs函数

eigs(L, 10, F, sigma=0.6, which='LM')
其中我寻求10个特征值,大约0.6。结果是

0.57478719-0.01136287j  
0.57478719+0.01136287j 
0.57810950-0.0183666j
0.57810950+0.0183666j  
0.57388571-0.01499086j  
0.57388571+0.01499086j
0.58563972-0.02572953j 
0.58563972+0.02572953j 
0.61673303-0.02656085j
0.61673303+0.02656085j
但是当我把特征值的数目设为50时,解是完全不同的

0.597747500000000 - 0.000281040000000i
0.597702020000000 + 0.000330230000000i
0.597718060000000 - 0.000507740000000i
0.597753770000000 + 0.000616410000000i
0.597868100000000 - 0.000899980000000i
0.597933180000000 + 0.001078770000000i
0.598383060000000 - 0.001671530000000i
0.598477610000000 + 0.001758160000000i
0.598707890000000 - 0.001942210000000i
0.599190580000000 + 0.002193790000000i
0.602047010000000 - 0.001129780000000i
0.601907360000000 + 0.001352900000000i
0.601100090000000 - 0.002059190000000i
0.601640660000000 + 0.001653970000000i
0.601461590000000 - 0.001833750000000i
0.601373900000000 + 0.001912630000000i
0.597747500000000 + 0.000281040000000i
0.597759400000000 - 0.000389200000000i
0.597718060000000 + 0.000507740000000i
0.597811070000000 - 0.000755450000000i
0.597868100000000 + 0.000899980000000i
0.598267470000000 - 0.001578010000000i
0.598383060000000 + 0.001671530000000i
0.598588530000000 - 0.001835530000000i
0.598707890000000 + 0.001942210000000i
0.599704340000000 - 0.002318040000000i
0.602047010000000 + 0.001129780000000i
0.601739360000000 - 0.001547320000000i
0.601100090000000 + 0.002059190000000i
0.601554210000000 - 0.001749120000000i
0.601461590000000 + 0.001833750000000i
0.601241730000000 - 0.001996120000000i
0.597702020000000 - 0.000330230000000i
0.597759400000000 + 0.000389200000000i
0.597753770000000 - 0.000616410000000i
0.597811070000000 + 0.000755450000000i
0.597933180000000 - 0.001078770000000i
0.598267470000000 + 0.001578010000000i
0.598477610000000 - 0.001758160000000i
0.598588530000000 + 0.001835530000000i
0.599190580000000 - 0.002193790000000i
0.599704340000000 + 0.002318040000000i
0.601907360000000 - 0.001352900000000i
0.601739360000000 + 0.001547320000000i
0.601640660000000 - 0.001653970000000i
0.601554210000000 + 0.001749120000000i
0.601373900000000 - 0.001912630000000i
0.601241730000000 + 0.001996120000000i
我认为这10个特征值会出现在50个特征值的结果中,但事实并非如此。这是因为ARPACK使用的算法吗?还是我做错了什么?我知道这里的矩阵是高度非厄米的,所以不容易求解,但至少结果应该是一致的


提前感谢您的帮助。

这是一件循序渐进的事情吗?也就是说,如果您尝试使用11辆电动汽车、12辆电动汽车或15辆电动汽车,结果是否更接近您使用10辆电动汽车所获得的结果,或者是错误的结果?这难道不可能由来自(第2点)的
EIG
上的评论来回答吗?谢谢。我会试试看,然后告诉你。另一个线程中的问题与排序有关。我检查了复平面上每个合成特征值到(0.6,0)的距离。在这两种结果中,它们确实是上升的,50个结果更接近(0.6,0)。我的意思是,
EIG
的输出可能不精确——如果我记得正确的话,
SVD
就是这种情况,因为它使用了一些近似的迭代方法。如果你的矩阵很糟糕,那么它可能没有正确收敛。