对于庞大的稀疏对称矩阵,哪个是Spectra库中最快的特征值求解器?

时间:2017-02-09 05:50:21

标签: c++ eigen eigenvalue eigen3

我希望求解大型稀疏对称矩阵(通常为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;

}

1 个答案:

答案 0 :(得分:0)

您的代码示例是融合密集矩阵。首先要正确组装Eigen::SparseMatrix<double>详细there。然后,在Spectra端,使用相应的SparseSymShiftSolve助手。

另外,不要忘记使用编译器优化ON进行编译。这对于这样的仅头文件库很重要。