我在玩 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 矩阵被归一化(条目除以六)。我遵循了这一点,并在 ARPACK 中得到了上述错误结果。现在,如果我没有将条目除以六,ARPACK 脚本会给我正确的答案(与 Matlab 相同)。现在我更加困惑了。好像是说ARPACK例程不健壮?