特征误差:SelfAdjointView仅用于平方矩阵

时间:2017-05-18 09:06:26

标签: c++ matrix eigen eigen3

我想解决这样的稀疏线性系统:

SparseMatrix<double> A(m, n);
VectorXd b(m);
ConjugateGradient<SparseMatrix<double>, Upper> solver;
solver.compute(A);
VectorXd X = solver.solve(b);

但运行此代码时出现此错误:

  

断言失败:(rows()== cols()&amp;&amp;“SelfAdjointView仅用于平方矩阵”),函数SparseSelfAdjointView

为什么我遇到这个问题以及如何解决它?

我写了一个小例子来重现这个错误:

#include "lib/Eigen/Sparse"

using namespace Eigen;

int main()
{
    SparseMatrix<double> A(2, 3);

    A.coeffRef(0, 0) = 1;
    A.coeffRef(0, 1) = 1;
    A.coeffRef(0, 2) = 1;
    A.coeffRef(1, 0) = 1;
    A.coeffRef(1, 1) = 1;
    A.coeffRef(1, 2) = 1;

    VectorXd b(2);
    b << 3, 3;

    ConjugateGradient<SparseMatrix<double>, Upper> solver;
    solver.compute(A);
    VectorXd X = solver.solve(b);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

ConjugateGradient算法仅适用于自伴矩阵。对于矩形矩阵,请改用LeastSquaresConjugateGradient