1)改进欧拉法求解常微分方程的初值问题
#include <stdio.h>
float func(float x,float y)
{ return(y-x);
}
float euler(float x0,float xn,float y0,int N)
{ float x,y,yp,yc,h;
int i;
x=x0;
y=y0;
h=(xn-x0)/(float)N;
for(i=1;i<=N;i++)
{ yp=y+h*func(x,y);
x=x0+i*h;
yc=y+h*func(x,yp);
y=(yp+yc)/2.0;
}
return(y);
}
main()
{ float x0,xn,y0,e;
int n;
printf("input n: ");
scanf("%d",&n);
printf("input x0,xn: ");
scanf("%f,%f",&x0,&xn);
printf("input y0: ");
scanf("%f",&y0);
e=euler(x0,xn,y0,n);
printf("y(%f)=%6.4f",y0,e);
}
input n:
20
input x0,xn:
1,6
input y0:
2
y(2.000000)=7.0000Press any key to continue