From 3927c57904ed249b70984b108f9c24a496061f9d Mon Sep 17 00:00:00 2001 From: karthikvijay5227 <77284874+karthikvijay5227@users.noreply.github.com> Date: Fri, 29 Oct 2021 16:43:33 +0530 Subject: [PATCH] Create MatrixInverse.c --- C-Random/MatrixInverse.c | 132 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 C-Random/MatrixInverse.c diff --git a/C-Random/MatrixInverse.c b/C-Random/MatrixInverse.c new file mode 100644 index 0000000..3f782e4 --- /dev/null +++ b/C-Random/MatrixInverse.c @@ -0,0 +1,132 @@ +#include +#include +float determinant(float [][25], float); +void cofactor(float [][25], float); +void transpose(float [][25], float [][25], float); +int main() +{ + float a[25][25], k, d; + int i, j; + printf("Enter the order of the Matrix : "); + scanf("%f", &k); + printf("Enter the elements of %.0fX%.0f Matrix : \n", k, k); + for (i = 0;i < k; i++) + { + for (j = 0;j < k; j++) + { + scanf("%f", &a[i][j]); + } + } + d = determinant(a, k); + if (d == 0) + printf("\nInverse of Entered Matrix is not possible\n"); + else + cofactor(a, k); +} + +/*For calculating Determinant of the Matrix */ +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); +} + +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); +} +/*Finding transpose of 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("\n\n\nThe inverse of matrix is : \n"); + + for (i = 0;i < r; i++) + { + for (j = 0;j < r; j++) + { + printf("\t%f", inverse[i][j]); + } + printf("\n"); + } +}