using System;
using
System;
using System.Collections.Generic;
System.Collections.Generic;
class GFG
class
GFG
{
static readonly int N = 4;
static
readonly
int
N = 4;
static void getCofactor(int [,]A, int [,]temp, int p, int q, int n)
void
getCofactor(
[,]A,
[,]temp,
p,
q,
n)
int i = 0, j = 0;
i = 0, j = 0;
for (int row = 0; row < n; row++)
for
(
row = 0; row < n; row++)
for (int col = 0; col < n; col++)
col = 0; col < n; col++)
if (row != p && col != q)
if
(row != p && col != q)
temp[i, j++] = A[row, col];
if (j == n - 1)
(j == n - 1)
j = 0;
i++;
}
static int determinant(int [,]A, int n)
determinant(
int D = 0;
D = 0;
if (n == 1)
(n == 1)
return A[0, 0];
return
A[0, 0];
int [,]temp = new int[N, N];
[,]temp =
new
[N, N];
int sign = 1;
sign = 1;
for (int f = 0; f < n; f++)
f = 0; f < n; f++)
getCofactor(A, temp, 0, f, n);
D += sign * A[0, f] * determinant(temp, n - 1);
sign = -sign;
return D;
D;
static void adjoint(int [,]A, int [,]adj)
adjoint(
[,]adj)
if (N == 1)
(N == 1)
adj[0, 0] = 1;
return;
;
for (int i = 0; i < N; i++)
i = 0; i < N; i++)
for (int j = 0; j < N; j++)
j = 0; j < N; j++)
getCofactor(A, temp, i, j, N);
sign = ((i + j) % 2 == 0)? 1: -1;
adj[j, i] = (sign) * (determinant(temp, N - 1));
static bool inverse(int [,]A, float [,]inverse)
bool
inverse(
float
[,]inverse)
int det = determinant(A, N);
det = determinant(A, N);
if (det == 0)
(det == 0)
Console.Write("Singular matrix, can't find its inverse");
Console.Write(
"Singular matrix, can't find its inverse"
);
return false;
false
int [,]adj = new int[N, N];
[,]adj =
adjoint(A, adj);
inverse[i, j] = adj[i, j]/(float)det;
inverse[i, j] = adj[i, j]/(
)det;
return true;
true
static void display(int [,]A)
display(
[,]A)
Console.Write(A[i, j]+ " ");
Console.Write(A[i, j]+
" "
Console.WriteLine();
static void display(float [,]A)
Console.Write("{0:F6} ", A[i, j]);
"{0:F6} "
, A[i, j]);
public static void Main(String[] args)
public
Main(String[] args)
int [,]A = { {5, -2, 2, 7},
[,]A = { {5, -2, 2, 7},
{1, 0, 0, 3},
{-3, 1, 5, 0},
{3, -1, -9, 4}};
float [,]inv = new float[N, N];
[,]inv =
Console.Write("Input matrix is :\n");
"Input matrix is :\n"
display(A);
Console.Write("\nThe Adjoint is :\n");
"\nThe Adjoint is :\n"
display(adj);
Console.Write("\nThe Inverse is :\n");
"\nThe Inverse is :\n"
if (inverse(A, inv))
(inverse(A, inv))
display(inv);