发信人: 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]
  | 
 
 
 |