#include <iostream>
#include <cmath>
using namespace std;
// Define the function whose root we want to find
double f( double x) {
return x * x * x + x * x - 1 ; // Example: f(x) = x^3 + x^2 - 1
}
int main( ) {
double x1, x2, x0, f1, f2, f0, E;
int maxIter, iteration = 1 ;
// Input initial guesses and tolerance
cout << "Enter the value of x1: " ;
cin >> x1;
cout << "Enter the value of x2: " ;
cin >> x2;
cout << "Enter desired tolerance (E): " ;
cin >> E;
cout << "Enter maximum number of iterations: " ;
cin >> maxIter;
f1 = f( x1) ;
f2 = f( x2) ;
// Check if initial guesses bracket a root
if ( f1 * f2 > 0 ) {
cout << "Incorrect initial guesses. They do not bracket a root.\n " ;
return 1 ;
}
cout << "Iteration\t x1\t \t x2\t \t x0\t \t f(x0)\n " ;
cout << "--------------------------------------------------------------\n " ;
do {
x0 = ( x1 + x2) / 2 ;
f0 = f( x0) ;
cout << iteration << "\t \t " << x1 << "\t " << x2 << "\t " << x0 << "\t " << f0 << endl;
if ( f1 * f0 < 0 ) {
x2 = x0;
f2 = f0;
} else {
x1 = x0;
f1 = f0;
}
iteration++ ;
if ( fabs ( ( x2 - x1) / x2) < E) break ;
} while ( iteration <= maxIter) ;
cout << "\n Approximate root = " << ( x1 + x2) / 2 << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBEZWZpbmUgdGhlIGZ1bmN0aW9uIHdob3NlIHJvb3Qgd2Ugd2FudCB0byBmaW5kCmRvdWJsZSBmKGRvdWJsZSB4KSB7CiAgICByZXR1cm4geCAqIHggKiB4ICsgeCAqIHggLSAxOyAgLy8gRXhhbXBsZTogZih4KSA9IHheMyArIHheMiAtIDEKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgeDEsIHgyLCB4MCwgZjEsIGYyLCBmMCwgRTsKICAgIGludCBtYXhJdGVyLCBpdGVyYXRpb24gPSAxOwoKICAgIC8vIElucHV0IGluaXRpYWwgZ3Vlc3NlcyBhbmQgdG9sZXJhbmNlCiAgICBjb3V0IDw8ICJFbnRlciB0aGUgdmFsdWUgb2YgeDE6ICI7CiAgICBjaW4gPj4geDE7CiAgICBjb3V0IDw8ICJFbnRlciB0aGUgdmFsdWUgb2YgeDI6ICI7CiAgICBjaW4gPj4geDI7CiAgICBjb3V0IDw8ICJFbnRlciBkZXNpcmVkIHRvbGVyYW5jZSAoRSk6ICI7CiAgICBjaW4gPj4gRTsKICAgIGNvdXQgPDwgIkVudGVyIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnM6ICI7CiAgICBjaW4gPj4gbWF4SXRlcjsKCiAgICBmMSA9IGYoeDEpOwogICAgZjIgPSBmKHgyKTsKCiAgICAvLyBDaGVjayBpZiBpbml0aWFsIGd1ZXNzZXMgYnJhY2tldCBhIHJvb3QKICAgIGlmIChmMSAqIGYyID4gMCkgewogICAgICAgIGNvdXQgPDwgIkluY29ycmVjdCBpbml0aWFsIGd1ZXNzZXMuIFRoZXkgZG8gbm90IGJyYWNrZXQgYSByb290LlxuIjsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBjb3V0IDw8ICJJdGVyYXRpb25cdHgxXHRcdHgyXHRcdHgwXHRcdGYoeDApXG4iOwogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CgogICAgZG8gewogICAgICAgIHgwID0gKHgxICsgeDIpIC8gMjsKICAgICAgICBmMCA9IGYoeDApOwoKICAgICAgICBjb3V0IDw8IGl0ZXJhdGlvbiA8PCAiXHRcdCIgPDwgeDEgPDwgIlx0IiA8PCB4MiA8PCAiXHQiIDw8IHgwIDw8ICJcdCIgPDwgZjAgPDwgZW5kbDsKCiAgICAgICAgaWYgKGYxICogZjAgPCAwKSB7CiAgICAgICAgICAgIHgyID0geDA7CiAgICAgICAgICAgIGYyID0gZjA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeDEgPSB4MDsKICAgICAgICAgICAgZjEgPSBmMDsKICAgICAgICB9CgogICAgICAgIGl0ZXJhdGlvbisrOwoKICAgICAgICBpZiAoZmFicygoeDIgLSB4MSkgLyB4MikgPCBFKSBicmVhazsKCiAgICB9IHdoaWxlIChpdGVyYXRpb24gPD0gbWF4SXRlcik7CgogICAgY291dCA8PCAiXG5BcHByb3hpbWF0ZSByb290ID0gIiA8PCAoeDEgKyB4MikgLyAyIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K