Php Program to multiply two matrices
Given two matrices, the task to multiply them. Matrices can either be square or rectangular.
Examples:
Input : mat1[][] = {{1, 2}, {3, 4}} mat2[][] = {{1, 1}, {1, 1}} Output : {{3, 3}, {7, 7}} Input : mat1[][] = {{2, 4}, {3, 4}} mat2[][] = {{1, 2}, {1, 3}} Output : {{6, 16}, {7, 18}}
Multiplication of Square Matrices :
The below program multiplies two square matrices of size 4*4, we can change N for different dimensions.
PHP
<?php // PHP program to multiply two // square matrices. // This function multiplies mat1[][] and // mat2[][], and stores the result in res[][] function multiply(& $mat1 , & $mat2 , & $res ) { $N = 4; for ( $i = 0; $i < $N ; $i ++) { for ( $j = 0; $j < $N ; $j ++) { $res [ $i ][ $j ] = 0; for ( $k = 0; $k < $N ; $k ++) $res [ $i ][ $j ] += $mat1 [ $i ][ $k ] * $mat2 [ $k ][ $j ]; } } } // Driver Code $mat1 = array ( array (1, 1, 1, 1), array (2, 2, 2, 2), array (3, 3, 3, 3), array (4, 4, 4, 4)); $mat2 = array ( array (1, 1, 1, 1), array (2, 2, 2, 2), array (3, 3, 3, 3), array (4, 4, 4, 4)); multiply( $mat1 , $mat2 , $res ); $N = 4; echo ("Result matrix is "); for ( $i = 0; $i < $N ; $i ++) { for ( $j = 0; $j < $N ; $j ++) { echo ( $res [ $i ][ $j ]); echo ( " " ); } echo (" "); } // This code is contributed // by Shivi_Aggarwal ?> |
Output
Result matrix is 10 10 10 10 20 20 20 20 30 30 30 30 40 40 40 40
Time complexity: O(n3). It can be optimized using Strassen’s Matrix Multiplication
Auxiliary Space: O(n2)
Multiplication of Rectangular Matrices :
We use pointers in C to multiply to matrices. Please refer to the following post as a prerequisite of the code.
How to pass a 2D array as a parameter in C?
PHP
<?php // PHP program to multiply two // rectangular matrices // Multiplies two matrices mat1[][] // and mat2[][] and prints result. // (m1) x (m2) and (n1) x (n2) are // dimensions of given matrices. function multiply( $m1 , $m2 , $mat1 , $n1 , $n2 , $mat2 ) { for ( $i = 0; $i < $m1 ; $i ++) { for ( $j = 0; $j < $n2 ; $j ++) { $res [ $i ][ $j ] = 0; for ( $x = 0; $x < $m2 ; $x ++) { $res [ $i ][ $j ] += $mat1 [ $i ][ $x ] * $mat2 [ $x ][ $j ]; } } } for ( $i = 0; $i < $m1 ; $i ++) { for ( $j = 0; $j < $n2 ; $j ++) { echo $res [ $i ][ $j ] . " " ; } echo " "; } } // Driver code $mat1 = array ( array ( 2, 4 ), array ( 3, 4 )); $mat2 = array ( array ( 1, 2 ), array ( 1, 3 )); $m1 = 2; $m2 = 2; $n1 = 2; $n2 = 2; //Function call multiply( $m1 , $m2 , $mat1 , $n1 , $n2 , $mat2 ); // This code is contributed by rathbhupendra ?> |
Output
6 16 7 18
Time complexity: O(n3). It can be optimized using Strassen’s Matrix Multiplication
Auxiliary Space: O(m1 * n2)
Please refer complete article on Program to multiply two matrices for more details!
Please Login to comment...