C Program to Find Inverse of a Matrix

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:

matrix inverse formula

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:

Inverse of a matrix in C