2016-06-06 6 views
1

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

import java.util.Scanner; 

class Test 
{ 
    public static void main(String args[]) 
    { 
     int m, n, c, d, k, Ind, x; 
     double sum = 0; 

     Scanner in = new Scanner(System.in); 

     System.out.println("Enter the power by which you want the Matrix to be multiplyed by: "); 
     Ind = in.nextInt(); 

     System.out.println("Enter the number of rows and columns of first matrix"); 
     m = in.nextInt(); 
     n = in.nextInt(); 

     double Mtr[][] = new double[m][n]; 
     double multiply[][] = new double[m][n]; 

     System.out.println("Enter the elements of first matrix"); 

     for (c = 0 ; c < m ; c++) 
     for (d = 0 ; d < n ; d++) 
      Mtr[c][d] = in.nextInt(); 

     if (Ind ==1) 

      for (c = 0 ; c < m ; c++) 
      { 
       for (d = 0 ; d < n ; d++) 
        System.out.print(Mtr[c][d]+"\t"); 

       System.out.print("\n"); 
      } 

      else 
      {   

     for (c = 0 ; c < m ; c++) 
     { 
      for (x=0; x < Ind; x++) 
      { 
       for (d = 0 ; d < n ; d++) 
       {  
         for (k = 0 ; k < m ; k++) 
         { 

         sum = sum + Mtr[c][k]*Mtr[k][d]; 
         } 

         multiply[c][d] = sum; 
        sum = 0; 
       } 
      } 
     } 

      System.out.println("Product of entered matrices:-"); 

      for (c = 0 ; c < m ; c++) 
      { 
       for (d = 0 ; d < n ; d++) 
        System.out.print(multiply[c][d]+"\t"); 

       System.out.print("\n"); 
      } 

     } 

    } 
} 

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

sum = sum + Mtr[c][k]*multiply[k][d] 
+0

, что выход вы ожидаете и что вы получаете? – Rockstar

+1

Если я ввожу матрицу 2 x 2 {1 2} {3 4}. Я получаю результат {7 10} {15 22}. Независимо от того, какую власть я ввожу. Я ожидаю, что получится три результата {37 54} {81 128}. – Dinks123

+2

http://stackoverflow.com/questions/22900872/raising-a-matrix-to-the-power-method-java Надеюсь, это поможет. – eldo

ответ

1

Попробуйте один из:

import java.util.Scanner; 

public class MatrixMultiplication { 

    public static void main(String[] args) { 

     int[][] a = new int[][] { { 1, 2 }, { 3, 4 } }; // first array 
     int[][] b = a;         
     int[][] c = a;         
     System.out.println("Eneter the multilpicity : "); 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     if(n < 2){          // As we need minimum two matrix for multiplication 
                 // Incase given multiplicity less than 2 it will not produce any difference 
      for (int i = 0; i < c.length; i++) { 
       for (int j = 0; j < c[0].length; j++) { 
        System.out.print(c[i][j] + " "); 
       } 
       System.out.println(); 

      } 
      System.exit(0); 
     }else if (n > 2) {       
      while (n >= 2) {       
       c = multiply(c, b); n--; 
      } 
     } else { 
      c = multiply(c, b);      
     } 

     for (int i = 0; i < c.length; i++) { 
      for (int j = 0; j < c[0].length; j++) { 
       System.out.print(c[i][j] + " "); 
      } 
      System.out.println(); 
     } 
    } 

    public static int[][] multiply(int[][] a, int[][] b) { 
     int rowsInA = a.length; 
     int columnsInA = a[0].length; // same as rows in B 
     int columnsInB = b[0].length; 
     int[][] c = new int[rowsInA][columnsInB]; 
     for (int i = 0; i < rowsInA; i++) { 
      for (int j = 0; j < columnsInB; j++) { 
       for (int k = 0; k < columnsInA; k++) { 
        c[i][j] = c[i][j] + a[i][k] * b[k][j]; 
       } 
      } 
     } 
     return c; 
    } 

} 
+0

Отлично! Спасибо, что это работает. – Dinks123