|
原帖由 cllc1985 于 2007-12-24 14:46 发表
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[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]; /*迭代计算 x1=x0-f(x0)/f'(x0)*/
- (*f)(x1,y); /*计算 f(x1)与f'(x1)*/
- 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);
- }
复制代码
主函数::
参数说明:
x
双精度实型变量指针。在该指针指向的变量中存放迭代初值;返回时在该指针指向的变量中存放终值。
eps
双精度实型变量。控制精度要求。
js
整型变量。最大迭代次数
f
无类型函数指针变量。指向计算方程左端函数 f(x)值及其导数值f'(x )的函数。
该函数由用户自编,其形式为
void f(x,y)
double x,y[2];
{ y[0]=f(x)的表达式;
y[1]=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=%d x=%13.7e\n",k,x);
- printf("\n");
- }
-
- void newtf(x,y)
- double x,y[2];
- { y[0]=log(x+sin(x));
- y[1]=(1+cos(x))/(x+sin(x));
- return;
- }
复制代码
|
评分
-
1
查看全部评分
-
|