0
我使用Eigen做密集线性代数计算,但是与向量作为对角线右手边,代码不编译(抱怨步幅)?Eigen LU解决对角线右手边编译错误
EigenMatrix A, B, X;
EigenVector C;
X= A.lu.solve(B); // ok
X= A.lu.solve(C.asDiagonal()); // not ok !
我使用Eigen做密集线性代数计算,但是与向量作为对角线右手边,代码不编译(抱怨步幅)?Eigen LU解决对角线右手边编译错误
EigenMatrix A, B, X;
EigenVector C;
X= A.lu.solve(B); // ok
X= A.lu.solve(C.asDiagonal()); // not ok !
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;
}
使用合理的最新版本,您的代码将生成一个静态断言:THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES,因为LU分解需要除法(无截断)。 – chtz
@chtz,谢谢,改为矩阵双。 – xaizek