2013-06-19 2 views
2

빠른 질문 일 수도 있습니다. 다음 코드를 고려하십시오. Sig은 대칭 PSD 매트릭스입니다. 고유 C++에서 Cholesky 분해 : 하나의 급습에서 D 벡터와 역함수를 얻는 방법?

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

Sig의 콜레 인수 분해는 여기에 몇 번 수행? 위의 답변이 두 번 이상이면 D 벡터 과 역도 인 Sig이 필요합니다. 고유 모드에서 가장 빠른 방법은 무엇입니까 (예 : 중복).

답변

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은 할당 된 값과 매개 변수가 동일 할 때 자동으로이를 해결합니다. [here] (http://eigen.tuxfamily.org/dox/classEigen_1_1LDLT .html # a71f78ede18adb53bdfe988161653e812) –