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

标签 c++ eigen eigenvalue eigen3

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

相关文章:

c++ - 在 dxdt 函数中使用 Eigen 和 Odeint 进行矩阵* vector 乘法

c - GSL 特征值代码

Python numpy 计算第一个特征值和特征向量

python scipy.sparse.linalg.eigs 为连续调用提供不同的结果

c++ - 二进制搜索真的是在 0 时钟 CPU 时间内执行的吗?

c++ - "Variable"变量名 C++

c++ - 常量正确性和硬件写入

c++ - 如何将 STL 映射保存到文件 C++

c++ - 如何使用 Eigen 在函数中访问/写入矩阵?

c++ - Eigen3 矩阵乘法性能取决于处理器?