资源描述:
《实验四 常微分方程初值问题数值解法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数值分析实验实验指导书四理学院实验中心数学专业实验室编写实验四常微分方程初值问题数值解法【实验类型】验证性【实验学时】2【实验内容】科学计算中经常遇到微分方程(组)初值问题,需要利用Euler法,改进Euler法,Rung-Kutta方法求其数值解,诸如以下问题:分别取h=0.1,0.2,0.4时数值解。初值问题的精确解。【实验前的预备知识】1、熟悉各种初值问题的算法;2、明确各种算法的精度与所选步长有密切关系;3、通过计算更加了解各种算法的优越性。【实验方法或步骤】1、根据初值问题数值算法,编程计算;2、试分别取不同步长,考察某节点处数值解的误差变化情
2、况;3、试用不同算法求解某初值问题,结果有何异常;4、分析各个算法的优缺点。【Euler方法】#include#include/*y1=f(x,y)*/floatf(floatx,floaty){return(4*x/y-x*y);}voidEuler(floatx0,floatxn,floaty0,intn){inti;floatx=x0,y=y0,h=(xn-x0)/n;printf("x[0]=%fty[0]=%f",x,y);for(i=1;i<=n;i++){y=y+h*f(x,y);x=x0+i*h;p
3、rintf("x[%d]=%fty[%d]=%f",i,x,i,y);}}main(){inti,n;floatx0,xn,y0;printf("nInputthebeginandendofx:");scanf("%f%f",&x0,&xn);printf("Inputtheyvalueat%f:",x0);scanf("%f",&y0);do{printf("Inputnvalue[divide(%f,%f)]:",x0,xn);scanf("%d",&n);}while(n<=1);Euler(x0,xn,y0,n);scanf("%f",&y
4、n);}【Rung-Kutta方法】#include#include#definef(x,y)(y-2*x/y)intmain(){intm;inti;doublea,b,y0;doublexn,yn,yn1;doublek1,k2,k3,k4;doubleh;printf("Inputthebeginandendofx:");scanf("%lf%lf",&a,&b);printf("nInputtheyvalueat%f:",a);scanf("%lf",&y0);printf("nInputmvalue[div
5、ide(%f,%f)]:",a,b);scanf("%d",&m);if(m<=0){printf("Pleaseinputanumberlargerthan1.");return1;}h=(b-a)/m;xn=a;yn=y0;for(i=1;i<=m;i++){k1=f(xn,yn);k2=f((xn+h/2),(yn+h*k1/2));k3=f((xn+h/2),(yn+h*k2/2));k4=f((xn+h),(yn+h*k3));yn1=yn+h/6*(k1+2*k2+2*k3+k4);xn+=h;printf("x%d=%f,y%d=%f
6、n",i,xn,i,yn1);yn=yn1;}scanf("%lf",yn);}