数值计算课程设计四阶RungeKutta方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南工业大学
课程设计
资料袋
理学院(系、部)2013 学年第 2 学期课程名称数值计算方法指导教师职称副教授
学生姓名专业班级信息与计算科学班学号学生姓名专业班级信息与计算科学1002班学号学生姓名专业班级信息与计算科学学号
题目四阶Runge-Kutta方法
成绩起止日期2013 年6 月24日~2013 年7月5日
目录清单
湖南工业大学
课程设计任务书
2012 —2013 学年第2 学期
理学院(系、部)信息与计算科学专业1002 班级
课程名称:数值计算方法
设计题目:四阶Runge-Kutta方法
完成期限:自2013 年 6 月24 日至2013 年7月 5 日共 2 周
指导教师(签字):年月日
系(教研室)主任(签字):年月日
数值计算方法
设计说明书
四阶Runge-Kutta方法
起止日期:2013 年6 月24 日至2013 年7月 5 日
学生姓名
班级信息与计算科学班
学号
成绩
指导教师(签字)
理学院(院、部)
2013年7月5日
目录
一、摘
要 (5)
二、问题重
述 (5)
三、方法原理及实
现 (5)
四、计算公式或算
法 (5)
五、Matlab程
序 (6)
六、测试数据及结
果 (6)
七、结果分
析 (10)
八、方法改进 (10)
九、心得体会 (10)
十、参考文
献 (10)
一、摘要
本课程设计主要内容是用四阶Runge-Kutta 方法解决常微分方程组初值问题的数值解法,通过分析给定题目使用Matlab 编写程序计算结果并绘图,最后对计算结果进行分析,得到结论。
二、问题重述
在计算机上实现用四阶Runge-Kutta 求一阶常微分方程初值问题
()()[]()⎩⎨⎧=∈=1
,,,,'y a y b a x y x f x y
的数值解,并利用最后绘制的图形直观分析近似解与准确解之间的比较。
三、方法原理及实现
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。
由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
该算法是构建在数学支持的基础之上的。
龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法。
如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法。
经典的R K -方法是一个四阶的方法,它的计算公式是:
1
12341213
243(22)6
(,)(,)
22(,)22
(,)
n n n n n n n n n n h y y K K K K K f x y h h K f x y K h h K f x y K K f x h y hK +⎧
=++++⎪⎪
=⎪⎪⎪
=++⎨⎪
⎪
=++⎪⎪=++⎪⎩ 四、计算公式或算法
1. 输入()y x f y n b a ,,,,,0(编写或调用计算()y x f ,的函数文件()y x F ,), 2. b -a h n
=
()
()00x y y = b x a x n ==,0
3.For n i :1=
()()
()()()
101111211111311112411312
,,,,i i i i i i i i i x x i h
h h K f x y K f x h y h K K f x h y h K K f x h y hK ---------=+-=
==++=++=++
()43211226
K K K K h
y y i i ++++=- End
4.输出.,21n y y y ⋅⋅⋅
五、Matlab 程序
x=[a:h:b]; y(1)=y1; n=(b-a)/h+1; for i=2:n
fk1=f(x(i-1),y(i-1));
fk2=f(x(i-1)+h/2,y(i-1)+fk1*h/2); fk3=f(x(i-1)+h/2,y(i-1)+fk2*h/2); fk4=f(x(i-1)+h,y(i-1)+fk3*h);
y(i)=y(i-1)+h*(fk1+2*fk2+2*fk3+fk4)/6; end
y
六、测试数据及结果
用调试好的程序解决如下问题:
应用经典的四阶Runge-Kutta方法解初值问题
2
1
(),13,
(1)2,
y y y t
t
y
⎧'
=+≤≤
⎪
⎨
⎪=-
⎩
取0.5
h=
(1)步骤一:编写函数具体程序.
1.求解解析解程序:
dsolve('Dy=(y^2+y)/t','y(1)=-2','t')
结果:
2.综合编写程序如下:
a=1;
b=3;
h=;
y(1)=-2;
x(1)=a;
n=(b-a)/h+1;
yy(1)=-2;
for i=2:n
k1=(y(i-1)^2+y(i-1))/x(i-1);
k2=((y(i-1)+h*k1/2)^2+(y(i-1)+h*k1/2))/(x(i-1)+h/2);
k3=((y(i-1)+h*k2/2)^2+(y(i-1)+h*k2/2))/(x(i-1)+h/2);
k4=((y(i-1)+h*k3)^2+(y(i-1)+h*k3))/(x(i-1)+h);
y(i)=y(i-1)+h*(k1+2*k2+2*k3+k4)/6;% 四阶Runge-Kutta公式解 x(i)=x(i-1)+h; %有解区间的值
yy(i)=-x(i)/(x(i)-1/2); %解析解
s(i)=abs(y(i)-yy(i)); %误差项
end
[x' y' yy' s']
i
x
i
y
()
i
y x
i
s0
(3)使用Matlab绘图函数“plot(x,y)”绘制问题数值解和解析解的图形。
数值解的图形:
plot(x,y)
解析解的图形
plot(x,yy)
(4)使用Matlab中的ode45求解,并绘图。
编写函数如下:
%
function dy=ode(x,y)
dy=(y^2+y)/x;
T,Y]=ode45('ode',[1 3],-2);
plot(T,Y)
运行结果如下:
七、结果分析
由图可知此方法与精确解的契合度非常好,基本上与精度解保持一致,由此可见四阶Runge-Kutta方法是一种高精度的单步方法。
八、方法改进
同时,由于误差的存在,我们总想尽可能的是误差趋近于零,常用的就是传统的增加取值的个数。
最后,我们通过改变步长来进行改进。
具体实现:
(1)h=
a=1;
b=3;
h=;
y(1)=-2;
x(1)=a;
n=(b-a)/h+1;
yy(1)=-2;
for i=2:n
k1=(y(i-1)^2+y(i-1))/x(i-1);
k2=((y(i-1)+h*k1/2)^2+(y(i-1)+h*k1/2))/(x(i-1)+h/2);
k3=((y(i-1)+h*k2/2)^2+(y(i-1)+h*k2/2))/(x(i-1)+h/2);
k4=((y(i-1)+h*k3)^2+(y(i-1)+h*k3))/(x(i-1)+h);
y(i)=y(i-1)+h*(k1+2*k2+2*k3+k4)/6;% 四阶Runge-Kutta公式解
x(i)=x(i-1)+h; %有解区间的值
yy(i)=-x(i)/(x(i)-1/2); %解析解
s(i)=abs(y(i)-yy(i)); %误差项
end
[x' y' yy' s']
结果:
(2)h=
a=1;
b=3;
h=;
y(1)=-2;
x(1)=a;
n=(b-a)/h+1;
yy(1)=-2;
for i=2:n
k1=(y(i-1)^2+y(i-1))/x(i-1);
k2=((y(i-1)+h*k1/2)^2+(y(i-1)+h*k1/2))/(x(i-1)+h/2);
k3=((y(i-1)+h*k2/2)^2+(y(i-1)+h*k2/2))/(x(i-1)+h/2);
k4=((y(i-1)+h*k3)^2+(y(i-1)+h*k3))/(x(i-1)+h);
y(i)=y(i-1)+h*(k1+2*k2+2*k3+k4)/6;% 四阶Runge-Kutta公式解 x(i)=x(i-1)+h; %有解区间的值
yy(i)=-x(i)/(x(i)-1/2); %解析解
s(i)=abs(y(i)-yy(i)); %误差项
end
[x' y' yy' s']
结果:
(3)h=
a=1;
b=3;
h=;
y(1)=-2;
x(1)=a;
n=(b-a)/h+1;
yy(1)=-2;
for i=2:n
k1=(y(i-1)^2+y(i-1))/x(i-1);
k2=((y(i-1)+h*k1/2)^2+(y(i-1)+h*k1/2))/(x(i-1)+h/2);
k3=((y(i-1)+h*k2/2)^2+(y(i-1)+h*k2/2))/(x(i-1)+h/2);
k4=((y(i-1)+h*k3)^2+(y(i-1)+h*k3))/(x(i-1)+h);
y(i)=y(i-1)+h*(k1+2*k2+2*k3+k4)/6;% 四阶Runge-Kutta公式解 x(i)=x(i-1)+h; %有解区间的值
yy(i)=-x(i)/(x(i)-1/2); %解析解
s(i)=abs(y(i)-yy(i)); %误差项
end
[x' y' yy' s']
结果:
通过上述的一些结果得出,四阶的Runge-Kutta方法的误差取决于步长的选取,因此,在实验的时候我们需要慎重的选取。
一方面:我们要减少误差,另一方面:我们也需要尽可能的减少计算次数。
九、心得体会
课程设计,至今我们小组三人感慨颇多,的确,从我们参考,设计到定稿,从理论到实践,在整整两星期的时间里,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到很多在书本上没有学到的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。
通过这次课程设计之后,一定把所学过的只是仔细复习,特别是要注意细节部分。
十、参考文献
《数值计算方法》黄云清舒适编著科学出版社。