Open In App
Related Articles

Determinant of a Matrix

Improve Article
Improve
Save Article
Save
Like Article
Like

The determinant of a Matrix is defined as a special number that is defined only for square matrices (matrices that have the same number of rows and columns). A determinant is used in many places in calculus and other matrices related to algebra, it actually represents the matrix in terms of a real number which can be used in solving a system of a linear equation and finding the inverse of a matrix.

Recommended Practice

Determinant of 2 x 2 Matrix:

Determinant of 2 x 2 matrix

Determinant of 3 x 3 Matrix: 

Determinant of 3 x 3 matrix

How to calculate? 

The value of the determinant of a matrix can be calculated by the following procedure: 

  • For each element of the first row or first column get the cofactor of those elements.
  • Then multiply the element with the determinant of the corresponding cofactor. 
  • Finally, add them with alternate signs. As a base case, the value of the determinant of a 1*1 matrix is the single value itself. 

The cofactor of an element is a matrix that we can get by removing the row and column of that element from that matrix.

Code block

Output

Determinant of the matrix is : 30

Time Complexity: O(n4)
Space Complexity: O(n2), Auxiliary space used for storing cofactors.

Note: In the above recursive approach when the size of the matrix is large it consumes more stack size.

Determinant of a Matrix using Determinant properties:

  • In this method, we are using the properties of Determinant. 
  • Converting the given matrix into an upper triangular matrix using determinant properties 
  • The determinant of the upper triangular matrix is the product of all diagonal elements. 
  • Iterating every diagonal element and making all the elements down the diagonal as zero using determinant properties 
  • If the diagonal element is zero then search for the next non-zero element in the same column.

There exist two cases:

  • Case 1: If there is no non-zero element. In this case, the determinant of a matrix is zero 
  • Case 2: If there exists a non-zero element there exist two cases 
    • Case A: If the index is with a respective diagonal row element. Using the determinant properties make all the column elements down to it zero
    • Case B: Swap the row with respect to the diagonal element column and continue the Case A operation.

Below is the implementation of the above approach:

C++




// C++ program to find Determinant of a matrix
#include <bits/stdc++.h>
using namespace std;
  
// Dimension of input square matrix
#define N 4
// Function to get determinant of matrix
int determinantOfMatrix(int mat[N][N], int n)
{
    int num1, num2, det = 1, index,
                    total = 1; // Initialize result
  
    // temporary array for storing row
    int temp[n + 1];
  
    // loop for traversing the diagonal elements
    for (int i = 0; i < n; i++) 
    {
        index = i; // initialize the index
  
        // finding the index which has non zero value
        while (index < n && mat[index][i] == 0) 
        {
            index++;
        }
        if (index == n) // if there is non zero element
        {
            // the determinant of matrix as zero
            continue;
        }
        if (index != i) 
        {
            // loop for swapping the diagonal element row and
            // index row
            for (int j = 0; j < n; j++) 
            {
                swap(mat[index][j], mat[i][j]);
            }
            // determinant sign changes when we shift rows
            // go through determinant properties
            det = det * pow(-1, index - i);
        }
  
        // storing the values of diagonal row elements
        for (int j = 0; j < n; j++) 
        {
            temp[j] = mat[i][j];
        }
        // traversing every row below the diagonal element
        for (int j = i + 1; j < n; j++) 
        {
            num1 = temp[i]; // value of diagonal element
            num2 = mat[j][i]; // value of next row element
  
            // traversing every column of row
            // and multiplying to every row
            for (int k = 0; k < n; k++) 
            {
                // multiplying to make the diagonal
                // element and next row element equal
                mat[j][k]
                    = (num1 * mat[j][k]) - (num2 * temp[k]);
            }
            total = total * num1; // Det(kA)=kDet(A);
        }
    }
  
    // multiplying the diagonal elements to get determinant
    for (int i = 0; i < n; i++) 
    {
        det = det * mat[i][i];
    }
    return (det / total); // Det(kA)/k=Det(A);
}
  
// Driver code
int main()
{
    /*int mat[N][N] = {{6, 1, 1},
                        {4, -2, 5},
                        {2, 8, 7}}; */
  
    int mat[N][N] = { { 1, 0, 2, -1 },
                      { 3, 0, 0, 5 },
                      { 2, 1, 4, -3 },
                      { 1, 0, 5, 0 } };
  
    // Function call
    printf("Determinant of the matrix is : %d",
           determinantOfMatrix(mat, N));
    return 0;
}


Java




// Java program to find Determinant of a matrix
class GFG 
{
  
    // Dimension of input square matrix
    static final int N = 4;
  
    // Function to get determinant of matrix
    static int determinantOfMatrix(int mat[][], int n)
    {
        int num1, num2, det = 1, index,
                        total = 1; // Initialize result
  
        // temporary array for storing row
        int[] temp = new int[n + 1];
  
        // loop for traversing the diagonal elements
        for (int i = 0; i < n; i++) 
        {
            index = i; // initialize the index
  
            // finding the index which has non zero value
            while (index < n && mat[index][i] == 0
            {
                index++;
            }
            if (index == n) // if there is non zero element
            {
                // the determinant of matrix as zero
                continue;
            }
            if (index != i)
            {
                // loop for swapping the diagonal element row
                // and index row
                for (int j = 0; j < n; j++)
                {
                    swap(mat, index, j, i, j);
                }
                // determinant sign changes when we shift
                // rows go through determinant properties
                det = (int)(det * Math.pow(-1, index - i));
            }
  
            // storing the values of diagonal row elements
            for (int j = 0; j < n; j++) 
            {
                temp[j] = mat[i][j];
            }
  
            // traversing every row below the diagonal
            // element
            for (int j = i + 1; j < n; j++) 
            {
                num1 = temp[i]; // value of diagonal element
                num2 = mat[j]
                          [i]; // value of next row element
  
                // traversing every column of row
                // and multiplying to every row
                for (int k = 0; k < n; k++) 
                {
                    // multiplying to make the diagonal
                    // element and next row element equal
                    mat[j][k] = (num1 * mat[j][k])
                                - (num2 * temp[k]);
                }
                total = total * num1; // Det(kA)=kDet(A);
            }
        }
  
        // multiplying the diagonal elements to get
        // determinant
        for (int i = 0; i < n; i++) 
        {
            det = det * mat[i][i];
        }
        return (det / total); // Det(kA)/k=Det(A);
    }
  
    static int[][] swap(int[][] arr, int i1, int j1, int i2,
                        int j2)
    {
        int temp = arr[i1][j1];
        arr[i1][j1] = arr[i2][j2];
        arr[i2][j2] = temp;
        return arr;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        /*int mat[N][N] = {{6, 1, 1},
                        {4, -2, 5},
                        {2, 8, 7}}; */
  
        int mat[][] = { { 1, 0, 2, -1 },
                        { 3, 0, 0, 5 },
                        { 2, 1, 4, -3 },
                        { 1, 0, 5, 0 } };
  
        // Function call
        System.out.printf(
            "Determinant of the matrix is : %d",
            determinantOfMatrix(mat, N));
    }
}
  
// This code is contributed by Rajput-Ji


Python3




# Python program to find Determinant of a matrix
  
  
def determinantOfMatrix(mat, n):
  
    temp = [0]*# temporary array for storing row
    total = 1
    det = 1  # initialize result
  
    # loop for traversing the diagonal elements
    for i in range(0, n):
        index = # initialize the index
  
        # finding the index which has non zero value
        while(index < n and mat[index][i] == 0):
            index += 1
  
        if(index == n):  # if there is non zero element
            # the determinant of matrix as zero
            continue
  
        if(index != i):
            # loop for swapping the diagonal element row and index row
            for j in range(0, n):
                mat[index][j], mat[i][j] = mat[i][j], mat[index][j]
  
            # determinant sign changes when we shift rows
            # go through determinant properties
            det = det*int(pow(-1, index-i))
  
        # storing the values of diagonal row elements
        for j in range(0, n):
            temp[j] = mat[i][j]
  
        # traversing every row below the diagonal element
        for j in range(i+1, n):
            num1 = temp[i]     # value of diagonal element
            num2 = mat[j][i]   # value of next row element
  
            # traversing every column of row
            # and multiplying to every row
            for k in range(0, n):
                # multiplying to make the diagonal
                # element and next row element equal
  
                mat[j][k] = (num1*mat[j][k]) - (num2*temp[k])
  
            total = total * num1  # Det(kA)=kDet(A);
  
    # multiplying the diagonal elements to get determinant
    for i in range(0, n):
        det = det*mat[i][i]
  
    return int(det/total)  # Det(kA)/k=Det(A);
  
  
# Drivers code
if __name__ == "__main__":
    # mat=[[6 1 1][4 -2 5][2 8 7]]
  
    mat = [[1, 0, 2, -1], [3, 0, 0, 5], [2, 1, 4, -3], [1, 0, 5, 0]]
    N = len(mat)
      
    # Function call
    print("Determinant of the matrix is : ", determinantOfMatrix(mat, N))


C#




// C# program to find Determinant of a matrix
using System;
  
class GFG {
  
    // Dimension of input square matrix
    static readonly int N = 4;
  
    // Function to get determinant of matrix
    static int determinantOfMatrix(int[, ] mat, int n)
    {
        int num1, num2, det = 1, index,
                        total = 1; // Initialize result
  
        // temporary array for storing row
        int[] temp = new int[n + 1];
  
        // loop for traversing the diagonal elements
        for (int i = 0; i < n; i++)
        {
            index = i; // initialize the index
  
            // finding the index which has non zero value
            while(index < n && mat[index, i] == 0) 
            {
                index++;
            }
            if (index == n) // if there is non zero element
            {
                // the determinant of matrix as zero
                continue;
            }
            if (index != i) 
            {
                // loop for swapping the diagonal element row
                // and index row
                for (int j = 0; j < n; j++) 
                {
                    swap(mat, index, j, i, j);
                }
                // determinant sign changes when we shift
                // rows go through determinant properties
                det = (int)(det * Math.Pow(-1, index - i));
            }
  
            // storing the values of diagonal row elements
            for (int j = 0; j < n; j++)
            {
                temp[j] = mat[i, j];
            }
  
            // traversing every row below the diagonal
            // element
            for (int j = i + 1; j < n; j++) 
            {
                num1 = temp[i]; // value of diagonal element
                num2 = mat[j,
                           i]; // value of next row element
  
                // traversing every column of row
                // and multiplying to every row
                for (int k = 0; k < n; k++)
                {
  
                    // multiplying to make the diagonal
                    // element and next row element equal
                    mat[j, k] = (num1 * mat[j, k])
                                - (num2 * temp[k]);
                }
                total = total * num1; // Det(kA)=kDet(A);
            }
        }
  
        // multiplying the diagonal elements to get
        // determinant
        for (int i = 0; i < n; i++) 
        {
            det = det * mat[i, i];
        }
        return (det / total); // Det(kA)/k=Det(A);
    }
  
    static int[, ] swap(int[, ] arr, int i1, int j1, int i2,
                        int j2)
    {
        int temp = arr[i1, j1];
        arr[i1, j1] = arr[i2, j2];
        arr[i2, j2] = temp;
        return arr;
    }
  
    // Driver code
    public static void Main(String[] args)
    {
        /*int mat[N,N] = {{6, 1, 1},
                        {4, -2, 5},
                        {2, 8, 7}}; */
  
        int[, ] mat = { { 1, 0, 2, -1 },
                        { 3, 0, 0, 5 },
                        { 2, 1, 4, -3 },
                        { 1, 0, 5, 0 } };
  
        // Function call
        Console.Write("Determinant of the matrix is : {0}",
                      determinantOfMatrix(mat, N));
    }
}
  
// This code is contributed by 29AjayKumar


Javascript




Javascript<script>
// javascript program to find Determinant of a matrix
  
  
    // Dimension of input square matrix
      var N = 4;
  
    // Function to get determinant of matrix
    function determinantOfMatrix(mat , n)
    {
        var num1, num2, det = 1, index,
                        total = 1; // Initialize result
  
        // temporary array for storing row
        var temp = Array(n + 1).fill(0);
  
        // loop for traversing the diagonal elements
        for (i = 0; i < n; i++) 
        {
            index = i; // initialize the index
  
            // finding the index which has non zero value
            while (index < n && mat[index][i] == 0) 
            {
                index++;
            }
            if (index == n) // if there is non zero element
            {
                // the determinant of matrix as zero
                continue;
            }
            if (index != i)
            {
                // loop for swapping the diagonal element row
                // and index row
                for (j = 0; j < n; j++)
                {
                    swap(mat, index, j, i, j);
                }
                // determinant sign changes when we shift
                // rows go through determinant properties
                det = parseInt((det * Math.pow(-1, index - i)));
            }
  
            // storing the values of diagonal row elements
            for (j = 0; j < n; j++) 
            {
                temp[j] = mat[i][j];
            }
  
            // traversing every row below the diagonal
            // element
            for (j = i + 1; j < n; j++) 
            {
                num1 = temp[i]; // value of diagonal element
                num2 = mat[j]
                          [i]; // value of next row element
  
                // traversing every column of row
                // and multiplying to every row
                for (k = 0; k < n; k++) 
                {
                    // multiplying to make the diagonal
                    // element and next row element equal
                    mat[j][k] = (num1 * mat[j][k])
                                - (num2 * temp[k]);
                }
                total = total * num1; // Det(kA)=kDet(A);
            }
        }
  
        // multiplying the diagonal elements to get
        // determinant
        for (i = 0; i < n; i++) 
        {
            det = det * mat[i][i];
        }
        return (det / total); // Det(kA)/k=Det(A);
    }
  
     function swap(arr , i1 , j1 , i2,
                         j2)
    {
        var temp = arr[i1][j1];
        arr[i1][j1] = arr[i2][j2];
        arr[i2][j2] = temp;
        return arr;
    }
  
    // Driver code
      
  
        /*var mat[N][N] = [{6, 1, 1],
                        {4, -2, 5],
                        {2, 8, 7}]; */
  
        var mat = [ [ 1, 0, 2, -1 ],
                        [ 3, 0, 0, 5 ],
                        [ 2, 1, 4, -3 ],
                        [ 1, 0, 5, 0 ] ];
  
        // Function call
        document.write(
            "Determinant of the matrix is : ",
            determinantOfMatrix(mat, N));
  
// This code contributed by gauravrajput1 
</script>


Output

Determinant of the matrix is : 30

Time complexity: O(n3
Auxiliary Space: O(n), Space used for storing row.
 

Determinant of a Matrix Using the NumPy package in Python

There is a built-in function or method in linalg module of NumPy package in python. It can be called numpy.linalg.det(mat) which returns the determinant value of the matrix mat passed in the argument.

Python3




# importing the numpy package
# as np
import numpy as np
  
def determinant(mat):
      
    # calling the det() method
    det = np.linalg.det(mat)
    return round(det)
  
# Driver Code
# declaring the matrix
mat = [[1, 0, 2, -1],
       [3, 0, 0, 5],
       [2, 1, 4, -3],
       [1, 0, 5, 0]]
  
# Function call
print('Determinant of the matrix is:',
      determinant(mat))


Output:

Determinant of the matrix is: 30

Time Complexity: O(n3), as the time complexity of np.linalg.det is O(n3) for an n x n order matrix.
Auxiliary Space: O(1)


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 12 Oct, 2023
Like Article
Save Article
Similar Reads
Related Tutorials