我想求解大型稀疏对称矩阵(通常为 20,000 - 60,000 的数量级)的特征值。我曾尝试利用 SymEigsShiftSolver/SymEigsSolver,但生成我的特征值需要花费大量时间。有加速的方法吗??我附上了我打算做的演示代码。我错过了什么吗?
主要内容() {
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>
详情 there .然后,在 Spectra 端,使用相应的 SparseSymShiftSolve
helper 。
此外,不要忘记在编译器优化开启的情况下进行编译。这对于此类仅 header 库很重要。
关于c++ - 对于巨大的稀疏对称矩阵,哪个是 Spectra 库中最快的特征值求解器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42129192/