改进欧拉(c语言程序)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1)改进欧拉法求解常微分方程的初值问题

#include

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("\ninput n:\n ");

scanf("%d",&n);

printf("input x0,xn:\n ");

scanf("%f,%f",&x0,&xn);

printf("input y0:\n ");

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

(2)四阶龙格—库塔法

#include

float func(float x,float y)

{ return(x-y);

}

float runge_kutta(float x0,float xn,float y0,int N) { float x,y,y1,y2,h,xh;

float d1,d2,d3,d4;

int i;

x=x0;

y=y0;

h=(xn-x0)/(float)N;

for(i=1;i<=N;i++)

{ xh=x+h/2;

d1=func(x,y);

d2=func(xh,y+h*d1/2.0);

d3=func(xh,y+h*d2/2.0);

d4=func(xh,y+h*d3);

y=y+h*(d1+2*d2+2*d3+d4)/6.0;

x=x0+i*h; }

return(y);

}

main()

{ float x0,xn,y0,e;

int N;

printf("\ninput n:\n ");

scanf("%d",&N);

printf("input x0,xn:\n ");

scanf("%f,%f",&x0,&xn);

printf("input y0:\n ");

scanf("%f",&y0);

e=runge_kutta(x0,xn,y0,N);

printf("y(%f)=%8.6f",y0,e);

}

input n:

10

input x0,xn:

1,2

input y0:

5

y(5.000000)=2.833863Press any key to continue

相关文档
最新文档