我正在尝试计算C++中矩阵的乔勒斯基因子(对于给定的矩阵P,找到L,使得LL^T=P)。我的目标不是解决线性系统的P*x=b,因为这样的矩阵分解经常用于,而是实际获得矩阵L。(我正在尝试计算"sigma点“,就像在unscented变换中所做的那样。)
Eigen库理应计算乔勒斯基分解,但我不知道如何让它给出矩阵L中的值。当我尝试以下代码行时
Eigen::MatrixXd P(3,3);
P << 6, 0, 0, 0, 4, 0, 0, 0, 7;
std::cout << P.llt().matrixL().col(0) << std::endl;我收到编译器错误
error: ‘Eigen::internal::LLT_Traits<Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001>, 1>::MatrixL’ has no member named ‘col’documentation说明LLT.matrixL()返回类型特征::MatrixL。这是什么,我如何得到L的值?
发布于 2012-10-19 16:59:57
您可以在LLT.h头文件中查找特征是什么。正如文档中所说的,它是一个TriangularView。三角视图没有col成员,这就是出现错误的原因。将三角形视图复制到密集矩阵中,如下所示:
Eigen::MatrixXd P(3,3);
P << 6, 0, 0, 0, 4, 0, 0, 0, 7;
Eigen::MatrixXd L( P.llt().matrixL() );
std::cout << L.col(0) << std::endl;会得到你想要的。
https://stackoverflow.com/questions/12968561
复制相似问题