我正在尝试用C ++计算矩阵的Cholesky因子(对于给定的矩阵P找到L,使得LL ^ T = P)。我的目标不是求解线性系统P * x = b,因为这样的矩阵分解经常用于,但实际上是为了得到矩阵L.(我试图计算“sigma点”,如在无味变换中所做的那样) 。)
库Eigen据说会计算Cholesky分解,但我无法弄清楚如何让它给出矩阵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()返回Traits :: MatrixL类型。那是什么以及如何获得L的值?
答案 0 :(得分:11)
您可以在LLT.h头文件中查找Trait的内容。如文档所述,它是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;
会得到你想要的东西。