2017-12-18 15 views
1

을 반환하지만 고유 벡터를 계산하는 EigenDecomposition 방법은 잘못된 결과를 반환 :EigenvalueDecomposition 내가 3 × 3 행렬의 고유 벡터를 계산하기 위해 apache.commons.math3 라이브러리를 사용하고 잘못된 고유 벡터

double[][] matrix = { 
      {1 ,3 ,2}, 
      {1 ,4 ,3}, 
      {2 ,1 ,0} 
    }; 

    RealMatrix realMatrix = MatrixUtils.createRealMatrix(matrix); 
    EigenDecomposition decomposition = new EigenDecomposition(realMatrix); 

    for(int i = 0; i<3; i++){ 
     RealVector eigenvector = decomposition.getEigenvector(i); 
     System.out.println(eigenvector.getEntry(0)+" "+eigenvector.getEntry(1)+" "+eigenvector.getEntry(2)); 
    } 

인쇄 : 여기 내 코드입니다 결과는 다음과 같습니다

-0.5760517243311052 -0.7536997812678066 -0.31638750072027233 
0.22370947445236325 -0.6030287282098593 0.770086088626364 
0.293925829450875 1.583437114738283 -2.642858652367182 

올바른 사람이어야 동안

0.29050, -0.78307, 1 
1.82072, 2.38220, 1 
,

무엇이 문제입니까? 정확한 오류입니까? 이 잘못된 결과는 불가능한 것 같습니다.

답변

2

v가 행렬의 고유 벡터 인 경우 v의 0이 ​​아닌 실수 배가 또한 고유 벡터입니다. 벡터

(-0.5760517243311052 -0.7536997812678066 -0.31638750072027233) 

는 차이가 첫 번째는 두 번째는 세 번째 구성 요소가있는 반면 1. 라이브러리가 표준으로 정상화를 선택하는 것, 규범 1을 가지고 단지이다

(1.82072, 2.38220, 1). 

의 배수 1, 항상 가능하기 때문에 더 좋습니다.