2015-08-27 18 views
1

我使用apache commons math3 library來計算協方差矩陣,特徵向量和特徵值。所以我的主要功能是這個(給出一個雙矩陣):使用apache常用數學庫的EigenVectors問題

private void coVariance(double[][] matrix) { 
     RealMatrix mx = MatrixUtils.createRealMatrix(matrix); 
     RealMatrix cov = new Covariance(mx).getCovarianceMatrix(); 
     System.out.println("***************************************"); 
     System.out.println("Covariance Matrix"); 
     for (int i = 0; i < cov.getRowDimension(); i++) { 
      for (int j = 0; j < cov.getColumnDimension(); j++) { 
       System.out.print(cov.getEntry(i, j) + " "); 
      } 
      System.out.println(); 
     } 
     System.out.println("***************************************"); 
     EigenDecomposition e = new EigenDecomposition(cov); 
     double[] arrayEigenValue = e.getRealEigenvalues(); 
     for (int i = 0; i < e.getRealEigenvalues().length; i++) { 
      System.out.println("eigenValue with index " + i + " " + arrayEigenValue[i]); 
      RealVector arrayEigenVector = e.getEigenvector(i); 
      for (int j = 0; j < arrayEigenVector.getDimension(); j++) { 
       System.out.print(arrayEigenVector.getEntry(j) + " "); 
      } 
      System.out.println(); 
      System.out.println(); 
     } 
     System.out.println("***************************************"); 
    } 

爲了瞭解如果一切是正確的我使用已得到協方差/特徵值的例子/特徵向量已經計算出:

2.5,2.4 
0.5,0.7 
2.2,2.9 
1.9,2.2 
3.1,3.0 
2.3,2.7 
2,1.6 
1,1.1 
1.5,1.6 
1.1,0.9 

它的協方差矩陣特徵值和特徵值的這個結果:

0,616555556 0.615444444 
0.615444444 0.716555556 

特徵值:

0.0490833989 
1.28402771 

特徵向量:

1° = -0.735178656 -0.677873309 
2° = 0.677873399 -0.735178656 

我的程序的結果:

協方差矩陣

0.6165555555555556 0.6154444444444446 
0.6154444444444446 0.7165555555555555 

特徵值:

1.2840277121727839 
0.04908339893832714 

特徵向量:

1° = -0.7351786555444081 -0.6778733985280118 
2° = -0.6778733985280118 0.7351786555444081 

正如你所看到的,特徵向量是在第二個特徵向量0.7351786555444081

可能有人的第二個值的符號不同解釋我爲什麼?

回答

0

Oirc,

如果你不知道數學forulatioln特徵值的矩陣,我們使用一個公式來計算它|A-L.I| = 0 其中A是矩陣(行數據) L是(拉姆達)或恆定我們在這裏表示爲特徵值 I是等於A矩陣階的單位矩陣。

通過這個,我們將得到L值,可以是正值或負值 這個值我們將放到該矩陣方程來計算矢量矩陣。 所以經過計算,矩陣元素可以是正數或負數。

Theoritically:"-"/"+" ive sign顯示矢量值的方向。