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

Cholesky decomposition in eigen c++: how to get both the D vector and the inverse in one swoop?

本文关键字:向量 一次性 中的 c++ Cholesky 分解 特征      更新时间:2023-10-16

一个简单的(可能是天真的)问题。考虑下面的代码,其中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的倒数。最快的方法是什么计算)使两者都符合特征?

有两个choolesky分解,每个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);