用牛顿迭代法求解非线性方程

#include <stdio.h>
#include <math.h>
int Didai(g,x,eps,N)
   double (*g)();
   double *x,eps;
   int N;
{
   int i=0;
   double x0=*x;
   while (1)
   {
      *x=g(x0);
      if (fabs(*x-x0)<eps) return 1;
      if (++i>=N) return 0;
      x0=*x;
   }
}
 
double f1(double x)
{ return sqrt(10/(4+x)); }
 
double f2(double x)
{ return sqrt(10-x*x*x)/2; }
 
double f3(double x)
{ return x-(x*x*x+4*x*x-10)/(3*x*x+8*x); }
 
main()
{
   double x=1.5,y=1.5,z=1.5;
   if(Didai(f1,&x,1e-5,1000))
      printf("root1=%f\n",x);
   if(Didai(f2,&y,1e-5,1000))
      printf("root2=%f\n",y);
   if(Didai(f3,&z,1e-5,1000))
      printf("root3=%f\n",z);
}

你可能感兴趣的:(职场,休闲,非线性方程)