龙格—库塔法解常微分方程实验报告
一、实验题目
?y'?y?2yx(0?x?1)??求解初值问题
??y(0)?1二、实验引言
1、实验目的
进一步理解龙格—库塔方法的设计思路和算法流程,培养动手实践能力和分析能力。 2、实验意义
龙格—库塔方法的推导基于泰勒展开方法,因而它要求的解具有较好的光滑性质。反之,如果解得光滑性差,那么,使用四阶龙格—库塔法方法求得的数值解,其精度可能反而不如梯形方法。实际计算中,应当针对问题的具体特点选择合适的算法。
三、算法设计
1. 基本思想
由Lagrange微分中值定理,
y(xn?1)?y(xn)?y'(?)(xn?1?xn)?y(xn)?hf(?,y(?))
记k?hf(?,y(?)),则得到
*y(xn?1)?y(xn)?k*
这样,给出k*的一种算法,就得到求解微分方程初值问题的一种计算公式。
四阶龙格_库塔法是用k1,k2,k3和k4的加权平均值来近似k*。最经典的四阶龙格—库塔公式为:
?K1?f(xn,yn)??K2?f(xn?h,yn?hK1)22??hh?K?f(x?,y?K2) ?3nn22??K4?f(xn?h,yn?hK3)??yn?1?yn?h(K1?2K2?2K3?K4)?2?四阶龙格—库塔法的误差估计局部截断误差为O(h5)。
2.算法流程图
开始 读入x0,y0,b,h 计算N=fix((b-x0)/h) n=1 x0+h=>x1 f(x0,y0)=>K1 f(x0+h/2,y0+h/2*K1)=>K2 f(x0+h/2,y0+h/2*K2)=>K3 f(x0+h,y0+h*K3)=>K4 y0+h/6*(K1+2*K2+2*K3+K4)=>y1 输出x1,y1 n=n+1 x1=>x0 y1=>y0 n=N ? 结束
四、程序设计
program longgekuta implicit none
real,parameter::b=1 real::h=0.2 integer::n
real::x,K1,K2,K3,K4,y real,external::f x=0 y=1
open (unit=10,file='1.txt') do while(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/6
x=x+h
write(10,*) x,y end do end
function f(x,y) implicit none real::f,x,y f=y-2*x/y end function
五、结果及讨论
1.实验结果
1.183229
0.4000000 1.341667 0.6000000 1.483281 0.8000000 1.612514 1.000000 1.732142 1.200000 1.844040
0.2000000
六、算法评价
1、本次实验实现了常微分方程初值问题数值解法中的四阶龙格—库塔法 2、对欧拉法和龙格—库塔法进行比较:在相同步长的情况下,欧拉法每步只计算一个函数值,四阶龙格—库塔法每步需计算四个函数值,就是说,四阶龙格—库塔法的计算量差不多是欧拉法的四倍,为了比较它们的计算精度,可以将欧拉法的步长取为h,将四阶龙格—库塔法的步长取为4h。这样,如果用二种方法求解同一初值问题,则它们的计算量相当。在计算量相当的条件下,比较它们的计算结果,就能够看出它们的精度差异。
3、比较了其数值解与精确解之间的误差。可以发现四阶龙格—库塔法都非常接近精确解。
附:
向前欧拉法程序
program xiangqianoula implicit none
real,parameter::a=0,b=1 integer,parameter::k=10 real::h=0.1,y0=1 integer::n real::x,y y=y0
open (unit=10,file='1.txt') do n=0,k-1 x=a+n*h y=y+h*(y-2*x/y) write(10,*) x+h,y
end do end
运行结果:
0.1000000 1.100000 0.2000000 1.191818 0.3000000 1.277438 0.4000000 1.358213 0.5000000 1.435133 0.6000000 1.508966 0.7000000 1.580338 0.8000000 1.649784 0.9000000 1.717780 1.0000000 1.784771
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库龙格—库塔实验报告在线全文阅读。
相关推荐: