#include <bits/stdc++.h>
using namespace std;
double f(double co[], int n, double x)
{
double result = co[0];
for (int i = 1; i <= n; i++)
result = result * x + co[i];
return result;
}
double df(double co[], int n, double x)
{
double result = co[0] * (n);
for (int i = 1; i < n; i++)
result = result * x + co[i] * (n - i);
return result;
}
int main() {
int n;
double co[20];
double x0, x1, fx, dfx, E, error;
int iteration = 1, maxIter = 20;
cout << "ENTER THE TOTAL NO. OF POWER::: ";
cin >> n;
cout << endl;
for (int i = 0; i <= n; i++) {
cout << "x^" << i << " :: ";
cin >> co[i];
}
cout << "\nTHE POLYNOMIAL IS ::: ";
for (int i = n; i >= 0; i--) {
cout << co[n - i] << "x^" << i << " ";
}
cout << endl;
cout << "\nEnter initial guess x0: ";
cin >> x0;
cout << "Enter tolerance (e.g. 0.0001): ";
cin >> E;
cout << "\n***********************************************";
cout << "\nIteration\t x\t\t f(x)\t\t f'(x)\t\t Error\t\t %Error";
cout << "\n***********************************************\n";
do {
fx = f(co, n, x0);
dfx = df(co, n, x0);
if (dfx == 0) {
cout << "Division by zero!.\n";
return 0;
}
x1 = x0 - fx / dfx;
error = fabs((x1 - x0) / x1);
cout << fixed << setprecision(6);
cout << setw(5) << iteration << "\t"
<< setw(10) << x1 << "\t"
<< setw(10) << fx << "\t"
<< setw(10) << dfx << "\t"
<< setw(10) << error << "\t"
<< setw(10) << error * 100 << endl;
if (error < E)
break;
x0 = x1;
iteration++;
} while (iteration <= maxIter);
cout << "\n***********************************************";
cout << "\nTHE ROOT OF EQUATION IS " << x1 << endl;
cout << "***********************************************\n";
return 0;
}