您好,欢迎访问三七文档
龙格—库塔法解常微分方程实验报告一、实验题目求解初值问题1)0()10(2'yxyxyy二、实验引言1、实验目的进一步理解龙格—库塔方法的设计思路和算法流程,培养动手实践能力和分析能力。2、实验意义龙格—库塔方法的推导基于泰勒展开方法,因而它要求的解具有较好的光滑性质。反之,如果解得光滑性差,那么,使用四阶龙格—库塔法方法求得的数值解,其精度可能反而不如梯形方法。实际计算中,应当针对问题的具体特点选择合适的算法。三、算法设计1.基本思想由Lagrange微分中值定理,11()()'()()()(,())nnnnnyxyxyxxyxhfy记*(,())khfy,则得到*1()()nnyxyxk这样,给出*k的一种算法,就得到求解微分方程初值问题的一种计算公式。四阶龙格_库塔法是用1k,2k,3k和4k的加权平均值来近似*k。最经典的四阶龙格—库塔公式为:121324311234(,)(,)22(,)22(,)y(22)2nnnnnnnnnnKfxyhhKfxyKhhKfxyKKfxhyhKhyKKKK四阶龙格—库塔法的误差估计局部截断误差为5()Oh。2.算法流程图计算N=fix((b-x0)/h)n=1x0+h=x1f(x0,y0)=K1f(x0+h/2,y0+h/2*K1)=K2f(x0+h/2,y0+h/2*K2)=K3f(x0+h,y0+h*K3)=K4y0+h/6*(K1+2*K2+2*K3+K4)=y1输出x1,y1n=n+1x1=x0y1=y0n=N?结束开始读入x0,y0,b,h四、程序设计programlonggekutaimplicitnonereal,parameter::b=1real::h=0.2integer::nreal::x,K1,K2,K3,K4,yreal,external::fx=0y=1open(unit=10,file='1.txt')dowhile(x=b)K1=f(x,y)K2=f(x+h/2,y+K1*h/2)K3=f(x+h/2,y+K2*h/2)K4=F(x+h,y+K3*h)y=y+(k1+2*K2+2*K3+K4)*h/6x=x+hwrite(10,*)x,yenddoendfunctionf(x,y)implicitnonereal::f,x,yf=y-2*x/yendfunction五、结果及讨论1.实验结果0.20000001.1832290.40000001.3416670.60000001.4832810.80000001.6125141.0000001.7321421.2000001.844040六、算法评价1、本次实验实现了常微分方程初值问题数值解法中的四阶龙格—库塔法2、对欧拉法和龙格—库塔法进行比较:在相同步长的情况下,欧拉法每步只计算一个函数值,四阶龙格—库塔法每步需计算四个函数值,就是说,四阶龙格—库塔法的计算量差不多是欧拉法的四倍,为了比较它们的计算精度,可以将欧拉法的步长取为h,将四阶龙格—库塔法的步长取为4h。这样,如果用二种方法求解同一初值问题,则它们的计算量相当。在计算量相当的条件下,比较它们的计算结果,就能够看出它们的精度差异。3、比较了其数值解与精确解之间的误差。可以发现四阶龙格—库塔法都非常接近精确解。附:向前欧拉法程序programxiangqianoulaimplicitnonereal,parameter::a=0,b=1integer,parameter::k=10real::h=0.1,y0=1integer::nreal::x,yy=y0open(unit=10,file='1.txt')don=0,k-1x=a+n*hy=y+h*(y-2*x/y)write(10,*)x+h,yenddoend运行结果:0.10000001.1000000.20000001.1918180.30000001.2774380.40000001.3582130.50000001.4351330.60000001.5089660.70000001.5803380.80000001.6497840.90000001.7177801.00000001.784771
本文标题:龙格—库塔实验报告
链接地址:https://www.777doc.com/doc-5598922 .html