Reputation: 79
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]
Upvotes: 1
Views: 872
Reputation: 2288
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;
}
}
Upvotes: 1