我希望求解大型稀疏对称矩阵(通常为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;}
发布于 2017-02-09 15:24:19
您的代码示例是融合稠密矩阵。第一件事是正确地将Eigen::SparseMatrix<double>组装成详细的there。然后,在光谱端,使用相应的SparseSymShiftSolve辅助对象。
此外,不要忘记在编译时打开编译器优化。这对于这样的只有头的库很重要。
https://stackoverflow.com/questions/42129192
复制相似问题