课题10.常微分方程初值问题的数值方法.docVIP

  • 3
  • 0
  • 约4.01千字
  • 约 11页
  • 2019-01-01 发布于天津
  • 举报

课题10.常微分方程初值问题的数值方法.doc

课题10.常微分方程初值问题的数值方法

PAGE PAGE 1 课题10. 常微分方程初值问题的数值方法 一.问题提出 (1)利用欧拉方法和改进的欧拉方法求解初值问题: dy/dx=4*x/y-x*y; y(0)=3; 其中0x=2 二.问题算法、c语言编程和上机运算结果 1.欧拉法 算法: 输入微分方程f(x,y); 输入积分部数n; 输入初值x0,y0; 输入步长h; 利用k1=f(xn,yn) y(n+1)=yn+k1*h; n=0,1,2…… 采取不断循环计算; 输出x1,x2,……xn. 程序: /*微分方程 */ float f(x,y) float x,y; { float z; z=4*x/y-x*y; return(z); } /* 欧拉法 */ float EULAR(f) float (*f)(); { int i,n; float x0,y0,x,y,k1,h; printf(\n请输入积分步数n:); scanf(%d,n); printf(\n请输入初值x(0) y(0):); scanf(%f%f,x0,y0); printf(\n请输入步长h:); scanf(%f,h); printf(\n x y); printf(\n %f %f,x0,y0); for(i=1;i=n;i++) { x=x0+h; k1=(*f)(x0,y0); y=y0+h*k1; printf(\n %f %f,x,y); x0=x; y0=y; } } main() { EULAR(f); } 结果: (1)h=0.1时 (2)h=0.2时 (3)h=0.4时 2.改进的欧拉法 算法: 输入微分方程f(x,y); 输入积分部数n; 输入初值x0,y0; 输入步长h; 利用k1=f(xn,yn) k2=f(xn+h,yn+h*k1) y(n+1)=yn+(k1+k2)/2; n=0,1,2…… 采取不断循环计算; 输出x1,x2,……xn. 程序: /*微分方程 */ float f(x,y) float x,y; { float z; z=y-2.0*x/y; return(z); } /* 改进欧拉法 */ float EULAR(f) float (*f)(); { int i,n; float x0,y0,x,y,k1,k2,h; printf(\n请输入积分步数n:); scanf(%d,n); printf(\n请输入初值x(0) y(0):); scanf(%f%f,x0,y0); printf(\n请输入步长h:); scanf(%f,h); printf(\n x y); printf(\n %f %f,x0,y0); for(i=1;i=n;i++) { x=x0+h; k1=(*f)(x0,y0); k2=(*f)(x,y0+h*k1); y=y0+h*(k1+k2)/2.0; printf(\n %f %f,x,y); x0=x; y0=y; } } main() { EULAR(f); } 结果: (1)当h=0.1时 (2)当h=0.2时 (3)当h=0.4时 三.结果分析讨论 1.对比欧拉法,改进的欧拉法和精确解的结果可知,改进的欧拉法所得到结果的精度比欧拉法的大,这是因为改进的欧拉法融入了属于隐式公式的梯形公式,它的计算数值解的精度要比欧拉公式好。 2.从结果分析可以发现,无论是欧拉法还是改进的欧拉法,当步长h取得越小时,所得到的解的精度越大,因此减小步长h可以提高精度。 3.利用欧拉法和改进的欧拉法求解常微分方程初值问题是可行的。 附:(国庆放假时编的程序)课题4 迭代格式的比较 王佳琪 学号092071 一.各迭代函数编程及初步分析 1. x=(3*x+1)/(x*x) c语言编程为: #includemath.h main() { float x0=1.0,x1; int i; x1=(3*x0+1)/(x0*x0); printf(%1.5f ,x1); for(i=1;i=50fabs(x1-x0)1.0E-5;i++) { x0=x1; x1=(3*x0+1)/(x0*x0); printf(%1.5f ,x1); } printf(\nyi dai times: %d,i

文档评论(0)

1亿VIP精品文档

相关文档