Странное поведение с использованием Arpack EigenLibrary Wrapper для маленьких матриц - PullRequest
0 голосов
/ 31 марта 2020

Я хочу решить следующую обобщенную EVP, используя ArpackWrapper библиотеки Eigen:

enter image description here

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

...