特征c ++中的Cholesky分解:如何一举得到D向量和逆向?

时间:2013-06-19 20:34:42

标签: c++ eigen

一个快速(可能天真)的问题。请考虑以下代码,其中Sig是对称PSD矩阵。

VectorXf c=Sig.ldlt().vectorD();
int p=Sig.cols();
MatrixXf b=MatrixXf::Identity(p,p); 
Sig.ldlt().solveInPlace(b);

Sig的Cholesky分解在这里进行了多少次? 如果上述答案不止一次,我需要D矢量 和Sig的倒数。什么是最快的方式(例如没有多余的方式 coputations)得到两个本征?

1 个答案:

答案 0 :(得分:3)

有两个cholesky分解,每个ldlt()调用一个。 ldlt()函数返回LDLT个对象。从那里你可以得到Cholesky分解中涉及的所有矩阵。

LDLT<MatrixXf> chol = Sig.ldlt();
VectorXf c = chol.vectorD();
int p = Sig.cols();
MatrixXf b = MatrixXf::Identity(p, p);
b = chol.solve(b);
相关问题