2015-01-28 2 views
1

У меня возникли проблемы с умножением матриц для этого кода, когда я делаю это вручную, и с помощью инструмента вычисления я получаю нечто совершенно иное, чем то, что дает мой код.Умножающиеся матрицы Java

Код:

public class mult1 { 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     double[][] colaO = {{.9,0.05,0.05},{0.05,.9,0.05},{0.05,0.05,.9}};//orginal 
     double[][] colaD = {{.9,0.05,0.05},{0.05,.9,0.05},{0.05,0.05,.9}};//copy 
     double[][] colaC = {{.9,0.05,0.05},{0.05,.9,0.05},{0.05,0.05,.9}};//for algs 
     mult1 test = new mult1(); 
     test.output(colaC); 
     test.Alg1(colaO, colaD, colaC); 
     test.output(colaC); 
    } 
    public void Alg1(double colaO[][],double colaD[][],double colaC[][]){ 
     for(int i=0;i<colaO.length;i++){ 
      for(int j=0;j<colaO.length;j++){ 
       for(int k=0;k<colaO.length;k++){ 
        colaC[i][j]+=colaO[i][k]*colaD[k][j]; 
       } 
      } 
     } 
    } 
    public void output(double colaC[][]){ 
     for(int i=0;i<colaC.length;i++){ 
      for(int j=0;j<colaC.length;j++){ 
       System.out.printf("%.3f",colaC[i][j]); 
       System.out.print(" "); 
      } 
      System.out.println(); 
     } 
    } 
} 

Результаты:

---original----- 
0.900 0.050 0.050 
0.050 0.900 0.050 
0.050 0.050 0.900 
---what i'm getting------ 
1.715 0.143 0.143 
0.143 1.715 0.143 
0.143 0.143 1.715 
---should be----- 
0.815 0.092 0.092 
0.092 0.815 0.092 
0.092 0.092 0.815 

Я не совсем понимаю, где я Мессинг уравнение

+0

возможно дубликат [Умножение двух матриц в Java] (http://stackoverflow.com/questions/15733829/multiplying-two-matrices-in- java) – fernandohur

+0

@fernandohur Это немного другая проблема, чем эта –

ответ

1

Ну первое, что я хотел бы сделать это 0- initialize colaC, так как вы используете += в своих записях. То, как вы делаете это сейчас, не может привести к правильному результату.

+0

Теперь я чувствую себя очень глупо, спасибо :) – AvatarKorra

+0

@AvatarKorra Если вы нашли это правильно, [отметьте его как это] (http://meta.stackexchange.com/а/5235/230615). Спасибо! –

0

double[][] colaC = {{.9,0.05,0.05},{0.05,.9,0.05},{0.05,0.05,.9}};//for algs

должен быть

double[][] colaC = {{0,0,0},{0,0,0},{0,0,0}};//for algs

+0

Спасибо, я получил его сейчас :) – AvatarKorra