#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
// Define the function f(x) = cos(x) - x
double f(double x) {
return cos(x) - x;
}
int main() {
double x1, x2, x0, f1, f2, f0, E;
int iteration = 1;
cout << fixed << setprecision(6);
// Input initial guesses and tolerance
cout << "Enter the value of x1: ";
cin >> x1;
cout << "Enter the value of x2: ";
cin >> x2;
cout << "Enter the stopping criterion E: ";
cin >> E;
f1 = f(x1);
f2 = f(x2);
// Check if initial guesses bracket the root
if (f1 * f2 > 0) {
cout << "The initial guesses do not bracket the root. Please choose different values." << endl;
return 1;
}
cout << "\nIteration\tx1\t\tx2\t\tx0\t\tf(x0)\t\tf(x1)\t\tf(x2)" << endl;
do {
// Compute x0 using Regula Falsi formula
x0 = x1 - (f1 * (x2 - x1)) / (f2 - f1);
f0 = f(x0);
// Output current iteration values
cout << iteration << "\t\t" << x1 << "\t" << x2 << "\t" << x0 << "\t" << f0 << "\t" << f1 << "\t" << f2 << endl;
// Check if exact root is found
if (f0 == 0.0) {
cout << "\nExact root found: " << x0 << endl;
break;
}
// Update the interval
if (f1 * f0 < 0) {
x2 = x0;
f2 = f0;
} else {
x1 = x0;
f1 = f0;
}
// Check if the current approximation is within the desired tolerance
if (fabs((x2 - x1) / x2) < E) {
double root = (x1 + x2) / 2;
cout << "\nApproximate root found: " << root << endl;
break;
}
iteration++;
} while (true);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIERlZmluZSB0aGUgZnVuY3Rpb24gZih4KSA9IGNvcyh4KSAtIHgKZG91YmxlIGYoZG91YmxlIHgpIHsKICAgIHJldHVybiBjb3MoeCkgLSB4Owp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB4MSwgeDIsIHgwLCBmMSwgZjIsIGYwLCBFOwogICAgaW50IGl0ZXJhdGlvbiA9IDE7CgogICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oNik7CgogICAgLy8gSW5wdXQgaW5pdGlhbCBndWVzc2VzIGFuZCB0b2xlcmFuY2UKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiB4MTogIjsKICAgIGNpbiA+PiB4MTsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiB4MjogIjsKICAgIGNpbiA+PiB4MjsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSBzdG9wcGluZyBjcml0ZXJpb24gRTogIjsKICAgIGNpbiA+PiBFOwoKICAgIGYxID0gZih4MSk7CiAgICBmMiA9IGYoeDIpOwoKICAgIC8vIENoZWNrIGlmIGluaXRpYWwgZ3Vlc3NlcyBicmFja2V0IHRoZSByb290CiAgICBpZiAoZjEgKiBmMiA+IDApIHsKICAgICAgICBjb3V0IDw8ICJUaGUgaW5pdGlhbCBndWVzc2VzIGRvIG5vdCBicmFja2V0IHRoZSByb290LiBQbGVhc2UgY2hvb3NlIGRpZmZlcmVudCB2YWx1ZXMuIiA8PCBlbmRsOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGNvdXQgPDwgIlxuSXRlcmF0aW9uXHR4MVx0XHR4Mlx0XHR4MFx0XHRmKHgwKVx0XHRmKHgxKVx0XHRmKHgyKSIgPDwgZW5kbDsKCiAgICBkbyB7CiAgICAgICAgLy8gQ29tcHV0ZSB4MCB1c2luZyBSZWd1bGEgRmFsc2kgZm9ybXVsYQogICAgICAgIHgwID0geDEgLSAoZjEgKiAoeDIgLSB4MSkpIC8gKGYyIC0gZjEpOwogICAgICAgIGYwID0gZih4MCk7CgogICAgICAgIC8vIE91dHB1dCBjdXJyZW50IGl0ZXJhdGlvbiB2YWx1ZXMKICAgICAgICBjb3V0IDw8IGl0ZXJhdGlvbiA8PCAiXHRcdCIgPDwgeDEgPDwgIlx0IiA8PCB4MiA8PCAiXHQiIDw8IHgwIDw8ICJcdCIgPDwgZjAgPDwgIlx0IiA8PCBmMSA8PCAiXHQiIDw8IGYyIDw8IGVuZGw7CgogICAgICAgIC8vIENoZWNrIGlmIGV4YWN0IHJvb3QgaXMgZm91bmQKICAgICAgICBpZiAoZjAgPT0gMC4wKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIlxuRXhhY3Qgcm9vdCBmb3VuZDogIiA8PCB4MCA8PCBlbmRsOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgaW50ZXJ2YWwKICAgICAgICBpZiAoZjEgKiBmMCA8IDApIHsKICAgICAgICAgICAgeDIgPSB4MDsKICAgICAgICAgICAgZjIgPSBmMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB4MSA9IHgwOwogICAgICAgICAgICBmMSA9IGYwOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgYXBwcm94aW1hdGlvbiBpcyB3aXRoaW4gdGhlIGRlc2lyZWQgdG9sZXJhbmNlCiAgICAgICAgaWYgKGZhYnMoKHgyIC0geDEpIC8geDIpIDwgRSkgewogICAgICAgICAgICBkb3VibGUgcm9vdCA9ICh4MSArIHgyKSAvIDI7CiAgICAgICAgICAgIGNvdXQgPDwgIlxuQXBwcm94aW1hdGUgcm9vdCBmb3VuZDogIiA8PCByb290IDw8IGVuZGw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaXRlcmF0aW9uKys7CiAgICB9IHdoaWxlICh0cnVlKTsKCiAgICByZXR1cm4gMDsKfQo=