Я хочу решить следующую обобщенную EVP, используя ArpackWrapper библиотеки Eigen:
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 или собственной оболочки? Или, скорее всего, мое неправильное использование / понимание arpack или собственной оболочки.
Версии:
Eigen 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
Kg.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