我写了下面的C ++代码来计算特定矩阵的共轭梯度,编译器是Ubuntu 16.04中的CMake 3.6.2:
ConjugateGradient<SparseMatrix<double>, Lower|Upper> cg;
cg.setMaxIterations(60);
cg.compute(A);
SparseMatrix<double> beta;
beta = cg.solve(logP);
运行无限时间并且不会停止。但是,如果我将最后一行更改为:
cg.solve(logP);
代码可以运行和终止,但我无法获得计算结果。 A和logP都是SparseMatrix。我应该如何获得solve()函数的结果?
更改结果对象的类型&#34; beta&#34;进入MatrixXd会导致以下错误:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
将类型更改为VectorXd时会导致:
void Eigen::PlainObjectBase<Derived>::resizeLike(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Solve<Eigen::ConjugateGradient<Eigen::SparseMatrix<double>, 3>, Eigen::SparseMatrix<double> >; Derived = Eigen::Matrix<double, -1, 1>]: Assertion `other.rows() == 1 || other.cols() == 1' failed.
所以我认为关键问题是什么类型应该&#34; beta&#34;是。