2013-06-19 48 views
2

一個快速(也許天真)的問題。考慮下面的代碼,其中Sig是一個對稱的PSD矩陣。特徵C++中的喬列斯基分解:如何同時獲得D矢量和逆矩陣?

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

Sig Cholesky分解在這裏進行多少次? 如果上面的答案不止一次,我需要D矢量 和Sig的倒數。什麼是最快的方式(例如沒有冗餘 coputations)得到兩個特徵?

回答

3

有兩個膽固醇分解,每個調用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); 
+2

謝謝。您也可以使用'chol.solveInPlace(b)' – user189035

+2

@ user189035當指定的值和參數相同時,Eigen會自動解決它,請參閱[這裏](http://eigen.tuxfamily.org/dox/classEigen_1_1LDLT的.html#a71f78ede18adb53bdfe988161653e812) –

相關問題