C Program to Find Inverse of Matrix of any given order
Inverse of Matrix for a matrix A is A-1.
The inverse of A is A-1 only when: A × A-1 = A-1 × A = I
We can find the Inverse of the matrix with the help of adjoin matrix that is :-
C-Program to read any order of Square Matrix and find its inverse.
/* C-Program: Inverse Matrix of any Order of Square Matrix */ #include<stdio.h> #include<conio.h> /* Function Prototype declaration */ float detr(float [][10],int); void cofactor(float [][10],int); void transpose(float [][10],float [][10],int); void display(float [][10], int); int main() { float a[10][10],d; int i,j,k; printf("Enter the order of the Matrix : "); scanf("%d", &k); printf("Enter the row by row values of %dX%d Matrix:\n",k,k); for (i = 0;i < k; i++) for (j = 0;j < k; j++) scanf("%f", &a[i][j]); printf("The given matrix is:\n"); display(a, k); d=detr(a,k); printf("The determinant of matrix is: %.2f \n",d); if(d==0) printf("Inverse of Matrix is not possible\n"); else cofactor(a,k); return 0; } /* for calculate Deterrminant of the Matrix function definition*/ float detr(float a1[10][10],int k) { float d=0,b[10][10]; int i,j,m,n,c,s=1; if(k==1) return (a1[0][0]); for(c=0;c<k;c++) { m=0; n=0; for(i=0;i<k;i++) for(j=0;j<k;j++) { if(i!=0 && j!=c) { b[m][n]=a1[i][j]; n++; if(n == k-1) { n=0; m++; } } } d=d+s*(a1[0]*detr(b,k-1)); s = -s; } return(d); } /* function define find co-factor */ void cofactor(float x[10][10],int k) { float b[10][10], y[10][10]; int p,q,m,n,i,j,s=1; for(q=0;q<k;q++) for(p=0;p<k;p++) { m=0; n=0; for(i=0;i<k;i++) for(j=0;j<k;j++) if(i!=q && j!=p) { b[m][n]=x[i][j]; if(n<(k-2)) n++; else { n=0; m++; } } y[q][p]=s*detr(b,k-1); s=-1*s; } transpose(x,y,k); } /*Finding transpose of matrix*/ void transpose(float x[10][10],float y[10][10],int r) { int i,j; float b[10][10],inv[10][10],d; printf("The cofactor of matrix is:\n"); display(y,r); /* transpose of cofactor matrix */ for(i=0;i<r;i++) for(j=0;j<r;j++) b[i][j]=y[j][i]; d=detr(x,r); printf("The adjoint matrix is:\n"); display(b,r); /* calculate inverse matrix */ for(i=0;i<r;i++) for(j=0;j<r;j++) inv[i][j]=b[i][j]/d; printf("The inverse of matrix is:\n"); display(inv,r); } /* display function definition */ void display(float m[][10], int o) { int i,j; for(i=0;i<o;i++) { for(j=0;j<o;j++) printf("%8.2f", m[i][j]); printf("\n"); } }
OUTPUT :-
EXAMPLE 1
Enter the order of the Matrix : 3 Enter the row by row values of 3X3 Matrix: 0 1 3 1 2 1 2 3 1 The given matrix is: 0.00 1.00 3.00 1.00 2.00 1.00 2.00 3.00 1.00 The determinant of matrix is: -2.00 The cofactor of matrix is: -1.00 1.00 -1.00 8.00 -6.00 2.00 -5.00 3.00 -1.00 The adjoint matrix is: -1.00 8.00 -5.00 1.00 -6.00 3.00 -1.00 2.00 -1.00 The inverse of matrix is: 0.50 -4.00 2.50 -0.50 3.00 -1.50 0.50 -1.00 0.50
EXAMPLE 2
Enter the order of the Matrix : 3 Enter the row by row values of 3X3 Matrix: 1 2 3 1 2 3 2 3 4 The given matrix is: 1.00 2.00 3.00 1.00 2.00 3.00 2.00 3.00 4.00 The determinant of matrix is: 0.00 Inverse of Matrix is not possible
EXAMPLE 3
Enter the order of the Matrix : 4 Enter the row by row values of 4X4 Matrix: 1 1 1 1 0 2 1 3 4 2 1 0 3 2 1 5 The given matrix is: 1.00 1.00 1.00 1.00 0.00 2.00 1.00 3.00 4.00 2.00 1.00 0.00 3.00 2.00 1.00 5.00 The determinant of matrix is: -17.00 The cofactor of matrix is: 0.00 17.00 -34.00 -0.00 -5.00 14.00 -8.00 -1.00 -2.00 -8.00 7.00 3.00 3.00 -5.00 -2.00 4.00 The adjoint matrix is: 0.00 -5.00 -2.00 3.00 17.00 14.00 -8.00 -5.00 -34.00 -8.00 7.00 -2.00 -0.00 -1.00 3.00 4.00 The inverse of matrix is: -0.00 0.29 0.12 -0.18 -1.00 -0.82 0.47 0.29 2.00 0.47 -0.41 0.12 0.00 0.06 -0.18 -0.24