Eigen LU解决对角线右侧编译错误

时间:2017-05-06 08:10:04

标签: eigen eigen3

我使用Eigen进行密集线性代数计算,但是当向量作为对角线右侧时,代码没有编译(抱怨步幅)?

EigenMatrix A, B, X;
EigenVector C;

X= A.lu.solve(B);               // ok
X= A.lu.solve(C.asDiagonal());  // not ok !

1 个答案:

答案 0 :(得分:1)

asDiagonal()返回一个与预期类型不匹配的包装器对象 solve()方法,因此您需要构造矩阵类型的实际对象 围绕它,如:

EigenMatrix(C.asDiagonal())

这对我有用(语法不同,因为你的代码不能为我编译,可能是因为版本/接口不同):

#include "Eigen/Core"
#include "Eigen/LU"

int
main()
{
    Eigen::Matrix4d A, B, X;
    Eigen::Vector4d C;

    X = A.lu().solve(B);
    X = A.lu().solve(Eigen::Matrix4d(C.asDiagonal()));

    return 0;
}