一个快速(可能天真)的问题。请考虑以下代码,其中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)得到两个本征?
答案 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);