logo资料库

欧拉法及改进的欧拉法求解方程.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
欧拉法及改进的欧拉法求解方程 #include #include void f1(double *y,double *x,double *yy) {int i; y[0]=2.0; x[0]=0.0; yy[0]=2.0; for( i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f2(double *y,double *x,double *yy) {int i; y[0]=1.0; x[0]=0.0;
yy[0]=1.0; for(i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f3(double *y,double *x,double *yy,double *y0) {int i; y[0]=2.0; x[0]=0.0; yy[0]=2.0; for( i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f4(double *y,double *x,double *yy,double *y0) {int i; y[0]=1.0; x[0]=0.0; yy[0]=1.0; for( i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); y[i]=y[i-1]+0.1*(2*y0[i-1]+x[i-1]*x[i-1]+2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n ",x[i],y[i],yy[i],y[i]-yy[i]); }
}; void main() { double y[10],x[10],yy[10],y0[10]; printf("\n常微分方程组是 y'=y-x and y(0)=2采用欧拉法求解得\n"); f1(y,x,yy); printf("\n常微分方程组是 y'=x*x+2y and y(0)=1采用欧拉法求解得\n"); f2(y,x,yy); printf("\n常微分方程组是 y'=y-x and y(0)=2采用欧拉改进法求解得 \n"); f1(y,x,yy); printf("\n常微分方程组是 y'=x*x+2y and y(0)=1采用欧拉改进法求解得 \n"); f1(y,x,yy); } #include #include double f(double y,double x) {int i; double k1,x,y, k2; y(0)=0.0; x(0)=0.0; for( i=1;i<=20;i++) { x(i)=x(i-1)+0.1; k1=y(i-1)+0.1*(9.8-y(i-1)* y(i-1)*0.27/70); k2=y(i-1)+0.1*(9.8-y0(i-1)* y0(i-1)*0.27/70); y(i)=(k1+k2)/2; printf("若x(i)=%f,计算值是 %f \n ",x(i),y(i)); } }; void main()
{ double y,x; printf("\n常微分方程组是 y'=9.8-y*y*o.27/70 and y(0)=0采用欧拉改进 法求解得\n"); f(y,x); }
分享到:
收藏