In this tutorial, you will learn to write a program to find the inverse of a matrix in C. Let us first start by understanding how to find the inverse of a matrix and the requirements to find it.
In order to find the inverse of a matrix,
- The matrix must be a square matrix.
- Determinant needs to be calculated and should not equal to zero (0).
- Then find the adjoint of a matrix and
- Lastly, multiply 1/determinant by adjoint to get the inverse of a matrix.
Adjoint of a matrix
The adjoint of a matrix is obtained by taking the transpose of the cofactor matrix of a given square matrix. it is also called the Adjugate matrix. For matrix A, it is denoted by adj A.
Determinant of a matrix:
It is calculated in the following way for the square matrices.

The formula to find inverse of matrix:

C Program to Find Inverse of a Matrix
#include<stdio.h>
#include<math.h>
//function prototype that are being created
void cofactor(float [][25], float);
float determinant(float [][25], float);
void transpose(float [][25], float [][25], float);
int main()
{
float a[25][25], n, d;
int i, j;
printf("Enter the order of the Matrix: ");
scanf("%f", &n);
printf("Enter the elements of a matrix: \n");
for (i = 0;i < n; i++)
{
for (j = 0;j < n; j++)
{
scanf("%f", &a[i][j]);
}
}
d = determinant(a, n);
if (d == 0)
printf("Since the determinant is zerp (0), therefor inverse is not possible.");
else
cofactor(a, n);
}
// function for the calculation of determinant
float determinant(float a[25][25], float k)
{
float s = 1, det = 0, b[25][25];
int i, j, m, n, c;
if (k == 1)
{
return (a[0][0]);
}
else
{
det = 0;
for (c = 0; c < k; c++)
{
m = 0;
n = 0;
for (i = 0;i < k; i++)
{
for (j = 0 ;j < k; j++)
{
b[i][j] = 0;
if (i != 0 && j != c)
{
b[m][n] = a[i][j];
if (n < (k - 2))
n++;
else
{
n = 0;
m++;
}
}
}
}
det = det + s * (a[0][c] * determinant(b, k - 1));
s = -1 * s;
}
}
return (det);
}
// function for cofactor calculation
void cofactor(float num[25][25], float f)
{
float b[25][25], fac[25][25];
int p, q, m, n, i, j;
for (q = 0;q < f; q++)
{
for (p = 0;p < f; p++)
{
m = 0;
n = 0;
for (i = 0;i < f; i++)
{
for (j = 0;j < f; j++)
{
if (i != q && j != p)
{
b[m][n] = num[i][j];
if (n < (f - 2))
n++;
else
{
n = 0;
m++;
}
}
}
}
fac[q][p] = pow(-1, q + p) * determinant(b, f - 1);
}
}
transpose(num, fac, f);
}
///function to find the transpose of a matrix
void transpose(float num[25][25], float fac[25][25], float r)
{
int i, j;
float b[25][25], inverse[25][25], d;
for (i = 0;i < r; i++)
{
for (j = 0;j < r; j++)
{
b[i][j] = fac[j][i];
}
}
d = determinant(num, r);
for (i = 0;i < r; i++)
{
for (j = 0;j < r; j++)
{
inverse[i][j] = b[i][j] / d;
}
}
printf("\nThe inverse of matrix: \n");
for (i = 0;i < r; i++)
{
for (j = 0;j < r; j++)
{
printf("\t%f", inverse[i][j]);
}
printf("\n");
}
}
Output:
