Euler 方法
#define MAXSIZE 50
4 double f(double x,double y);
6 void main(void) {
7 double a,b,h,x[MAXSIZE],y[MAXSIZE];
8 long i,n;
9 printf(”\n请输入求解区间a,b:”);
10 scanf(”%lf,%lf”,&a,&b);
11 printf(”\n请输入步长h:”);
12 scanf(”%lf”,&h);
13 n=(long)((b−a)/h);
14 x[0]=a;
16 printf(”\n请输入起点x[0]=%lf处的纵坐标y[0]:”,x[0]);
17 scanf(”%lf”,&y[0]);
18 for(i=0; i<n; i++) {
19 x[i+1]=x[i]+h;
20 y[i+1]=y[i]+h*f(x[i],y[i]);
21 }
23 printf(”\n计算结果为:”);
24
25 for(i=0; i<=n; i++)
26 printf(”\nx[%ld]=%lf,y[%ld]=%lf”,i,x[i],i,y[i]);
27 }
29 double f(double x,double y) {
30 return y − 2*x/y; /∗计算并返回函数值f(x,y)∗/
31 }
改进的 Euler 格式
#define N 10
6 void modEuler(float (*f1)(float,float),float x0,float y0,float xn,int n) {
7 int i;
8 float yp,yc,x=x0,y=y0,h=(xn−x0)/n;
9 // cout<<”x[0]=”<<x<<’\t’<<”y[0]”<<y<<endl;
10 for(i=1; i<=n; i++) {
11 yp=y+h*
f1(x,y);
12 x=x0+i*h;
13 yc=y+h*f1(x,yp);
14 y=(yp+yc)/2.0;
15 cout<<”x[”<<i<<”]=”<<x<<” y[”<<i<<”]=”<<y<<endl;
16 }
17 }
18 void main() {
20 float xn=0.0,x0=−1.0,y0=3.0;
21 float f1(float ,float);
22 modEuler(f1,x0,y0,xn,N);
23 }
24 float f1(float x,float y) {
25 return 3*x−2*y*y−12;
26 }