package com.learning.ds.matrices; import com.learning.ds.arrays.ArrayUtil; /** * Created by Rajdeep on 28/1/14. */ public class MatrixMultiplicationDemo { public static void main(String[] args){ //the temp1 and temp2 array values can be changed to test this program int[][] temp1 = {{2,0}}; int[][] temp2 = {{1,1,1}, {2,2,2}}; System.out.println("Matrix 1: "); ArrayUtil.print2DIntArray(temp1); System.out.println("Matrix 2: "); ArrayUtil.print2DIntArray(temp2); if( !( isFilledMatrix(temp1) && isFilledMatrix(temp2) ) ){ System.out.println("One of the matrices is not filled completely and can't be used for multiplication."); } else{ //check dimension if(!areMatricesMultipliable(temp1, temp2)){ System.out.println("The number of columns in first matrix is unequal to number of rows in second matrix. The must be equal for dot product."); } else{ System.out.println("can be multiplied"); int[][] tempNew = multiplyMatrices(temp1, temp2); System.out.println("new matrix is: "); ArrayUtil.print2DIntArray(tempNew); } } } private static int[][] multiplyMatrices(int[][] temp1, int[][] temp2) { // int rowCount1 = temp1.length; int colCount1 = temp1[0].length; int colCount2 = temp2[0].length; int[][] tempNew = new int[rowCount1][colCount2]; for(int i=0; i < rowCount1; i++){ int k=0; while(k < colCount2){ int tempVal = 0; for (int j=0; j < colCount1; j++){ tempVal = tempVal + ( temp1[i][j] * temp2[j][k] ); } tempNew[i][k] = tempVal; k++; } } return tempNew; } //matrix multiplication rule is //no of columns of left matrix == no of rows in right matrix // (m x n) . (n x p) = (m x p) private static boolean areMatricesMultipliable(int[][] mat1, int[][] mat2){ return (mat1[0].length == mat2.length); } //check the matrix has all elements filled or not //In other words, checking whether number of columns in each row is same private static boolean isFilledMatrix(int[][] mat){ boolean retVal = false; int rows = mat.length; if(rows == 1){ retVal = true; } else { for(int i=0; i < (rows-1); i++){ if(mat[i].length != mat[i+1].length){ retVal = false; break; } else retVal = true; } } return retVal; } }
The
ArrayUtil.print2DArray(int[][] args)prints the array on screen through normal 'for' loops.
One sample output:
Matrix 1:Another sample output by changing the temp1 and temp2 arrays in main() method:
2 0
Matrix 2:
1 1 1
2 2 2
can be multiplied
new matrix is:
2 2 2
Matrix 1::
2 0 3:
Matrix 2::
1 1 1:
2 2 2:
One of the matrices is not filled completely and can't be used for multiplication.