2014-12-09 11 views
2

Eigen에는 행렬식과 역행렬의 명시적인 계산에 대해 경고하는 recommendations이 있습니다.Eigen에서 inverse와 determinant를 효율적으로 사용하는 방법?

나는 보통 - 역 - wishart 사전 배포와 함께 다변량 법선에 대한 사후 예측을 구현하고 있습니다. 이것은 다 변수 t- 분포로 표현 될 수 있습니다.

다 변수 t- 분포에서 |Sigma|^{-1/2}(x-mu)^T Sigma^{-1} (x-mu)이라는 용어를 찾을 수 있습니다.

저는 아이겐 (Eigen)과 관련하여 무지합니다. 긍정적 인 semidefinite 행렬 (공분산 행렬)에 대해 LLT 해석을 사용할 수 있다고 상상할 수 있습니다.

그러나 솔버 자체에 정의 된 .determinant().inverse() 메서드는 없습니다. .matrixL() 함수를 사용하고 역행렬에 대각선 요소를 역변환 할 필요가 있으며 또한 행렬식을 얻기 위해 곱을 계산해야합니까? 나는 뭔가를 놓친 것 같아.

+0

콜레셋 분해를 사용하여 공분산 행렬의 역수를 계산할 수 있습니다. 이것은 잘 문서화되어 있습니다. – Bathsheba

+0

우리는 방정식의 더 많은 것을 볼 필요가 있습니다. 나의 직감은 Jacobian/고유 값 분해 공간에서 작업하면, 거기에서 전체 계산을 할 수 있다는 것입니다. 조밀 한 행렬 역/결정 요인은 사라질 것입니다. – IdeaHat

+0

@ Bathsheba Eigen에서 LLT 솔버는 콜레 스키 분해에 사용됩니다. –

답변

1

당신이 Sigma=LL^T의 콜레 인수 분해를 가지고 (x-mu)^T*Sigma^{-1}*(x-mu)을 원하는 경우에, 당신은 계산할 수 : (llt.matrixL().solve(x-mu)).squaredNorm() (xmu이 벡터입니다 가정).

행렬식의 제곱근에 대해 llt.matrixL().determinant()을 계산하십시오 (삼각 행렬의 행렬식을 계산하는 것은 대각선 요소의 곱입니다).