Search code examples
javaarraysmatrixindices

Multipying a Matrix by the same power using Java


I have the following code. I wish to state a matrix and multiply it to a specific power.

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");
             }

        }

   }
}

The issue I am having is I am not sure where to apply the Loop to multiply the matrix by the power that I have entered. I think I might have to also change the logic so that

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

Solution

  • Try this one out :

    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;
        }
    
    }