Hướng dẫn php matrix operations

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

Hướng dẫn php matrix operations

Multiplication of Square Matrices : 
The below program multiplies two square matrices of size 4*4, we can change N for different dimensions. 

PHP

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

        }

    }

}

$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 ("

");

}

?>

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

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 "

"; 

    

$mat1 = array( array( 2, 4 ), array( 3, 4 )); 

$mat2 = array( array( 1, 2 ), array( 1, 3 )); 

$m1 = 2;

$m2 = 2;

$n1 = 2;

$n2 = 2; 

multiply($m1, $m2, $mat1, $n1, $n2, $mat2); 

?>

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!