2012-12-26 178 views
0

我使用Jama來計算特徵向量和特徵值,它的工作很好。用矩陣表示矩陣作爲使用Jama的陣列

問題是,有時將矩陣中的列提取到數組中會導致錯誤的值。

有人來過它嗎?我該如何處理它?

我安裝我使用的代碼:

import weka.core.matrix.EigenvalueDecomposition; 
import weka.core.matrix.Matrix; 

public class Main6 { 
    public static void main(String[] args) { 
     double[][] m = {{1,0,1},{0,1,0},{1,1,1}}; 
     EigenvalueDecomposition e = new EigenvalueDecomposition(new Matrix(m)); 

     double[] imgValue = e.getImagEigenvalues(); 
     double[] realValue = e.getRealEigenvalues(); 

     double[] columns = e.getV().getColumnPackedCopy(); 
     int rowDim = e.getV().getRowDimension(); 

     for(int i = 0; i<e.getImagEigenvalues().length; i++){ 
      System.out.println("\n<"+imgValue[i] + "," + realValue[i]+">"); 
      for(int j=i*rowDim;j<(i+1)*rowDim;j++) 
       System.out.print(columns[j]+" "); 
     } 
     System.out.println("\n\n"+e.getV()); 

    } 
} 

Wheares結果是:

OUTPUT: 

    <0.0,2.0> 
    0.7071067811865475 0.0 0.7071067811865475 
    <0.0,0.0> 
    -0.7071067811865475 0.0 0.7071067811865475 
    <0.0,1.0> 
    -1.0 1.0 -2.220446049250313E-16 

    According to the debugger, the matrix is: 
     0.71 -0.71 -1 
     0  0  1 
     0.71 0.71 0 


    the matrix is: 

     1 0 1 
     0 1 0 
     1 1 1 

我真的很感激,關於爲什麼會發生任何建議或見解。謝謝!

回答

0

你已經混淆了你X和Y軸一些地方(行VS列)我不知道哪一個是正確的。如果「調試」輸出是由toString()產生的,那很可能是正確的。

+0

這不是問題所在。 我希望是這樣,但我發現一個更嚴重的問題。 對於矩陣{{1,0,1,0},{0,1,0,0},{1,0,0,0},{0,0,1,1}} 調試器和兩個輸出中是相同的: 1.618033988749894: V1 = -0.6479361632942984 0.0 -0.40044657145607854 -0.6479361632942985 -0.6180339887498949: V2 = 0.4880538916195737 0.0 -0.7896877849821275 0.4880538916195736 1.0: V3 = 2.220446049250313E-16 0.0 1.2054651028791157E-16 1.4142135623730951 1.0 : v4 = 0.0 1.0 0.0 0.0}。 它是有問題的變量類型:什麼是雙2.220446049250313E-16或1.2054651028791157E-16? – Maoritzio

+1

尺寸看起來不一樣。我會假設值小於| x | <1e-15將被打印爲0. –

+0

嘿,彼得,謝謝你的幫助! 我必須問 - 你是怎麼想出邊界| x | <1e-15? – Maoritzio