10

我正在尝试计算 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’

文档说 LLT.matrixL() 返回类型 Traits::MatrixL 。那是什么,我如何获得 L 的值?

4

1 回答 1

12

您可以在 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;

会给你你想要的。

于 2012-10-19T08:59:57.353 回答