#include <stdio.h>
#include <math.h>
#define IMAX 50
double func(double x);
double dfunc(double x);
/*================================================================*/
/* main function */
/*================================================================*/
main(){
double eps=1e-15; /* precision of calculation */
double x[IMAX+10];
char temp;
int i=-1;
printf("\ninitial value x0 = ");
scanf("%lf%c", &x[0], &temp);
do{
i++;
x[i+1]=x[i]-func(x[i])/dfunc(x[i]);
printf(" %d\t%e\n", i, x[i+1]);
if(fabs((x[i+1]-x[i])/x[i])<eps) break;
}while(i<=IMAX);
if(i>=IMAX){
printf("\n not converged !!! \n\n");
}else{
printf("\niteration = %d solution x = %20.15f\n\n",i,x[i+1]);
}
}
/*================================================================*/
/* define function */
/*================================================================*/
double func(double x){
double y;
y=x*x*x-3*x*x+9*x-8;
return(y);
}
/*================================================================*/
/* define derived function */
/*================================================================*/
double dfunc(double x){
double dydx;
dydx=3*x*x-6*x+9;
return(dydx);
}