2016-06-06 16 views
1

Ich habe den folgenden Code. Ich möchte eine Matrix angeben und sie zu einer bestimmten Macht multiplizieren.Multiplizieren einer Matrix mit der gleichen Leistung mit 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"); 
      } 

     } 

    } 
} 

Das Problem, das ich habe, ist, ich bin nicht sicher, wo die Schleife anzuwenden, um die Matrix durch die Kraft zu vervielfachen, die ich eingegeben habe. Ich glaube, ich könnte müssen auch die Logik so ändern, dass

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

welche Ausgabe werden Sie erwarten und was erhalten Sie? – Rockstar

+1

Wenn ich die 2 x 2-Matrix eingeben {1 2} {3 4}. Ich bekomme das Ergebnis {7 10} {15 22}. Egal, welche Kraft ich betrete. Ich erwarte für eine Potenz von drei das Ergebnis {37 54} {81 128}. – Dinks123

+2

http://stackoverflow.com/questions/22900872/raising-a-matrix-to-the-power-method-java Ich hoffe, das hilft. – eldo

Antwort

1

diese eine ausprobieren:

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

Großartig! Danke das funktioniert. – Dinks123