2015-08-27 9 views
1

Я вычисляю матрицу ковариации, собственные векторы и собственные значения, используя apache commons math3 library. так что моя основная функция заключается в следующем (дается двойная матрица):Проблема с собственными векторами с использованием общей библиотеки math3 apache

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 - единичная матрица, равная матричному порядку.

При этом мы получим значения L, которые могут быть положительными или отрицательными. Эти значения мы будем выставлять этому матричному уравнению для расчета векторной матрицы. Итак, после расчета, что элементы матрицы могут быть положительными или отрицательными.

Теоретически: "-"/"+" знак ive показывает направление векторных значений.

 Смежные вопросы

  • Нет связанных вопросов^_^