A matrix is said to be singular if the determinant of the matrix is 0 otherwise it is non-singular .
Examples:
Input : 0 0 0 4 5 6 1 2 3 Output : Yes Determinant value of the matrix is 0 (Note first row is 0) Input : 1 0 0 4 5 6 1 2 3 Output : No Determinant value of the matrix is 3 (which is non-zero).
First find the determinant of the matrix and the check the condition if the determinant id 0 or not, if it is 0 then matrix is a singular matrix otherwise it is a non-singular matrix .
Implementation:
C++
// C++ program check if a matrix is // singular or not. #include <bits/stdc++.h> using namespace std; #define N 4 // Function to get cofactor of mat[p][q] in temp[][]. // n is current dimension of mat[][] void getCofactor( int mat[N][N], int temp[N][N], int p, int q, int n) { int i = 0, j = 0; // Looping for each element of the matrix for ( int row = 0; row < n; row++) { for ( int col = 0; col < n; col++) { // Copying into temporary matrix only // those element which are not in given // row and column if (row != p && col != q) { temp[i][j++] = mat[row][col]; // Row is filled, so increase row // index and reset col index if (j == n - 1) { j = 0; i++; } } } } } /* Recursive function to check if mat[][] is singular or not. */ bool isSingular( int mat[N][N], int n) { int D = 0; // Initialize result // Base case : if matrix contains single element if (n == 1) return mat[0][0]; int temp[N][N]; // To store cofactors int sign = 1; // To store sign multiplier // Iterate for each element of first row for ( int f = 0; f < n; f++) { // Getting Cofactor of mat[0][f] getCofactor(mat, temp, 0, f, n); D += sign * mat[0][f] * isSingular(temp, n - 1); // terms are to be added with alternate sign sign = -sign; } return D; } // Driver program to test above functions int main() { int mat[N][N] = { { 4, 10, 1 }, { 0, 0, 0 }, { 1, 4, -3 } }; if (isSingular(mat, N)) cout << "Matrix is Singular" << endl; else cout << "Matrix is non-singular" << endl; return 0; } |
Java
// Java program check if a matrix is // singular or not. class GFG { static final int N = 3 ; // Function to get cofactor of mat[p][q] in temp[][]. // n is current dimension of mat[][] static void getCofactor( int mat[][], int temp[][], int p, int q, int n) { int i = 0 , j = 0 ; // Looping for each element of the matrix for ( int row = 0 ; row < n; row++) { for ( int col = 0 ; col < n; col++) { // Copying into temporary matrix only // those element which are not in given // row and column if (row != p && col != q) { temp[i][j++] = mat[row][col]; // Row is filled, so increase row // index and reset col index if (j == n - 1 ) { j = 0 ; i++; } } } } } /* Recursive function to check if mat[][] is singular or not. */ static int isSingular( int mat[][], int n) { int D = 0 ; // Initialize result // Base case : if matrix contains single element if (n == 1 ) { return mat[ 0 ][ 0 ]; } int temp[][] = new int [N][N]; // To store cofactors int sign = 1 ; // To store sign multiplier // Iterate for each element of first row for ( int f = 0 ; f < n; f++) { // Getting Cofactor of mat[0][f] getCofactor(mat, temp, 0 , f, n); D += sign * mat[ 0 ][f] * isSingular(temp, n - 1 ); // terms are to be added with alternate sign sign = -sign; } return D; } // Driver code public static void main(String[] args) { int mat[][] = {{ 4 , 10 , 1 }, { 0 , 0 , 0 }, { 1 , 4 , - 3 }}; if (isSingular(mat, N) == 1 ) { System.out.println( "Matrix is Singular" ); } else { System.out.println( "Matrix is non-singular" ); } } } /* This code contributed by PrinciRaj1992 */ |
Python3
# python 3 program check if a matrix is # singular or not. global N N = 3 # Function to get cofactor of mat[p][q] in temp[][]. # n is current dimension of mat[][] def getCofactor(mat,temp,p,q,n): i = 0 j = 0 # Looping for each element of the matrix for row in range (n): for col in range (n): # Copying into temporary matrix only # those element which are not in given # row and column if (row ! = p and col ! = q): temp[i][j] = mat[row][col] j + = 1 # Row is filled, so increase row # index and reset col index if (j = = n - 1 ): j = 0 i + = 1 # Recursive function to check if mat[][] is # singular or not. */ def isSingular(mat,n): D = 0 # Initialize result # Base case : if matrix contains single element if (n = = 1 ): return mat[ 0 ][ 0 ] temp = [[ 0 for i in range (N + 1 )] for i in range (N + 1 )] # To store cofactors sign = 1 # To store sign multiplier # Iterate for each element of first row for f in range (n): # Getting Cofactor of mat[0][f] getCofactor(mat, temp, 0 , f, n) D + = sign * mat[ 0 ][f] * isSingular(temp, n - 1 ) # terms are to be added with alternate sign sign = - sign return D # Driver program to test above functions if __name__ = = '__main__' : mat = [[ 4 , 10 , 1 ],[ 0 , 0 , 0 ],[ 1 , 4 , - 3 ]] if (isSingular(mat, N)): print ( "Matrix is Singular" ) else : print ( "Matrix is non-singular" ) # This code is contributed by # Surendra_Gangwar |
C#
// C# program check if a matrix is // singular or not. using System; class GFG { static readonly int N = 3; // Function to get cofactor of mat[p,q] in temp[,]. // n is current dimension of mat[,] static void getCofactor( int [,]mat, int [,]temp, int p, int q, int n) { int i = 0, j = 0; // Looping for each element of the matrix for ( int row = 0; row < n; row++) { for ( int col = 0; col < n; col++) { // Copying into temporary matrix only // those element which are not in given // row and column if (row != p && col != q) { temp[i, j++] = mat[row, col]; // Row is filled, so increase row // index and reset col index if (j == n - 1) { j = 0; i++; } } } } } /* Recursive function to check if mat[,] is singular or not. */ static int isSingular( int [,]mat, int n) { int D = 0; // Initialize result // Base case : if matrix contains single element if (n == 1) { return mat[0, 0]; } int [,]temp = new int [N, N]; // To store cofactors int sign = 1; // To store sign multiplier // Iterate for each element of first row for ( int f = 0; f < n; f++) { // Getting Cofactor of mat[0,f] getCofactor(mat, temp, 0, f, n); D += sign * mat[0, f] * isSingular(temp, n - 1); // terms are to be added with alternate sign sign = -sign; } return D; } // Driver code public static void Main(String[] args) { int [,]mat = {{4, 10, 1}, {0, 0, 0}, {1, 4, -3}}; if (isSingular(mat, N) == 1) { Console.WriteLine( "Matrix is Singular" ); } else { Console.WriteLine( "Matrix is non-singular" ); } } } // This code contributed by Rajput-Ji |
Javascript
<script> // Javascript program check if a matrix is // singular or not. var N = 3; // Function to get cofactor of mat[p,q] in temp[,]. // n is current dimension of mat[,] function getCofactor(mat, temp, p, q, n) { var i = 0, j = 0; // Looping for each element of the matrix for ( var row = 0; row < n; row++) { for ( var col = 0; col < n; col++) { // Copying into temporary matrix only // those element which are not in given // row and column if (row != p && col != q) { temp[i][j++] = mat[row][col]; // Row is filled, so increase row // index and reset col index if (j == n - 1) { j = 0; i++; } } } } } /* Recursive function to check if mat[,] is singular or not. */ function isSingular(mat, n) { var D = 0; // Initialize result // Base case : if matrix contains single element if (n == 1) { return mat[0][0]; } var temp = Array.from(Array(N), ()=>Array(N)); // To store cofactors var sign = 1; // To store sign multiplier // Iterate for each element of first row for ( var f = 0; f < n; f++) { // Getting Cofactor of mat[0,f] getCofactor(mat, temp, 0, f, n); D += sign * mat[0][f] * isSingular(temp, n - 1); // terms are to be added with alternate sign sign = -sign; } return D; } // Driver code var mat = [[4, 10, 1], [0, 0, 0], [1, 4, -3]]; if (isSingular(mat, N) == 1) { document.write( "Matrix is Singular" ); } else { document.write( "Matrix is non-singular" ); } // This code is contributed by noob2000. </script> |
Matrix is non-singular
Time complexity: O(n3)
Auxiliary space: O(n2), for temp array to store co-factors
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!