给定初值问题
y dy 2 x2ex,1 x 2, dx ,精确解为y x2(ex-e)按 x y(1) 0,
欧拉法,步长h 0.025,h 0.1;
求在节点xk 1 0.1k(k 1,2, ,10)和xk 1 0.025k(k 1,2, ,40)处的数值解及误差,并和精确值进行比较。
程序:
#include "stdio.h"
#include "math.h"
void main()
{
float y0,x,h,yn,y,err,x0;
int n=0;
printf ("请输入 x0,y0,h:");
scanf("%f,%f,%f",&x0,&y0,&h);
printf("h=%f\n",h);
yn=y0;
x=x0;
y=(x)*(x)*(exp(x)-exp(1));
err=fabs(y-yn);//求两者的误差
printf ("n=%d,yn=%f,y=%f,err=%f\n",n,yn,y,err);
for(x=1;x<=2;x=x+h)
{
yn=yn+h*(2*yn/x+x*x*exp(x));
n++;
y=(x+h)*(x+h)*(exp(x+h)-exp(1));
err=fabs(y-yn);//求两者的误差
printf ("n=%d,yn=%f,y=%f,err=%f\n",n,yn,y,err); }
}