#include <iostream> //id=240242103
#include <cmath>
#include <iomanip>
using namespace std;
// Horner's rule to evaluate f(x)
double horner(double coeff[], int n, double x) {
double result = coeff[n];
for (int i = n - 1; i >= 0; i--)
result = result * x + coeff[i];
return result;
}
int main() {
int degree;
cout << "Enter the degree of the polynomial: ";
cin >> degree;
double coeff[degree + 1];
for (int i = 0; i <= degree; i++) {
cout << "x^" << i << "::";
cin >> coeff[i];
}
double x1, x2, tol;
cout << "Enter first initial guess x1: ";
cin >> x1;
cout << "Enter second initial guess x2: ";
cin >> x2;
cout << "Enter tolerance: ";
cin >> tol;
double f1 = horner(coeff, degree, x1);
double f2 = horner(coeff, degree, x2);
double x3, f3;
int iter = 0;
cout << fixed << setprecision(6);
cout << "Iteration x1 x2 x3 f(x3)\n";
cout << "--------------------------------------------\n";
do {
x3 = (f2 * x1 - f1 * x2) / (f2 - f1); // Secant formula
f3 = horner(coeff, degree, x3);
iter++;
cout << iter << "\t" << x1 << "\t" << x2 << "\t" << x3 << "\t" << f3 << endl;
// Update for next iteration
x1 = x2;
f1 = f2;
x2 = x3;
f2 = f3;
} while (fabs(f3) > tol); // Stop when residual < tolerance
cout << "--------------------------------------------\n";
cout << "Approximate root = " << x3 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgICAgICAvL2lkPTI0MDI0MjEwMwojaW5jbHVkZSA8Y21hdGg+IAojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEhvcm5lcidzIHJ1bGUgdG8gZXZhbHVhdGUgZih4KQpkb3VibGUgaG9ybmVyKGRvdWJsZSBjb2VmZltdLCBpbnQgbiwgZG91YmxlIHgpIHsKICAgIGRvdWJsZSByZXN1bHQgPSBjb2VmZltuXTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogeCArIGNvZWZmW2ldOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgZGVncmVlOwogICAgY291dCA8PCAiRW50ZXIgdGhlIGRlZ3JlZSBvZiB0aGUgcG9seW5vbWlhbDogIjsKICAgIGNpbiA+PiBkZWdyZWU7CgogICAgZG91YmxlIGNvZWZmW2RlZ3JlZSArIDFdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gZGVncmVlOyBpKyspIHsKICAgICAgICBjb3V0IDw8ICJ4XiIgPDwgaSA8PCAiOjoiOwogICAgICAgIGNpbiA+PiBjb2VmZltpXTsKICAgIH0KCiAgICBkb3VibGUgeDEsIHgyLCB0b2w7CiAgICBjb3V0IDw8ICJFbnRlciBmaXJzdCBpbml0aWFsIGd1ZXNzIHgxOiAiOwogICAgY2luID4+IHgxOwogICAgY291dCA8PCAiRW50ZXIgc2Vjb25kIGluaXRpYWwgZ3Vlc3MgeDI6ICI7CiAgICBjaW4gPj4geDI7CiAgICBjb3V0IDw8ICJFbnRlciB0b2xlcmFuY2U6ICI7CiAgICBjaW4gPj4gdG9sOwoKICAgIGRvdWJsZSBmMSA9IGhvcm5lcihjb2VmZiwgZGVncmVlLCB4MSk7CiAgICBkb3VibGUgZjIgPSBob3JuZXIoY29lZmYsIGRlZ3JlZSwgeDIpOwogICAgZG91YmxlIHgzLCBmMzsKICAgIGludCBpdGVyID0gMDsKCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNvdXQgPDwgIkl0ZXJhdGlvbiAgeDEgICAgICAgIHgyICAgICAgICB4MyAgICAgICAgZih4MylcbiI7CiAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKCiAgICBkbyB7CiAgICAgICAgeDMgPSAoZjIgKiB4MSAtIGYxICogeDIpIC8gKGYyIC0gZjEpOyAvLyBTZWNhbnQgZm9ybXVsYQogICAgICAgIGYzID0gaG9ybmVyKGNvZWZmLCBkZWdyZWUsIHgzKTsKCiAgICAgICAgaXRlcisrOwogICAgICAgIGNvdXQgPDwgaXRlciA8PCAiXHQiIDw8IHgxIDw8ICJcdCIgPDwgeDIgPDwgIlx0IiA8PCB4MyA8PCAiXHQiIDw8IGYzIDw8IGVuZGw7CgogICAgICAgIC8vIFVwZGF0ZSBmb3IgbmV4dCBpdGVyYXRpb24KICAgICAgICB4MSA9IHgyOwogICAgICAgIGYxID0gZjI7CiAgICAgICAgeDIgPSB4MzsKICAgICAgICBmMiA9IGYzOwoKICAgIH0gd2hpbGUgKGZhYnMoZjMpID4gdG9sKTsgLy8gU3RvcCB3aGVuIHJlc2lkdWFsIDwgdG9sZXJhbmNlCgogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICBjb3V0IDw8ICJBcHByb3hpbWF0ZSByb290ID0gIiA8PCB4MyA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==