#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
//siedel
// Functions to calculate next iteration values
inline double f1( double y, double z) { return ( 17 - y + 2 * z) / 20 ; }
inline double f2( double x, double z) { return ( - 18 - 3 * x + z) / 20 ; }
inline double f3( double x, double y) { 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 << "\n Iteration\t x\t \t y\t \t z" << endl;
do {
newX = f1( y, z) ;
newY = f2( newX, z) ;
newZ = f3( newX, newY) ;
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 << "\n Solution: x = " << x << ", y = " << y << ", z = " << z << endl;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGlvbWFuaXA+CiNpbmNsdWRlPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovL3NpZWRlbAovLyBGdW5jdGlvbnMgdG8gY2FsY3VsYXRlIG5leHQgaXRlcmF0aW9uIHZhbHVlcwppbmxpbmUgZG91YmxlIGYxKGRvdWJsZSB5LCBkb3VibGUgeikgeyByZXR1cm4gKDE3IC0geSArIDIgKiB6KSAvIDIwOyB9CmlubGluZSBkb3VibGUgZjIoZG91YmxlIHgsIGRvdWJsZSB6KSB7IHJldHVybiAoLTE4IC0gMyAqIHggKyB6KSAvIDIwOyB9CmlubGluZSBkb3VibGUgZjMoZG91YmxlIHgsIGRvdWJsZSB5KSB7IHJldHVybiAoMjUgLSAyICogeCArIDMgKiB5KSAvIDIwOyB9Cgpib29sIGhhc0NvbnZlcmdlZChkb3VibGUgZTEsIGRvdWJsZSBlMiwgZG91YmxlIGUzLCBkb3VibGUgdG9sZXJhbmNlKSB7CiAgICByZXR1cm4gKGUxIDw9IHRvbGVyYW5jZSAmJiBlMiA8PSB0b2xlcmFuY2UgJiYgZTMgPD0gdG9sZXJhbmNlKTsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgeCA9IDAsIHkgPSAwLCB6ID0gMCwgbmV3WCwgbmV3WSwgbmV3WiwgdG9sOwogICAgaW50IHN0ZXAgPSAxOwoKICAgIGNvdXQgPDwgIkVudGVyIHRvbGVyYWJsZSBlcnJvcjogIjsKICAgIGNpbiA+PiB0b2w7CiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNvdXQgPDwgIlxuSXRlcmF0aW9uXHR4XHRcdHlcdFx0eiIgPDwgZW5kbDsKCiAgICBkbyB7CiAgICAgICAgbmV3WCA9IGYxKHksIHopOwogICAgICAgIG5ld1kgPSBmMihuZXdYLCB6KTsKICAgICAgICBuZXdaID0gZjMobmV3WCwgbmV3WSk7CgogICAgICAgIGNvdXQgPDwgc3RlcCsrIDw8ICJcdCIgPDwgbmV3WCA8PCAiXHQiIDw8IG5ld1kgPDwgIlx0IiA8PCBuZXdaIDw8IGVuZGw7CgogICAgICAgIGRvdWJsZSBlMSA9IGZhYnMobmV3WCAtIHgpOwogICAgICAgIGRvdWJsZSBlMiA9IGZhYnMobmV3WSAtIHkpOwogICAgICAgIGRvdWJsZSBlMyA9IGZhYnMobmV3WiAtIHopOwoKICAgICAgICB4ID0gbmV3WDsKICAgICAgICB5ID0gbmV3WTsKICAgICAgICB6ID0gbmV3WjsKCiAgICAgICAgaWYgKGhhc0NvbnZlcmdlZChlMSwgZTIsIGUzLCB0b2wpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0gd2hpbGUgKHRydWUpOwoKICAgIGNvdXQgPDwgIlxuU29sdXRpb246IHggPSAiIDw8IHggPDwgIiwgeSA9ICIgPDwgeSA8PCAiLCB6ID0gIiA8PCB6IDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQ==