cllc1985 发表于 2007-12-24 14:46

求助牛顿下山法解方程的根

x3-x-1=0 x0=0.6 精确到小数点后8位   哪位高人给个程序 谢谢啦

assist 发表于 2008-1-1 17:37

找 数值计算方法(VC++版)里面有现成的代码

yelv123 发表于 2008-1-1 21:01

原帖由 cllc1985 于 2007-12-24 14:46 发表 http://www.chinavib.com/forum/images/common/back.gif
x3-x-1=0 x0=0.6 精确到小数点后8位   哪位高人给个程序 谢谢啦
这个是牛顿迭代的程序,自己再改一点就行了..
牛顿法求ln(x+sinx)=0的根



#include "stdio.h"
#include "math.h"
int newt(x,eps,js,f)
int js;
double *x,eps;
void (*f)();
{ int k,l;
    double y,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.0==1.0)
          { printf("err\n"); return(-1);}
      x1=x0-y/y;   /*迭代计算x1=x0-f(x0)/f'(x0)*/
      (*f)(x1,y);   /*计算 f(x1)与f'(x1)*/
      d=fabs(x1-x0); p=fabs(y);
      if (p>d) d=p;
      x0=x1; l=l-1;
      }
    *x=x1;
    k=js-l;
    return(k);
}



主函数::
参数说明:
x
双精度实型变量指针。在该指针指向的变量中存放迭代初值;返回时在该指针指向的变量中存放终值。
eps
双精度实型变量。控制精度要求。
js

整型变量。最大迭代次数
f

无类型函数指针变量。指向计算方程左端函数 f(x)值及其导数值f'(x )的函数。
该函数由用户自编,其形式为

void f(x,y)


double x,y;


{ y=f(x)的表达式;


y=f'(x)的表达式;



return;}

本函数返回一个整型标志值。若返回的标志值小于0,则表示在出现了 的情况,函数中将输出信息“err”;若返回的标志值等于最大迭代次数,则表示还未满足精度要求,此时返回的实根终值只作为参考;若返回的标志值大于或等于0且小于最大迭代次数,则表示正常返回。
#include "math.h"
#include "stdio.h"
#include "dnewt.c"
main()
{ int js,k;
    double x,eps;
    eps=0.000001; js=60;
    x=0.15;/*迭代初值*/
    k=dnewt(&x,eps,js);
    if (k>=0)
      printf("k=%dx=%13.7e\n",k,x);
    printf("\n");
}

void newtf(x,y)
double x,y;
{ y=log(x+sin(x));
    y=(1+cos(x))/(x+sin(x));
    return;
}

风花雪月 发表于 2008-1-3 09:00

其实这些问题自己稍微花点时间就能找到

dgl0611 发表于 2009-1-1 20:33

计算方法很多,随便一本数值分析的书上就有源程序
页: [1]
查看完整版本: 求助牛顿下山法解方程的根