精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 编程世界>>其他>>Re: 解方程

主题:Re: 解方程
发信人: chdw()
整理人: jinhu(1999-06-30 20:26:25), 站内信件
【 在 boho (boho) 的大作中提到: 】
: 用牛顿迭代法,求方程2x^3-4x^2+3x-6=0在1.5附近的根。谢谢! 

  #include <stdio.h>
  #include "math.h"
  #define fadhrtf(x) .....
  #define A 1.0
  #define B 1.5
  #define EPS .0001
  void fadhrt(a,b,h,eps,x,m)
  int m[2];
  double a,b,h,eps,x[];
  { int n,js;
    double z,y,z1,y1,z0,y0;
    n=0; z=a; y=fadhrtf(z);
    while ((z<=b+h/2.0)&&(n!=m[0]))
{ if (fabs(y)<eps)
{ n=n+1; x[n-1]=z;
z=z+h/2.0; y=fadhrtf(z);
}
else
{ z1=z+h; y1=fadhrtf(z1);
if (fabs(y1)<eps)
{ n=n+1; x[n-1]=z1;
z=z1+h/2.0; y=fadhrtf(z);
}
else if (y*y1>0.0)
              { y=y1; z=z1;}
            else
              { js=0;
                while (js==0)
                  { if (fabs(z1-z)<eps)
{ n=n+1; x[n-1]=(z1+z)/2.0;
z=z1+h/2.0; y=fadhrtf(z);
js=1;
}
else
{ z0=(z1+z)/2.0; y0=fadhrtf(z0);
if (fabs(y0)<eps)
{ x[n]=z0; n=n+1; js=1;
z=z0+h/2.0; y=fadhrtf(z);
}
else if ((y*y0)<0.0)
{ z1=z0; y1=y0;}
else { z=z0; y=y0;}
}
}
}
}
}
m[1]=n;
return;
}
main()
{ int i;
static int m[2]={6,0};
static double x[6];
fadhrt(A,B,(B-A)/2,EPS,x,m);
printf("M=%d\n",m[1]);
for (i=0; i<=m[1]-1; i++)
printf("x(%d)=%lf\n",i,x[i]);
printf("\n");
}

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.189.19]

[关闭][返回]