一个快速(也许是幼稚)的问题。考虑以下代码,其中 Sig
是对称 PSD 矩阵。
VectorXf c=Sig.ldlt().vectorD();
int p=Sig.cols();
MatrixXf b=MatrixXf::Identity(p,p);
Sig.ldlt().solveInPlace(b);
这里对 Sig
进行了多少次 Cholesky 分解?
如果上述答案不止一次,我需要 D vector
以及 Sig
的倒数。最快的方法是什么(例如没有多余的
计算)以获得特征值?
最佳答案
有两种 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);
关于c++ - eigen C++ 中的 Cholesky 分解 : how to get both the D vector and the inverse in one swoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17200788/