#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4
// Function to print a 4x4 matrix
void printMatrix(float matrix[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%10.4f ", matrix
[i
][j
]); }
}
}
int main() {
// 1. Initialize data
float A_GE[N][N + 1] = {
{3.0, 1.5, -6.0, 4.8, 1.2},
{1.0, 1.5, -2.0, -2.4, 0.6},
{0.0, -1.5, -2.0, -1.0, -2.4},
{2.0, 4.0, -1.8, -0.6, 0.0}
};
float A_GJ[N][N + 1] = {
{3.0, 1.5, -6.0, 4.8, 1.2},
{1.0, 1.5, -2.0, -2.4, 0.6},
{0.0, -1.5, -2.0, -1.0, -2.4},
{2.0, 4.0, -1.8, -0.6, 0.0}
};
float A_Original[N][N] = {
{3.0, 1.5, -6.0, 4.8},
{1.0, 1.5, -2.0, -2.4},
{0.0, -1.5, -2.0, -1.0},
{2.0, 4.0, -1.8, -0.6}
};
float x[N];
float ratio, sum;
// ==========================================
// 2. Gaussian Elimination
// ==========================================
for (int i = 0; i < N - 1; i++) {
for (int j = i + 1; j < N; j++) {
ratio = A_GE[j][i] / A_GE[i][i];
for (int k = 0; k < N + 1; k++) {
A_GE[j][k] -= ratio * A_GE[i][k];
}
}
}
// Back-Substitution
x[N - 1] = A_GE[N - 1][N] / A_GE[N - 1][N - 1];
for (int i = N - 2; i >= 0; i--) {
sum = 0;
for (int j = i + 1; j < N; j++) {
sum += A_GE[i][j] * x[j];
}
x[i] = (A_GE[i][N] - sum) / A_GE[i][i];
}
printf("--- 1. Gaussian Elimination Results ---\n"); for (int i = 0; i < N; i++) {
printf("x%d = %10.4f\n", i
+ 1, x
[i
]); }
// ==========================================
// 3. Gauss-Jordan Method
// ==========================================
for (int i = 0; i < N; i++) {
float pivot = A_GJ[i][i];
for (int j = 0; j < N + 1; j++) {
A_GJ[i][j] /= pivot;
}
for (int k = 0; k < N; k++) {
if (k != i) {
float factor = A_GJ[k][i];
for (int j = 0; j < N + 1; j++) {
A_GJ[k][j] -= factor * A_GJ[i][j];
}
}
}
}
// Output Gauss-Jordan Results
printf("--- 2. Gauss-Jordan Method Results ---\n"); for (int i = 0; i < N; i++) {
printf("x%d = %10.4f\n", i
+ 1, A_GJ
[i
][N
]); }
// ==========================================
// 4. Inverting Matrix A (using Gauss-Jordan)
// ==========================================
float A_Inv[N][N] = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
// Initialize identity operations in a copy of matrix A
float A_Temp[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
A_Temp[i][j] = A_Original[i][j];
}
}
for (int i = 0; i < N; i++) {
float pivot = A_Temp[i][i];
for (int j = 0; j < N; j++) {
A_Temp[i][j] /= pivot;
A_Inv[i][j] /= pivot;
}
for (int k = 0; k < N; k++) {
if (k != i) {
float factor = A_Temp[k][i];
for (int j = 0; j < N; j++) {
A_Temp[k][j] -= factor * A_Temp[i][j];
A_Inv[k][j] -= factor * A_Inv[i][j];
}
}
}
}
printf("--- 3. Calculated Inverse Matrix (A^-1) ---\n"); printMatrix(A_Inv);
// ==========================================
// 5. Verification (A * A^-1)
// ==========================================
float Identity_Check[N][N] = {0};
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
Identity_Check[i][j] += A_Original[i][k] * A_Inv[k][j];
}
}
}
printf("--- 4. Verification (A * A^-1) ---\n"); printMatrix(Identity_Check);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KCiNkZWZpbmUgTiA0CgovLyBGdW5jdGlvbiB0byBwcmludCBhIDR4NCBtYXRyaXgKdm9pZCBwcmludE1hdHJpeChmbG9hdCBtYXRyaXhbTl1bTl0pIHsKZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKcHJpbnRmKCIlMTAuNGYgIiwgbWF0cml4W2ldW2pdKTsKfQpwcmludGYoIlxuIik7Cn0KcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbigpIHsKLy8gMS4gSW5pdGlhbGl6ZSBkYXRhCmZsb2F0IEFfR0VbTl1bTiArIDFdID0gewp7My4wLCAxLjUsIC02LjAsIDQuOCwgMS4yfSwKezEuMCwgMS41LCAtMi4wLCAtMi40LCAwLjZ9LAp7MC4wLCAtMS41LCAtMi4wLCAtMS4wLCAtMi40fSwKezIuMCwgNC4wLCAtMS44LCAtMC42LCAwLjB9Cn07CgpmbG9hdCBBX0dKW05dW04gKyAxXSA9IHsKezMuMCwgMS41LCAtNi4wLCA0LjgsIDEuMn0sCnsxLjAsIDEuNSwgLTIuMCwgLTIuNCwgMC42fSwKezAuMCwgLTEuNSwgLTIuMCwgLTEuMCwgLTIuNH0sCnsyLjAsIDQuMCwgLTEuOCwgLTAuNiwgMC4wfQp9OwoKZmxvYXQgQV9PcmlnaW5hbFtOXVtOXSA9IHsKezMuMCwgMS41LCAtNi4wLCA0Ljh9LAp7MS4wLCAxLjUsIC0yLjAsIC0yLjR9LAp7MC4wLCAtMS41LCAtMi4wLCAtMS4wfSwKezIuMCwgNC4wLCAtMS44LCAtMC42fQp9OwoKZmxvYXQgeFtOXTsKZmxvYXQgcmF0aW8sIHN1bTsKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyAyLiBHYXVzc2lhbiBFbGltaW5hdGlvbgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZm9yIChpbnQgaSA9IDA7IGkgPCBOIC0gMTsgaSsrKSB7CmZvciAoaW50IGogPSBpICsgMTsgaiA8IE47IGorKykgewpyYXRpbyA9IEFfR0Vbal1baV0gLyBBX0dFW2ldW2ldOwpmb3IgKGludCBrID0gMDsgayA8IE4gKyAxOyBrKyspIHsKQV9HRVtqXVtrXSAtPSByYXRpbyAqIEFfR0VbaV1ba107Cn0KfQp9CgovLyBCYWNrLVN1YnN0aXR1dGlvbgp4W04gLSAxXSA9IEFfR0VbTiAtIDFdW05dIC8gQV9HRVtOIC0gMV1bTiAtIDFdOwpmb3IgKGludCBpID0gTiAtIDI7IGkgPj0gMDsgaS0tKSB7CnN1bSA9IDA7CmZvciAoaW50IGogPSBpICsgMTsgaiA8IE47IGorKykgewpzdW0gKz0gQV9HRVtpXVtqXSAqIHhbal07Cn0KeFtpXSA9IChBX0dFW2ldW05dIC0gc3VtKSAvIEFfR0VbaV1baV07Cn0KCnByaW50ZigiLS0tIDEuIEdhdXNzaWFuIEVsaW1pbmF0aW9uIFJlc3VsdHMgLS0tXG4iKTsKZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKcHJpbnRmKCJ4JWQgPSAlMTAuNGZcbiIsIGkgKyAxLCB4W2ldKTsKfQpwcmludGYoIlxuIik7CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gMy4gR2F1c3MtSm9yZGFuIE1ldGhvZAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKZmxvYXQgcGl2b3QgPSBBX0dKW2ldW2ldOwpmb3IgKGludCBqID0gMDsgaiA8IE4gKyAxOyBqKyspIHsKQV9HSltpXVtqXSAvPSBwaXZvdDsKfQoKZm9yIChpbnQgayA9IDA7IGsgPCBOOyBrKyspIHsKaWYgKGsgIT0gaSkgewpmbG9hdCBmYWN0b3IgPSBBX0dKW2tdW2ldOwpmb3IgKGludCBqID0gMDsgaiA8IE4gKyAxOyBqKyspIHsKQV9HSltrXVtqXSAtPSBmYWN0b3IgKiBBX0dKW2ldW2pdOwp9Cn0KfQp9CgovLyBPdXRwdXQgR2F1c3MtSm9yZGFuIFJlc3VsdHMKcHJpbnRmKCItLS0gMi4gR2F1c3MtSm9yZGFuIE1ldGhvZCBSZXN1bHRzIC0tLVxuIik7CmZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CnByaW50ZigieCVkID0gJTEwLjRmXG4iLCBpICsgMSwgQV9HSltpXVtOXSk7Cn0KcHJpbnRmKCJcbiIpOwoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIDQuIEludmVydGluZyBNYXRyaXggQSAodXNpbmcgR2F1c3MtSm9yZGFuKQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZmxvYXQgQV9JbnZbTl1bTl0gPSB7CnsxLCAwLCAwLCAwfSwKezAsIDEsIDAsIDB9LAp7MCwgMCwgMSwgMH0sCnswLCAwLCAwLCAxfQp9OwovLyBJbml0aWFsaXplIGlkZW50aXR5IG9wZXJhdGlvbnMgaW4gYSBjb3B5IG9mIG1hdHJpeCBBCmZsb2F0IEFfVGVtcFtOXVtOXTsKZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKQV9UZW1wW2ldW2pdID0gQV9PcmlnaW5hbFtpXVtqXTsKfQp9Cgpmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewpmbG9hdCBwaXZvdCA9IEFfVGVtcFtpXVtpXTsKZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKQV9UZW1wW2ldW2pdIC89IHBpdm90OwpBX0ludltpXVtqXSAvPSBwaXZvdDsKfQpmb3IgKGludCBrID0gMDsgayA8IE47IGsrKykgewppZiAoayAhPSBpKSB7CmZsb2F0IGZhY3RvciA9IEFfVGVtcFtrXVtpXTsKZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKQV9UZW1wW2tdW2pdIC09IGZhY3RvciAqIEFfVGVtcFtpXVtqXTsKQV9JbnZba11bal0gLT0gZmFjdG9yICogQV9JbnZbaV1bal07Cn0KfQp9Cn0KCnByaW50ZigiLS0tIDMuIENhbGN1bGF0ZWQgSW52ZXJzZSBNYXRyaXggKEFeLTEpIC0tLVxuIik7CnByaW50TWF0cml4KEFfSW52KTsKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyA1LiBWZXJpZmljYXRpb24gKEEgKiBBXi0xKQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZmxvYXQgSWRlbnRpdHlfQ2hlY2tbTl1bTl0gPSB7MH07CmZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CmZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKSB7CmZvciAoaW50IGsgPSAwOyBrIDwgTjsgaysrKSB7CklkZW50aXR5X0NoZWNrW2ldW2pdICs9IEFfT3JpZ2luYWxbaV1ba10gKiBBX0ludltrXVtqXTsKfQp9Cn0KCnByaW50ZigiLS0tIDQuIFZlcmlmaWNhdGlvbiAoQSAqIEFeLTEpIC0tLVxuIik7CnByaW50TWF0cml4KElkZW50aXR5X0NoZWNrKTsKCnJldHVybiAwOwp9Cg==