求助牛顿下山法解方程的根
x3-x-1=0 x0=0.6 精确到小数点后8位 哪位高人给个程序 谢谢啦 找 数值计算方法(VC++版)里面有现成的代码 原帖由 cllc1985 于 2007-12-24 14:46 发表 http://www.chinavib.com/forum/images/common/back.gifx3-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;
}
其实这些问题自己稍微花点时间就能找到 计算方法很多,随便一本数值分析的书上就有源程序
页:
[1]