我正在玩ARPACK。我查看了他们在ARPACK / EXAMPLES / COMPLEX /目录中提供的示例zndrv4.f。我也进入了NAG Fortran图书馆。在NAG中,有一些线性问题求解器F12 ***。 NAG中的F12 ***例程等同于ARPACK中的znaupd。所以我想检查一下它们是否会产生相同的结果。
我首先在http://www.nag.co.uk/numeric/fl/nagdoc_fl22/pdf/F12/f12arf.pdf处查看了F12ARF用户指南中提供的示例。最后,它产生
的结果509.9390
380.9092
659.1558
271.9412
在班次= 500左右。我在Matlab中解决了相同的广义特征值问题。 Matlab给出了相同的结果。
但是当我使用ARPACK的znaupd解决同样的问题时,我得到了不同的答案。现在有4个特征值
rd1 = 501.65650188259684
rd2 = 480.15153312181440
rd3 = 526.52596256924164
rd4 = 461.99019999608828
NAG和ARPACK中的例程都使用SHIFTED INVERSE模式并解决一般化问题。 我不确定出了什么问题。我为ARPACK zndrv4.f附加了我的脚本(它与ARPACK提供的示例文件基本相同,我只需要改变第174行的矩阵与NAG中的矩阵相同。)和Matlab文件zndrv4.m。
https://www.dropbox.com/s/b9f1btl7a2ugrh3/zndrv4.f?dl=0 https://www.dropbox.com/s/pctmennp64mkn9m/zndrv4.m?dl=0
更新:F12ARF中的M矩阵被标准化(条目除以6)。我跟着这个,在ARPACK中得到了上面错误的结果。现在,如果我没有将条目除以6,则ARPACK脚本会给出正确的答案(与Matlab相同)。现在我更加困惑。似乎说ARPACK例程不健壮?