2016-12-10 4 views
2

동등한 권리 분열 행렬 내 아이겐 C++ 프로젝트에서아이겐 제가 <pre><code>A = B*inv(C) </code></pre> <p></p>는 (A, B 및 C가 사각형 매트릭스 인 상태), I는 행렬 반전 매트릭스 "오른쪽 분할"으로 대체되어야한다는 경고를 쓰는 경우 매트랩

A = B/C 

같은 (때문에 수치 적으로보다 안정적이고 정확한되는에) 나는 다음과 같은 코드가 있습니다

Eigen::Matrix<double> A = B*(C.inverse()); 
,536을

그리고 내가 Matlab 위에서 언급 한 것과 비슷한 Eigen에서 역행렬을 취하는 것에 상응하는 대체품이 있다면 woundering했다?

나는 매트릭스 "왼쪽 부문은"

아이겐에서
A = C*inv(B) 

에 대한

A = inv(C)*B 

같은 표현에 대한 방정식의 시스템 있지만, 무엇을 해결하여 표현 될 수 있다는 것을 알고? 이 작업을 수행하는 가장 효율적인 방법

순간
+1

모든 것을 동일한 형식으로 끝낼 수 있습니다. 하지만 역수를 계산하는 것보다 더 효과적 일지는 확실하지 않습니다. –

+1

큰 행렬을 역변환하는 것은'AxC = B' 또는'CxA = B' 행렬 방정식을 풀 때 비효율적입니다. – karakfa

답변

2

결국이 were/are plans

SomeDecomposition decompC(C); // decompose C with a suiting decomposition 
Eigen::MatrixXd A = decompC.transpose().solve(B.transpose()).transpose(); 

로 아이겐에서 구현 될 수

A^T = inv(C^T) * B^T 
A = (inv(C^T) * B^T)^T 

에 방정식을 다시 작성하는 것입니다, 하나는 쓸 수 있습니다

A = B * decompC.inverse(); 

및 Eigen은 이것을 가장 많은 ef ficient way.

+0

좋아, 고마워! – SampleTime