计算方法中的一些程序2

作者在 2008-05-02 12:14:44 发布以下内容

例1  用牛顿迭代法求方程f(x)=x - e-x=0在区间(0,1)内的根,输出每次的迭代结果并统计所用的迭代次数,取ε=10-5,x0=0.5。
程序清单:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAXREPT 1000   /* 最大迭代次数 */

float f(float x)
{ return(x-exp(-x));     /* 函数f(x) */
}
float df(float x)       /*  导函数f’(x)  */
{ return(1+exp(-x));
}
float iterate (float x)   /* 牛顿迭代函数iterate(x)=x- f(x)/f’(x)  */
{ float x1;
x1=x-f(x)/df(x);    
return(x1);
}

main()
{ float x0,x1,eps,d; int k=0;

clrscr();
printf("\n please input x0,eps:");
scanf("%f,%f",&x0,&eps);          /* 键入迭代初值x0 ,求解精度eps */
printf("\n  k         Xk\n");
printf("  %d         %f\n",k,x0);
do
{k++;
x1=iterate(x0);
printf("  %d         %f\n",k,x1);
d=fabs(x1-x0);
x0=x1;
}
while((d>=eps)&(k<MAXREPT));
if(k<MAXREPT)
 printf("The root is x=%f,   k=%d\n",x1,k);
else
 printf("\n The iteration is failed ! \n");
getch();
}

计算结果:
please input x0,eps: 0.5, 1e-5
 k       Xk
 0       0.500000
 1       0.566311
 2       0.567143
 3       0.567143
The root is x=0.567143,  k=3

文章评论,共0条
游客请输入验证码