0

I'm trying to solve a simple eigenvalue problem by using ARPACK wrapped in the numpy of Python. The generalized eigenvalue problem is Lx=lambdaFx, where the hyperlinks of matrices L and F are attached just below. I used numpy.savetxt to save these matrices, so it's easiest for you to just use numpy.loadtxt, e.g. np.loadtxt('F.out'), to get directly the 2D matrix, whose dimension is 180*180 by the way. Let me know if you have any problem.

https://www.dropbox.com/s/c24maowf24eqcy3/F.out?dl=0 https://www.dropbox.com/s/2aodknq0rdcy8k0/L.out?dl=0

Then the eigs function is called

eigs(L, 10, F, sigma=0.6, which='LM')

where I seek for 10 eigenvalues around 0.6. The results are

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

But when I set the number of the eigenvalues to be sought to be 50, the solutions are completely different, which are

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

I would think that those 10 eigenvalues will appear in the 50 eigenvalues results, but it is not the case. Is this due to the algorithm ARPACK uses? Or I did something wrong? I know that the matrices here are highly non-Hermitian so it's not easy to solve, but at least the results should be consistent.

Thanks in advance for any help.

jengmge
  • 77
  • 1
  • 5
  • is this a gradual thing? I.e. if you try for 11 evs, 12 evs or 15 evs, are the results closer to what you obtain with 10 or just as wrong? – eickenberg Oct 23 '14 at 19:39
  • Isn't this potentially answered by the remark on `eigs` from [the accepted answer here](http://stackoverflow.com/questions/26520447/using-arpack-solving-eigenvalueproblem-but-getting-inconsistent-results-with-ma) (point 2)? – eickenberg Oct 23 '14 at 19:44
  • Thanks. I will try that and let you know. The problem in the other thread is about the ordering. I checked the distance of the each resultant eigenvalues to (0.6,0) in the complex plane. In both cases of results, they are indeed ascending and the 50 results are closer to (0.6,0). – jengmge Oct 23 '14 at 20:11
  • I meant that the output of `eigs` is potentially inexact -- if I recall correctly that is the case for `svds`, because it uses some approximative iterative method. If your matrix is nasty, then it may just not have converged properly. – eickenberg Oct 23 '14 at 20:30

0 Answers0