level 4
轰天雷sss
楼主
如何计算一个较大的非厄米矩阵(1000*1000以上)的某个本征值附近的20个本征值,计算结果要准确,尽可能快,在小时的量级还能接受。目前我问了AI,采用的精度和算法是
precision = 100;
mat = N[Rationalize[H, 0], precision];
{vals, vecs} =
Eigensystem[mat, 20,
Method -> {"Arnoldi", "Shift" -> E0, "MaxIterations" -> 5000}];
valsSorted = SortBy[vals, Abs[# - E0] &];
这样计算很快,但却很不准,找到的本征值接近的我要的E0在10^-15量级,而且显示有很多其他点,实际上我全部对角化:
Eigensystem[mat, Method -> {"Direct"}],计算出来的结果在这个精度下是准确的,真实的最接近E0的本征值距离有10^-2量级,也就是说上面局部对角化算出来有很大的数值问题。但矩阵太大全部对角化就算得非常慢,可能要一天以上,而且我只关心E0附近的几个本征值,所以希望有一个准确的局部对角化算法,时间成本也没那么大,非常感谢
2026年07月02日 09点07分
1
precision = 100;
mat = N[Rationalize[H, 0], precision];
{vals, vecs} =
Eigensystem[mat, 20,
Method -> {"Arnoldi", "Shift" -> E0, "MaxIterations" -> 5000}];
valsSorted = SortBy[vals, Abs[# - E0] &];
这样计算很快,但却很不准,找到的本征值接近的我要的E0在10^-15量级,而且显示有很多其他点,实际上我全部对角化:
Eigensystem[mat, Method -> {"Direct"}],计算出来的结果在这个精度下是准确的,真实的最接近E0的本征值距离有10^-2量级,也就是说上面局部对角化算出来有很大的数值问题。但矩阵太大全部对角化就算得非常慢,可能要一天以上,而且我只关心E0附近的几个本征值,所以希望有一个准确的局部对角化算法,时间成本也没那么大,非常感谢