1
我想解决一个大的稀疏对称矩阵(一般为20,000-60,000)的特征值。我尝试过利用SymEigsShiftSolver/SymEigsSolver,但需要大量时间才能生成我的特征值。有没有加速的方法?我附上了我打算做的事情的演示代码。我错过了什么?哪个是Spectra库中最快的特征值求解器,用于一个巨大的稀疏对称矩阵?
INT主() {
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;
}
非常感谢!现在我可以在一分钟内获得特征向量和值。 –
我产生了你推荐的改变,但我没有得到显着的加速。通过增加最大迭代次数或减小容差来放宽收敛似乎没有帮助运行时间。计算矩阵的前3或4个特征向量几乎需要2分钟,大到200k x 200k。 –