使用特征库

时间:2017-02-26 11:59:02

标签: matrix sparse-matrix eigen

我写了下面的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<do‌​uble>, 3>, Eigen::SparseMatrix<double> >; Derived = Eigen::Matrix<double, -1, 1>]: Assertion `other.rows() == 1 || other.cols() == 1' failed.

所以我认为关键问题是什么类型应该&#34; beta&#34;是。

0 个答案:

没有答案