我想使用 Eigen 库的 ArpackWrapper 解决以下广义 EVP:
K_e 是 SPD。通常 K_g 是不定的和单数的,但对于这个 MVP,它只是不定的。此外,我对最小的特征值感兴趣。对于 300kx300k 的大型系统,我获得了合理的结果,但对于这个小例子,结果看起来很奇怪。读取的前 4 个结果特征值
0.8987
-0.720851
0.607632
0.729297
对于请求较少的特征值solverEig.info()
返回Eigen::NoConvergence
。
如果我使用 Maple 来计算我得到的特征值
522.991427951073
-175.66558721639944
66.23707710214939
-7.756864956770603
355.6461914072188
可以将其插入问题陈述中以查看其正确性。
因此,我的问题是为什么它没有产生正确的结果?这是 arpack 还是 eigen wrapper 的问题?或者很可能是我对 arpack 或 eigen wrapper 的错误使用/理解。
版本:
特征 3.3.7
Arpack https://github.com/opencollab/arpack-ng不同的版本导致相同的行为
编码:
#include <iostream>
#include <Eigen/Core>
#include <Eigen/SparseCore>
#include "eigen3/unsupported/Eigen/ArpackSupport"
#include "eigen3/unsupported/Eigen/SparseExtra"
using namespace std;
int main() {
Eigen::SparseMatrix<double> ke;
Eigen::SparseMatrix<double> kg;
Eigen::loadMarket(ke,"ke.txt"); //5x5 Matrix
Eigen::loadMarket(kg,"kg.txt"); //5x5 Matrix
Eigen::ArpackGeneralizedSelfAdjointEigenSolver<Eigen::SparseMatrix<double>> solverEig;
solverEig.compute(ke,-kg,4,"SM",Eigen::ComputeEigenvectors);
cout<<solverEig.eigenvalues()<<endl;
return 0;
}
文件:
ke.txt
%%MatrixMarket matrix coordinate real general
5 5 19
1 1 3.2621670111997303820317029021680355072021484375000000000000000000e+01
2 1 1.4310835055998653686515353911090642213821411132812500000000000000e+01
3 1 -2.0000000000000000000000000000000000000000000000000000000000000000e+00
5 1 -1.4310835055998653686515353911090642213821411132812500000000000000e+01
1 2 1.4310835055998653686515353911090642213821411132812500000000000000e+01
2 2 8.7155417527999333060506614856421947479248046875000000000000000000e+01
3 2 0.0000000000000000000000000000000000000000000000000000000000000000e+00
5 2 -7.1554175279993268432576769555453211069107055664062500000000000000e+00
1 3 -2.0000000000000000000000000000000000000000000000000000000000000000e+00
2 3 0.0000000000000000000000000000000000000000000000000000000000000000e+00
3 3 8.2000000000000000000000000000000000000000000000000000000000000000e+01
4 3 -8.0000000000000000000000000000000000000000000000000000000000000000e+01
3 4 -8.0000000000000000000000000000000000000000000000000000000000000000e+01
4 4 8.0000000000000000000000000000000000000000000000000000000000000000e+01
5 4 0.0000000000000000000000000000000000000000000000000000000000000000e+00
1 5 -1.4310835055998653686515353911090642213821411132812500000000000000e+01
2 5 -7.1554175279993268432576769555453211069107055664062500000000000000e+00
4 5 0.0000000000000000000000000000000000000000000000000000000000000000e+00
5 5 8.7155417527999333060506614856421947479248046875000000000000000000e+01
公斤.txt
%%MatrixMarket matrix coordinate real general
5 5 19
1 1 -2.1389117730512491322159007722802925854921340942382812500000000000e-01
2 1 0.0000000000000000000000000000000000000000000000000000000000000000e+00
3 1 1.8999822924102233168142106478626374155282974243164062500000000000e-01
5 1 0.0000000000000000000000000000000000000000000000000000000000000000e+00
1 2 0.0000000000000000000000000000000000000000000000000000000000000000e+00
2 2 -2.1389117730512491322159007722802925854921340942382812500000000000e-01
3 2 0.0000000000000000000000000000000000000000000000000000000000000000e+00
5 2 -9.3693312577685552988704387189500266686081886291503906250000000000e-02
1 3 1.8999822924102233168142106478626374155282974243164062500000000000e-01
2 3 0.0000000000000000000000000000000000000000000000000000000000000000e+00
3 3 -3.8974822924103957877406401166808791458606719970703125000000000000e-01
4 3 1.9975000000001727484821856251073768362402915954589843750000000000e-01
3 4 1.9975000000001727484821856251073768362402915954589843750000000000e-01
4 4 1.8161606213113259955527212241577217355370521545410156250000000000e-01
5 4 0.0000000000000000000000000000000000000000000000000000000000000000e+00
1 5 0.0000000000000000000000000000000000000000000000000000000000000000e+00
2 5 -9.3693312577685552988704387189500266686081886291503906250000000000e-02
4 5 0.0000000000000000000000000000000000000000000000000000000000000000e+00
5 5 4.7505937470883541351440726430155336856842041015625000000000000000e-01