I'm playing with ARPACK. I looked into the examples they provide, zndrv4.f illustrating the usage of the routine znaupd, in the directory of ARPACK/EXAMPLES/COMPLEX/. I also came cross NAG Fortran Library. In NAG, there are some linear problem solvers F12***. The F12*** routines in NAG are equivalent to the znaupd in ARPACK. So I want to check if they will yield the same results.
I first looked into the example provided in the user guide of F12ARF at http://www.nag.co.uk/numeric/fl/nagdoc_fl22/pdf/F12/f12arf.pdf for example. In the end, it yields the results of
509.9390 380.9092 659.1558 271.9412
around the shift=500. I solved the same generalized eigenvalue problem in Matlab. Matlab gave me the same results.
But when I used znaupd from ARPACK to solve the same problem, I obtained different answers. The 4 eigenvalues are now
Eigenvalue Residual 501.65650188259684 2.01604D-01 480.15153312181440 2.10853D-01 526.52596256924164 1.91850D-01 461.99019999608828 2.19336D-01
The routines in NAG and ARPACK both use SHIFTED INVERSE mode and solve the same generalized problem. I'm not sure what was wrong, but you can see the residual is too big (usually it should be around 1e-15). I attached my scripts of the ARPACK zndrv4.f (it's basically the same as the example file provided by ARPACK, I just need to change a little bit the matrices around line 174 to be the same as that in NAG.) and the Matlab file zndrv4.m in the compressed file below.
Then later I found that actually the M matrix in F12ARF is normalized (entries divided by a six). I followed this and got the above wrong results in ARPACK. Now if I didn't divide the entries by six in zndrv4.f, the ARPACK script gives me the correct answer (the same as Matlab).
Eigenvalue Residual 4.90161D+02 5.20906D-16 5.50553D+02 8.16401D-16 4.33527D+02 2.29794D-15 6.14759D+02 4.93630D-15
I'm confused by this. It seems to say that the ARPACK routine is not robust. Just scaling the matrix with a constant 6 will lead to such a big change in residual? Thank you very much.