2

簡単な(おそらく素朴な)質問です。次のコードを検討してください。ここSigで、 は対称 PSD 行列です。

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

ここで のコレスキー分解は何回Sig行われますか? 上記の答えが複数ある場合は、ベクトル D と の逆数の両方が必要ですSig。固有値で両方を取得する最速の方法 (冗長な計算なしなど) は何ですか?

4

1 に答える 1

3

コールごとに 1 つずつ、合計 2 つのコレスキー分解がありldlt()ます。このldlt()関数はLDLTオブジェクトを返します。そこから、コレスキー分解に含まれるすべての行列を取得できます。

LDLT<MatrixXf> chol = Sig.ldlt();
VectorXf c = chol.vectorD();
int p = Sig.cols();
MatrixXf b = MatrixXf::Identity(p, p);
b = chol.solve(b);
于 2013-06-19T21:50:30.533 に答える