使用特征计算Cholesky分解

时间:2012-10-19 06:29:31

标签: c++ linear-algebra eigen

我正在尝试用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的值?

1 个答案:

答案 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;

会得到你想要的东西。