2013-06-22 11 views
0

제 경우에는 Eigen (3.0.12)의 JacobiSVD 솔버를 사용하여 과소 결정 방정식 시스템, A * λ = b를 풀고 싶습니다.Eigen (C++)에서 underdetermined 방정식 시스템을 풀기

선형 방정식 시스템을 가지고 내 C++ 프로그램 구조 다음

계수 행렬 ()

 0.6   5.68434e-20  -0.2 
     5.68434e-20 7.06819e-39  -4.26326e-20 
     -0.2   -4.26326e-20  0.4 

RHS (B)

 -1.962 
     2.78817e-19 
     -5.886 

람다 :

 -9.81 
     3.94467e+19   <---------- error (Where does this come from?) 
     -19.62 
  • 행렬 A의 순위는 - 순위 (A) = 2
  • 그래서 행렬 없음 전체 순위가 없습니다. 따라서 A는 단수이고 가역이 아닙니다.
  • 조건 인 - COND (A) = Inf를
  • A * λ = B를 해결하기 위해, I는 I는 이것을 검증 고유치 (JacobiSVD)로부터 SVD 분해법

사용 MATLAB : http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm

시작 부분에서 첫 번째 시뮬레이션 단계가 정확합니다. 그러나 A * λ = b를 풀 때 매우 작은 수치 오차가 있습니다.

그러면 시스템이 다운되고 내 결과가 정확하지 않아 NaN 결과를 얻습니다. 여기

코드 : 나는 무엇이 잘못

/******** SVD ********/ 
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV); 
lambda = svd.solve(b); 

을 한거야?

답변

2

JacobiSVD는 해결을 위해 모든 0이 아닌 특이 값을 고려합니다. ColPivHouseholderQR을 사용하는 것이 좋습니다.