#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
//jacobi
// Functions to calculate next iteration values
inline double f1(double x, double y, double z) { return (17 - y + 2 * z) / 20; }
inline double f2(double x, double y, double z) { return (-18 - 3 * x + z) / 20; }
inline double f3(double x, double y, double z) { return (25 - 2 * x + 3 * y) / 20; }
bool hasConverged(double e1, double e2, double e3, double tolerance) {
return (e1 <= tolerance && e2 <= tolerance && e3 <= tolerance);
}
int main() {
double x = 0, y = 0, z = 0, newX, newY, newZ, tol;
int step = 1;
cout << "Enter tolerable error: ";
cin >> tol;
cout << fixed << setprecision(6);
cout << "\nIteration\tx\t\ty\t\tz" << endl;
do {
newX = f1(x, y, z);
newY = f2(x, y, z);
newZ = f3(x, y, z);
cout << step++ << "\t" << newX << "\t" << newY << "\t" << newZ << endl;
double e1 = fabs(newX - x);
double e2 = fabs(newY - y);
double e3 = fabs(newZ - z);
x = newX;
y = newY;
z = newZ;
if (hasConverged(e1, e2, e3, tol)) {
break;
}
} while (true);
cout << "\nSolution: x = " << x << ", y = " << y << ", z = " << z << endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGlvbWFuaXA+CiNpbmNsdWRlPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovL2phY29iaQovLyBGdW5jdGlvbnMgdG8gY2FsY3VsYXRlIG5leHQgaXRlcmF0aW9uIHZhbHVlcwppbmxpbmUgZG91YmxlIGYxKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgcmV0dXJuICgxNyAtIHkgKyAyICogeikgLyAyMDsgfQppbmxpbmUgZG91YmxlIGYyKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgcmV0dXJuICgtMTggLSAzICogeCArIHopIC8gMjA7IH0KaW5saW5lIGRvdWJsZSBmMyhkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHJldHVybiAoMjUgLSAyICogeCArIDMgKiB5KSAvIDIwOyB9Cgpib29sIGhhc0NvbnZlcmdlZChkb3VibGUgZTEsIGRvdWJsZSBlMiwgZG91YmxlIGUzLCBkb3VibGUgdG9sZXJhbmNlKSB7CiAgICByZXR1cm4gKGUxIDw9IHRvbGVyYW5jZSAmJiBlMiA8PSB0b2xlcmFuY2UgJiYgZTMgPD0gdG9sZXJhbmNlKTsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgeCA9IDAsIHkgPSAwLCB6ID0gMCwgbmV3WCwgbmV3WSwgbmV3WiwgdG9sOwogICAgaW50IHN0ZXAgPSAxOwoKICAgIGNvdXQgPDwgIkVudGVyIHRvbGVyYWJsZSBlcnJvcjogIjsKICAgIGNpbiA+PiB0b2w7CiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNvdXQgPDwgIlxuSXRlcmF0aW9uXHR4XHRcdHlcdFx0eiIgPDwgZW5kbDsKCiAgICBkbyB7CiAgICAgICAgbmV3WCA9IGYxKHgsIHksIHopOwogICAgICAgIG5ld1kgPSBmMih4LCB5LCB6KTsKICAgICAgICBuZXdaID0gZjMoeCwgeSwgeik7CgogICAgICAgIGNvdXQgPDwgc3RlcCsrIDw8ICJcdCIgPDwgbmV3WCA8PCAiXHQiIDw8IG5ld1kgPDwgIlx0IiA8PCBuZXdaIDw8IGVuZGw7CgogICAgICAgIGRvdWJsZSBlMSA9IGZhYnMobmV3WCAtIHgpOwogICAgICAgIGRvdWJsZSBlMiA9IGZhYnMobmV3WSAtIHkpOwogICAgICAgIGRvdWJsZSBlMyA9IGZhYnMobmV3WiAtIHopOwoKICAgICAgICB4ID0gbmV3WDsKICAgICAgICB5ID0gbmV3WTsKICAgICAgICB6ID0gbmV3WjsKCiAgICAgICAgaWYgKGhhc0NvbnZlcmdlZChlMSwgZTIsIGUzLCB0b2wpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0gd2hpbGUgKHRydWUpOwoKICAgIGNvdXQgPDwgIlxuU29sdXRpb246IHggPSAiIDw8IHggPDwgIiwgeSA9ICIgPDwgeSA8PCAiLCB6ID0gIiA8PCB6IDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQ==