[英]Which is the fastest Eigenvalue solver in the Spectra library for a huge sparse symmetric matrix?
我希望解決大型稀疏對稱矩陣的特征值(通常約為20,000-60,000)。 我曾嘗試利用SymEigsShiftSolver / SymEigsSolver,但要花費大量時間才能生成我的特征值。 有加速的方法嗎? 我已附上我打算做的演示代碼。 我錯過了什么嗎?
int main(){
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;
}
您的代碼示例正在融合密集矩陣。 第一件事是正確組裝Eigen::SparseMatrix<double>
, 在此處進行詳細介紹。 然后,在“光譜”側,使用各自的SparseSymShiftSolve
幫助器。
另外,不要忘記在編譯器優化為ON的情況下進行編譯。 這對於僅標頭的lib非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.