我想解决这样的稀疏线性系统:
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;
}
答案 0 :(得分:1)
ConjugateGradient
算法仅适用于自伴矩阵。对于矩形矩阵,请改用LeastSquaresConjugateGradient
。