牛顿下山法C语言实现,供大家用用

时间:2012-07-08 12:41:38
【文件属性】:

文件名称:牛顿下山法C语言实现,供大家用用

文件大小:1KB

文件格式:CPP

更新时间:2012-07-08 12:41:38

牛顿下山法C

//x:双精度实型变量指针,指向变量中存放迭代的初值,返回时在该指针只想爱你个的变量村存放终值 //eps:控制精度要求:eps1,eps2是精度要求;eps3是为了防止无休止地细分t而设的;eps4是为处理x0取得太差的情况而设置的,可适当取大点 //t:下山因子,,双精度实型变量 //js:最大迭代次数.不可取太大,防止初值跳跃次数太多 //f:无类型函数指针变量,指向计算方程左端函数f(x)值及其导数值f'(x) 的函数 //可由用户自编,其形式为: // double *f(double x) // { // double y[2]; // y[0]=f(x)的表达式; // y[1]=f'(x)的表达式; // return y; // } #include #include void NewtDownhill(double *x , double eps1 , double eps2 , double eps3 , double eps4 , int js, double (**f)()) { int n=1 , flag=1 ; double t=1.0 , x0=*x , x1 , y[2] , f0 , f1 ; (**f)(x0); //计算f(x0)和f'(x0) f0=y[0] ; x1=x0-t*(y[0]/y[1]) ; //迭代计算x1=x0-f(x0)/f'(x0) (**f)(x1); //计算x1在f的值和f'的值 f1=y[0]; while(n<=js&&flag==1) { if(fabs(x1-x0)eps3) { t=t/2.0 ; (**f)(x0); //计算f(x0)和f'(x0) f0=y[0] ; x1=x0-t*(y[0]/y[1]) ; //迭代计算x1=x0-f(x0)/f'(x0) (**f)(x1); //计算x1在f的值和f'的值 f1=y[0]; x0=x1+eps4; n++; } } if(n>js) printf("Method fail after js iterations"); }


网友评论

  • 用excel了,没用上
  • 还可以,正好需要,谢谢。