#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
void gauss_elimination(int n, vector<vector<double>>& A) {
cout << setprecision(6) << fixed;
cout << "--- Gauss Elimination Method ---" << endl;
cout << "Order of Square Matrix: " << n << endl;
for (int k = 0; k < n; ++k) {
int pivot = k;
for (int i = k + 1; i < n; ++i) {
if (abs(A[i][k]) > abs(A[pivot][k])) {
pivot = i;
}
}
if (pivot != k) {
swap(A[k], A[pivot]);
}
if (abs(A[k][k]) < 1e-9) {
cout << "Error: Near-zero pivot detected. Cannot solve." << endl;
return;
}
for (int i = k + 1; i < n; ++i) {
double factor = A[i][k] / A[k][k];
for (int j = k; j < n + 1; ++j) {
A[i][j] -= factor * A[k][j];
}
}
}
cout << "\n--- Upper Triangular Matrix ---" << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n + 1; ++j) {
cout << setw(10) << A[i][j] << " ";
}
cout << endl;
}
cout << string(65, '-') << endl;
vector<double> x(n);
for (int i = n - 1; i >= 0; --i) {
double sum = 0.0;
for (int j = i + 1; j < n; ++j) {
sum += A[i][j] * x[j];
}
x[i] = (A[i][n] - sum) / A[i][i];
}
cout << "\nOutput:" << endl;
cout << "The solution is:" << endl;
for (int i = 0; i < n; ++i) {
cout << "x" << i + 1 << " = " << x[i] << endl;
}
}
int main() {
int n = 3;
vector<vector<double>> A = {
{3.0, 6.0, -9.0, 15.0},
{2.0, 4.0, -6.0, 10.0},
{-2.0, -3.0, 4.0, -6.0}
};
gauss_elimination(n, A);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZ2F1c3NfZWxpbWluYXRpb24oaW50IG4sIHZlY3Rvcjx2ZWN0b3I8ZG91YmxlPj4mIEEpIHsKICAgIAogICAgY291dCA8PCBzZXRwcmVjaXNpb24oNikgPDwgZml4ZWQ7CgogICAgY291dCA8PCAiLS0tIEdhdXNzIEVsaW1pbmF0aW9uIE1ldGhvZCAtLS0iIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJPcmRlciBvZiBTcXVhcmUgTWF0cml4OiAiIDw8IG4gPDwgZW5kbDsKICAgIAogICAgCiAgICBmb3IgKGludCBrID0gMDsgayA8IG47ICsraykgewogICAgICAgIGludCBwaXZvdCA9IGs7CiAgICAgICAgZm9yIChpbnQgaSA9IGsgKyAxOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIGlmIChhYnMoQVtpXVtrXSkgPiBhYnMoQVtwaXZvdF1ba10pKSB7CiAgICAgICAgICAgICAgICBwaXZvdCA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBpdm90ICE9IGspIHsKICAgICAgICAgICAgc3dhcChBW2tdLCBBW3Bpdm90XSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYWJzKEFba11ba10pIDwgMWUtOSkgewogICAgICAgICAgICBjb3V0IDw8ICJFcnJvcjogTmVhci16ZXJvIHBpdm90IGRldGVjdGVkLiBDYW5ub3Qgc29sdmUuIiA8PCBlbmRsOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gayArIDE7IGkgPCBuOyArK2kpIHsKICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IEFbaV1ba10gLyBBW2tdW2tdOwogICAgICAgICAgICBmb3IgKGludCBqID0gazsgaiA8IG4gKyAxOyArK2opIHsKICAgICAgICAgICAgICAgIEFbaV1bal0gLT0gZmFjdG9yICogQVtrXVtqXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAKICAgIGNvdXQgPDwgIlxuLS0tIFVwcGVyIFRyaWFuZ3VsYXIgTWF0cml4IC0tLSIgPDwgZW5kbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuICsgMTsgKytqKSB7CiAgICAgICAgICAgIGNvdXQgPDwgc2V0dygxMCkgPDwgQVtpXVtqXSA8PCAiICI7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KICAgIGNvdXQgPDwgc3RyaW5nKDY1LCAnLScpIDw8IGVuZGw7CgoKICAgIHZlY3Rvcjxkb3VibGU+IHgobik7CiAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgZG91YmxlIHN1bSA9IDAuMDsKICAgICAgICBmb3IgKGludCBqID0gaSArIDE7IGogPCBuOyArK2opIHsKICAgICAgICAgICAgc3VtICs9IEFbaV1bal0gKiB4W2pdOwogICAgICAgIH0KICAgICAgICB4W2ldID0gKEFbaV1bbl0gLSBzdW0pIC8gQVtpXVtpXTsKICAgIH0KCiAgICAKICAgIGNvdXQgPDwgIlxuT3V0cHV0OiIgPDwgZW5kbDsKICAgIGNvdXQgPDwgIlRoZSBzb2x1dGlvbiBpczoiIDw8IGVuZGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGNvdXQgPDwgIngiIDw8IGkgKyAxIDw8ICIgPSAiIDw8IHhbaV0gPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiA9IDM7IAogICAgdmVjdG9yPHZlY3Rvcjxkb3VibGU+PiBBID0gewogICAgICAgIHszLjAsIDYuMCwgLTkuMCwgMTUuMH0sCiAgICAgICAgezIuMCwgNC4wLCAtNi4wLCAxMC4wfSwKICAgICAgICB7LTIuMCwgLTMuMCwgNC4wLCAtNi4wfQogICAgfTsKCiAgICBnYXVzc19lbGltaW5hdGlvbihuLCBBKTsKCiAgICByZXR1cm4gMDsKfQ==