#include <stdio.h>
#include <math.h>
int Didai(g,x,eps,N)
double (*g)();
double *x,eps;
int N;
{
int i=0;
double x1,x2=*x;
x1=x2-(x2*x2*x2-3*x2*x2-x2+9)/(3*x2*x2-6*x2-1);
while (1)
{
*x=g(x1,x2);
if (fabs((*x)*(*x)*(*x)-3*(*x)*(*x)-(*x)+9)<eps) return 1;
if (++i>=N) return 0;
x2=x1;
x1=*x;
}
}
double f1(double x1,double x2)
{
return(x1-(x1*x1*x1-3*x1*x1-x1+9)*(x1-x2)/((x1*x1*x1-3*x1*x1-x1+9)-(x2*x2*x2-3*x2*x2-x2+9)));
}
main()
{
double x=-1.5;
if(Didai(f1,&x,1e-5,1000))
printf("root4=%f\n",x);
}
转载于:https://blog.51cto.com/lucky/19401