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;
}
非常感謝!現在我可以在一分鐘內獲得特徵向量和值。 –
我產生了你推薦的改變,但我沒有得到顯着的加速。通過增加最大迭代次數或減小容差來放寬收斂似乎沒有幫助運行時間。計算矩陣的前3或4個特徵向量幾乎需要2分鐘,大到200k x 200k。 –