newt.c

来自「数值分析算法描述与习题解答」· C语言 代码 · 共 43 行

C
43
字号

  #include "stdio.h"
  #include "math.h"
  int newt(x,eps,js,f)
  int js;
  double *x,eps;
  void (*f)();
  { int k,l;
    double y[2],d,p,x0,x1;
    l=js; k=1; x0=*x;
    (*f)(x0,y);
    d=eps+1.0;
    while ((d>=eps)&&(l!=0))
      { if (fabs(y[1])+1.0==1.0)
          { printf("err\n"); return(-1);}
        x1=x0-y[0]/y[1];
        (*f)(x1,y);
        d=fabs(x1-x0); p=fabs(y[0]);
        if (p>d) d=p;
        x0=x1; l=l-1;
      }
    *x=x1;
    k=js-l;
    return(k);
  }
  void newtf(x,y)
  double x,y[2];
  { y[0]=x*x*(x-1.0)-1.0;
    y[1]=3.0*x*x-2.0*x;
    return;
  }
   main()
  { int js,k;
    double x,eps;
     
    eps=0.000001; js=60; x=1.5;
    k=newt(&x,eps,js,newtf);
    if (k>=0)
      printf("k=%d  x=%13.7e\n",k,x);
    printf("\n");
  }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?