using
System;
public
class
GFG
{
static
void
PrintMatrix(
float
[][] ar,
int
n,
int
m)
{
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < m; j++) {
Console.Write(ar[i][j] +
" "
);
}
Console.WriteLine();
}
return
;
}
static
void
PrintInverse(
float
[][] ar,
int
n,
int
m)
{
for
(
int
i = 0; i < n; i++) {
for
(
int
j = n; j < m; j++) {
Console.Write(
"{0:F3} "
, ar[i][j]);
}
Console.WriteLine();
}
return
;
}
static
void
InverseOfMatrix(
float
[][] matrix,
int
order)
{
float
temp;
Console.WriteLine(
"=== Matrix ==="
);
PrintMatrix(matrix, order, order);
for
(
int
i = 0; i < order; i++) {
for
(
int
j = 0; j < 2 * order; j++) {
if
(j == (i + order))
matrix[i][j] = 1;
}
}
for
(
int
i = order - 1; i > 0; i--) {
if
(matrix[i - 1][0] < matrix[i][0]) {
float
[] tempArr = matrix[i];
matrix[i] = matrix[i - 1];
matrix[i - 1] = tempArr;
}
}
Console.WriteLine(
"\n=== Augmented Matrix ==="
);
PrintMatrix(matrix, order, order * 2);
for
(
int
i = 0; i < order; i++) {
for
(
int
j = 0; j < order; j++) {
if
(j != i) {
temp = matrix[j][i] / matrix[i][i];
for
(
int
k = 0; k < 2 * order; k++) {
matrix[j][k] -= matrix[i][k] * temp;
}
}
}
}
for
(
int
i = 0; i < order; i++) {
temp = matrix[i][i];
for
(
int
j = 0; j < 2 * order; j++) {
matrix[i][j] = matrix[i][j] / temp;
}
}
Console.WriteLine(
"\n=== Inverse Matrix ==="
);
PrintInverse(matrix, order, 2 * order);
return
;
}
public
static
void
Main()
{
int
order;
order = 3;
float
[][] matrix =
new
float
[20][];
for
(
int
i = 0; i < 20; i++) {
matrix[i] =
new
float
[20];
}
matrix[0][0] = 5;
matrix[0][1] = 7;
matrix[0][2] = 9;
matrix[1][0] = 4;
matrix[1][1] = 3;
matrix[1][2] = 8;
matrix[2][0] = 7;
matrix[2][1] = 5;
matrix[2][2] = 6;
InverseOfMatrix(matrix, order);
}
}