2017-05-06 69 views
0

我使用Eigen做密集线性代数计算,但是与向量作为对角线右手边,代码不编译(抱怨步幅)?Eigen LU解决对角线右手边编译错误

EigenMatrix A, B, X; 
EigenVector C; 

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

回答

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; 
} 
+1

使用合理的最新版本,您的代码将生成一个静态断言:THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES,因为LU分解需要除法(无截断)。 – chtz

+1

@chtz,谢谢,改为矩阵双。 – xaizek