1
大規模な疎な対称行列(通常20,000〜60,000のオーダー)の固有値を解きたい。私はSymEigsShiftSolver/SymEigsSolverを活用しようとしましたが、私の固有値を生成するにはかなりの時間がかかります。スピードアップの方法はありますか?私は何を目指しているのかのデモコードを添付しました。私は何かを逃している?巨大な疎な対称行列のためのSpectraライブラリの中で最も速い固有値ソルバはどれですか?
メインINT(){
Eigen::MatrixXd A = Eigen::MatrixXd::Random(10000, 10000);
Eigen::MatrixXd M = A.transpose() * A;
// Matrix operation objects
DenseGenMatProd<double> op_largest(M);
DenseSymShiftSolve<double> op_smallest(M);
// Construct solver object, requesting the smallest 10 eigenvalues
SymEigsShiftSolver< double, LARGEST_MAGN, DenseSymShiftSolve<double> >
eigs_smallest(&op_smallest, 10, 30, 0.0);
eigs_smallest.init();
eigs_smallest.compute();
std::cout << "Smallest 10 Eigenvalues :\n" <<
eigs_smallest.eigenvalues() << std::endl;
return 0;
}
ありがとうございました!私は1分以内に固有ベクトルと値を得ることができます。 –
あなたが推奨する変更を作成しましたが、大幅なスピードアップが得られません。最大反復回数を増やしたり、許容誤差を下げたりして収束を緩和することは、実行時間を助けるようには見えません。 200k x 200kという大きさの行列の最初の3つまたは4つの固有ベクトルを計算するのにほとんど2分かかります。 –