如何在 C++ 本征中设置 cg 矩阵近似中的最大迭代?
how to set max iterations in cg matrix approximation in c++ eigen?
我正在使用共轭梯度 (cg) 方法来近似使用 c++ 中的 eigen3 包的矩阵求逆(cg 是 eigen 的迭代求解器之一)。我想更改最大迭代次数,但不知道如何更改。
在 eigen 页面中它说它可以通过 setMaxIterations() 方法控制,但我不知道我需要把它放在哪里以及如何使用它。我使用的部分代码如下;
ConjugateGradient<SparseMatrix<double> > cg;
cg.compute(CJ); // CJ is a matrix which is already defined
if (cg.info() != Success) {
cout << "Matrix is not invertible." << endl;
exit(1);
}
SparseMatrix<double> IDin(totalJ,totalJ);
IDin.setIdentity();
VectorXd inversevector(totalJ), Idvector(totalJ);
Idvector = IDin.block(0,0,totalJ,1);
inversevector = cg.solve(Idvector);
我检查了一下,代码到达最后一行但卡在了里面,所以我想我可以减少迭代次数,因为默认情况下这是问题的大小,在我的例子中是很多...
ConjugateGradient 应该有这个函数:cg.setMaxIterations(int)
。
参见 https://eigen.tuxfamily.org/dox/classEigen_1_1ConjugateGradient.html
我正在使用共轭梯度 (cg) 方法来近似使用 c++ 中的 eigen3 包的矩阵求逆(cg 是 eigen 的迭代求解器之一)。我想更改最大迭代次数,但不知道如何更改。
在 eigen 页面中它说它可以通过 setMaxIterations() 方法控制,但我不知道我需要把它放在哪里以及如何使用它。我使用的部分代码如下;
ConjugateGradient<SparseMatrix<double> > cg;
cg.compute(CJ); // CJ is a matrix which is already defined
if (cg.info() != Success) {
cout << "Matrix is not invertible." << endl;
exit(1);
}
SparseMatrix<double> IDin(totalJ,totalJ);
IDin.setIdentity();
VectorXd inversevector(totalJ), Idvector(totalJ);
Idvector = IDin.block(0,0,totalJ,1);
inversevector = cg.solve(Idvector);
我检查了一下,代码到达最后一行但卡在了里面,所以我想我可以减少迭代次数,因为默认情况下这是问题的大小,在我的例子中是很多...
ConjugateGradient 应该有这个函数:cg.setMaxIterations(int)
。
参见 https://eigen.tuxfamily.org/dox/classEigen_1_1ConjugateGradient.html