C# Program for Matrix Multiplication

Matrix Multiplication

C# program to multiply two matrices has been shown here. Matrix $[A]_{m \times n}$ can be multiplied with matrix $[B]_{p \times q}$, iff $n = p$ i.e. the number of columns of the first matrix should to be equal to the number of rows in the second matrix. The order of the resultant matrix $C$ would be $m \times q$.

Algorithm, pseudocode and time complexity of the program have also been shown below.






1. Algorithm for matrix multiplication


1. Take two matrice $A_{m\times n}$ and $B_{p\times q}$ as input.

2. Declare another matrix $C_{m\times q}$ and initailize it with 0.

3. Check if $n = p$

4. If step [3] is false then display "Matrices can not be multiplied!" and go to step [8]

5. If step [3] is true, then

6. Repeat for each $i \in [0, m - 1]$

6.1. Repeat for each $j \in [0, q - 1]$

6.1.1. Repeat for each $k \in [0, p - 1]$

6.1.1.1. Perform $C[i][j] = C[i][j] + A[i][k] * B[k][j]$

7. Display $C_{m\times q}$ as the resultant matrix.

8. Exit program.




2. Pseudocode for matrix multiplication


Input: Two matrices $A_{m\times n}$ and $B_{p\times q}$

Output: $A * B$

1. Procedure matrixMultiplication($A_{m\times n}$, $B_{p\times q}$):

2. Initialize $C_{m\times q} = 0$

3. If $n == p$:

4. Repeat for each $i \in [0, m-1]$

5. Repeat for each $i \in [0, q-1]$

6. Repeat for each $k \in [0, p-1]$

7. $C_{ij}\leftarrow C_{ij} + A_{ik} * B_{kj}$

8. Return $C_{m\times q}$

9. Else:

10. Return Matrices can not be multiplied!

11. End Procedure





3. Time Complexity for matrix multiplication


Time Complexity: O($n^3$)

Where $n$ is the row and column size of two matrices.




4. C# Program for matrix multiplication

Code has been copied
/******************************************
           alphabetacoder.com
 C# Program for Matrix Multiplication
*******************************************/

using System;

namespace MatrixMultiplication {
    class Program {
        static void Main() {
            // Declare variables
            int m, n, p, q, i, j, k;
            int[, ] A = new int[10, 10];
            int[, ] B = new int[10, 10];
            int[, ] C = new int[10, 10];

            // Take input of the order of the first matrix
            Console.Write("Enter the number of rows of the first matrix: ");
            m = Convert.ToInt32(Console.ReadLine());
            Console.Write("Enter the number of columns of the first matrix: ");
            n = Convert.ToInt32(Console.ReadLine());

            // Take input of the first matrix
            Console.WriteLine("Enter the first matrix of order " + m + " x " + n + " =");
            for (i = 0; i < m; i++) {
                for (j = 0; j < n; j++) {
                    Console.Write("Enter the element at row " + (i + 1) + " column " + (j + 1) + ": ");
                    A[i, j] = Convert.ToInt32(Console.ReadLine());
                }
            }

            // Take input of the order of the second matrix
            Console.Write("Enter the number of rows of the second matrix: ");
            p = Convert.ToInt32(Console.ReadLine());
            Console.Write("Enter the number of columns of the second matrix: ");
            q = Convert.ToInt32(Console.ReadLine());

            // Take input of the second matrix
            Console.WriteLine("Enter the second matrix of order " + p + " x " + q + " =");
            for (i = 0; i < p; i++) {
                for (j = 0; j < q; j++) {
                    Console.Write("Enter the element at row " + (i + 1) + " column " + (j + 1) + ": ");
                    B[i, j] = Convert.ToInt32(Console.ReadLine());
                }
            }

            // Check if the number of columns in the first matrix
            // is the same as the number of rows in the second matrix.
            // If not, then matrices cannot be multiplied
            if (n != p) {
                Console.WriteLine("\nMatrices cannot be multiplied!");
            } else {
                // Perform matrix multiplication
                for (i = 0; i < m; i++) {
                    for (j = 0; j < q; j++) {
                        for (k = 0; k < p; k++) {
                            C[i, j] += A[i, k] * B[k, j];
                        }
                    }
                }

                Console.WriteLine("The resultant matrix after multiplication:");
                // Display the result
                for (i = 0; i < m; i++) {
                    for (j = 0; j < q; j++) {
                        Console.Write(C[i, j] + " ");
                    }
                    // New line
                    Console.WriteLine();
                }
            }
        }
    }
}

Output


Enter the number of rows of the first matrix: 2

Enter the number of columns of the first matrix: 2

Enter the first matrix of order 2 x 2 =

Enter the element at row 1 column 1: 1

Enter the element at row 1 column 2: 2

Enter the element at row 2 column 1: 5

Enter the element at row 2 column 2: 3

Enter the number of rows of the second matrix: 2

Enter the number of columns of the second matrix: 3

Enter the second matrix of order 2 x 3 =

Enter the element at row 1 column 1: 1

Enter the element at row 1 column 2: 0

Enter the element at row 1 column 3: 3

Enter the element at row 2 column 1: 2

Enter the element at row 2 column 2: 5

Enter the element at row 2 column 3: 3

The resultant matrix after multiplication:

5 10 9

11 15 24