2015-04-22 4 views
2

Я глубоко озадачен моим текущим заданием домашней работы для одного из моих классов CS.Добавление и умножение 2D-матриц

Проблема заключается в создании метода для умножения двух матриц 3x3. Помимо создания другого метода для добавления двух матриц 3x3, объедините их и отобразите вывод. Всего всего 3 матрицы, все введенные пользователем.

Матрица 1: (1, 2, 3, 4, 5, 6, 7, 8, 9)

Матрица 2: (9, 8, 7, 6, 5, 4, 3, 2, 1)

Матрица 3: (0, 2, 4, 1, 4.5, 2.2, 1.1, 4.3, 5.2)

Результат Выход: (30, 26, 22, 85, 73,5, 56,2, 139,1, 118.3, 95.2)

На выходе мы получаем Матрица 1 * Матрица 2 + Матрица 3 = Вывод.

Моя основная проблема заключается в отображении правильных номеров на выходе, это кажется очень простым, но его номера полностью не соответствуют моим номерам. Я очень сильно зациклен на вас, только размножаюсь и добавляю один раз, но ни один номер не может равняться до 139.1, если это правда.

import java.util.Scanner  
    public class Assignment8 { 

     public static void printResult(              
       double[][] m1, double[][] m2, double[][] m3, double[][] resultMatrix, char op1, char op2) { 
      for (int i = 0; i < m1.length; i++) { 
       for (int j = 0; j < m1[0].length; j++) 
       System.out.print(" " + m1[i][j]); 

       if (i == m1.length/2) 
       System.out.print(" " + op1 + " "); 
       else 
       System.out.print("  "); 

       for (int j = 0; j < m2[0].length; j++) 
       System.out.print(" " + m2[i][j]); 

       if (i == m1.length/2) 
       System.out.print(" " + op2 + " "); 
       else 
       System.out.print("  "); 

       for (int j = 0; j < m3[0].length; j++) 
       System.out.print(" " + m3[i][j]); 

       if (i == m1.length/2) 
       System.out.print(" = "); 
       else 
       System.out.print("  "); 

       for (int j = 0; j < resultMatrix[0].length; j++) 
       System.out.print(" " + resultMatrix[i][j]); 

       System.out.println(); 
      } 
    } 


    public static double[][] multiplyMatrix(double[][] m3, double[][] m4) { 
     double[][] result = new double[m3.length][m3[0].length]; 
     for (int i = 0; i < result.length; i++) { 
      for (int j = 0; j < result[0].length; j++) 
        result[i][j] = m3[i][j] * m4[i][j]; 
     } 
        return result; 
    } 

    public static double[][] addMatrix(double[][] m1, double[][] m2) { 
     double[][] result = new double[m1.length][m1[0].length]; 
     for (int i = 0; i < result.length; i++) { 
      for (int j = 0; j < result[0].length; j++) 
        result[i][j] = m1[i][j] + m2[i][j]; 
     } 
        return result; 
    } 


    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     double[][] m1 = new double[3][3]; 
     double[][] m2 = new double[3][3]; 
     double[][] m3 = new double[3][3]; 

     System.out.print("Enter Matrix 1: "); 
     for(int row = 0; row <m1.length; row++){ 
      for(int column = 0; column < m1[row].length; column++) { 
       m1[row][column] = input.nextDouble(); 
      } 
     } 

     System.out.print("Enter Matrix 2:"); 
     for(int row = 0; row <m2.length; row++){ 
      for(int column = 0; column < m2[row].length; column++) { 
       m2[row][column] = input.nextDouble(); 
      } 
     } 

     System.out.print("Enter Matrix 3:"); 
     for(int row = 0; row <m3.length; row++){ 
      for(int column = 0; column < m3[row].length; column++) { 
       m3[row][column] = input.nextDouble(); 
      } 
     } 
     double multiply[][] = multiplyMatrix(m1, m2); 
     double add[][] = addMatrix(multiply, m3); 
     double resultMatrix[][] = addMatrix(add, multiply); 

     printResult(m1, m2, m3, resultMatrix, '*', '+');   
    } 
} 
+0

Прочитайте, как сделать матричное умножение с помощью простого итерационного метода. Подсказка: вы не просто умножаете числа в одной матрице с соответствующими номерами в другой. http://en.wikipedia.org/wiki/Matrix_multiplication_algorithm – samgak

+0

@ Refrain94 - Являются ли эти векторные матрицы? Я помню, как работал с Calculus в CS, поэтому умножение векторизованной матрицы будет связано с «кросс-продуктом» ... http://tutorial.math.lamar.edu/Classes/CalcII/CrossProduct.aspx – CommonKnowledge

ответ

1

Я думаю, что логика, которую вы использовали для умножения своих матриц, неверна. Взгляните на this

+0

Спасибо, тон! Я провел последние 2 часа, раздувая мой мозг, просматривая код, я полагал, что добавление и умножение массивов будет использовать ту же логику. Просто номер по номеру, 9 * 1, 2 * 8 и т. Д. – Refrain94

+0

Рад помочь ... – Phoenix

0

Проблема решена, Феникс указал мне в правильном направлении, я просто отредактировал метод умножения для правильной работы, и эврика работала!

+0

Вы должны принять его ответ тогда – Raniz

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