2017-12-18 7 views
1

ich die apache.commons.math3 Bibliothek mit Eigenvektoren einer 3x3-Matrix zu berechnen, aber die Eigendekomposition Methoden zur Eigenvektoren zurückgeben falsche Ergebnisse der Berechnung: hier ist mein Code:EigenvalueDecomposition kehrt falsch Eigenvektoren

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)); 
    } 

Die gedruckte Ergebnisse sind:

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

während die richtigen sind

0.29050, -0.78307, 1 
1.82072, 2.38220, 1 
sein sollte

Was ist das Problem? Ist es ein Präzisionsfehler? Es scheint mir unmöglich so ein falsches Ergebnis zu sein

Antwort

2

Wenn v ein Eigenvektor einer Matrix ist, dann ist ein von Null verschiedenes reelles Vielfaches von v auch ein Eigenvektor. Der Vektor

(-0.5760517243311052 -0.7536997812678066 -0.31638750072027233) 

ein Vielfaches von

(1.82072, 2.38220, 1). 

Der Unterschied ist nur, dass die erste Norm hat 1, wohingegen die zweite eine dritte Komponente hat 1. Ihre Bibliotheks scheint die Normalisierung von Norm zu wählen 1, was besser ist, da es immer möglich ist.