毕 业 论 文
题 目: 常微分方程的Euler解法
及其程序设计
学 院: 数学与信息科学学院 专 业: 数学与应用数学 毕业年限: 2011年6月 学生: 学 号: 指导教师:
..
常微分方程的Euler解法及其程序设计
摘要 本文总结了常微分方程的Euler解法,对各种格式给出了误差估计,设计了这些格式的计算程序.
关键词 常微分方程;Euler解法;误差分析;程序设计
Euler Method of Ordinary Differential Equation and Its
Programming
Abstract Euler method of ordinary differential equation is summarized,the error of each format is analyzed and its programming is designed in this paper. Keywords Ordinary differential equation; Euler method; Error analysis; Programming
.. .
..
科学技术中常常需要求解常微分方程的定解问题,这类问题最简单的形式,即为微分方程
dy f(x,y) (1)
dx的初值问题
dyf(x,y), dx (2)
y(x0)y0.定理 (存在与唯一性定理)如果方程(1)的右端函数f(x,y)在闭矩形域
R:x0ax0x0a,y0by0y0b
上满足如下条件:
(1)在R上连续;
(2)在R上关于变量y满足利普希茨(Lipschitz)条件,即存在常数L,使
对于R上任何一对点(x,y)和(x,y)有不等式:
f(x,y)f(x,y)Lyy,
则初值问题(2)在区间x0h0x0x0h0上存在唯一解
yy(x),y(x0)y0,
其中h0min(a,b),Mmaxf(x,y).
(x,y)RM 根据存在与唯一性定理,只要f(x,y)关于y满足Lipschitz条件
f(x,y)f(x,y)Lyy,
即可保证其解yy(x)存在并唯一.
然而解析方法只能用来求解少数较简单和典型的常微分方程,例如线性常系数微分方程等,对于变系数常微分方程的解析求解就比较困难,而一般的非线性常微分方程就更不用说,因此,在大多数情况下,实际问题中归结出来的微分方程主要靠数值解法求解.
.. .
..
所谓数值解法,就是寻找y(x)在一系列离散节点x1x2的近似值y1,y2,yn,yn1,xnxn1上
.相邻两个节点的间距hxn1xn称为步长,假定h为定数,节点为xnx0nh,n0,1,2,.
1 Euler解法 (1)Euler格式
Euler格式的计算公式为
yn1ynhf(xn,yn) (n0,1,2). 下面用4种方法推导公式(3) a 泰勒展开法
在xn处展开y(xn1)y(xnh)有 y(xn1)y(xn)hy'(x1n)2!h2y''(n) (xnnxn1), 略去余项,得
y(xn1)y(xn)hy'(xn)y(xn)hf(xn,y(xn)).
用近似值yn代替y(xn),把上式右端所得结果记为yn1,得
yn1ynhf(xn,yn) (n0,1,2).
b 数值差商
由导数定义知
y(xn1)y(xn)hy'(xn)f(xn,y(xn)),
所以
y(xn1)y(xn)hf(xn,y(xn)).
用yn代替y(xn),把上式右端所得结果记为yn1,即得公式(3). c 数值积分
在区间xn,xn1上对微分方程(1)进行积分,得
y(xn1)y(xn)xn1xf(x,y(x))dx, n.. .
(3) 4)
5)
((..
利用左矩形公式得
y(xn1)y(xn)hf(xn,y(xn)).
用yn代替y(xn),把上式右端所得结果记为yn1,即得公式(3). d 几何方法
在Oxy平面中,微分方程
{
y'f(x,y),
y(x0)y0.的解yy(x)称为它的积分曲线.积分曲线上的一点(x,y)的切线斜率等于函数
f(x,y)的值.如果按函数f(x,y)在Oxy平面上建立一个方向场,那么,积分曲
线上的每一点的切线方向均与方向场在该点的方向一致.
基于上述对微分方程解的几何解释,从初始点p0(x0,y0)出发,依方向场在该 点的方向上推进到xx1上一点p1,然后再从p1依方向场的方向推进到xx2上 的一点p2.循环前进,可作出一条折线p0p1p2
图1
(如图1)
一般地,设已作出该折线的极点pn,过pn(xn,yn)依方向场的方向再推进到
pn1(xn1,yn1),显然,两个极点pn,pn1的坐标有下列关系:
yn1ynf(xn,yn),
xn1xnyn1ynhf(xn,yn).
若初值y0.已知,则依上式可逐步算出
y1y0hf(x0,y0), y2y1hf(x1,y1),
yn1ynhf(xn,yn).
即得Euler格式的计算公式(3).
.. .
..
(2)梯形格式
如果用梯形公式计算(5)式右端的积分,得
y(xn1)y(xn)hf(xn,y(xn))f(xn1,y(xn1)) (n0,1,2). 2对于上式右端,用yn代替y(xn),把上式右端所得结果记为yn1,即得梯形公式
yn1ynh f(xn,yn)f(xn1,yn1) (n0,1,2). (6)
2 梯形公式(6)是关于yn1的隐式方程,因此称梯形法为隐式方法,而公式(3)是yn1的显式形式,因此称欧拉法为显式方法.
(3)改进的Euler格式
先用Euler格式求得一个初步的近似值yn1,称之为预测值,预测值yn1的精度可能很差,再用梯形公式将它校正一次,得yn1,这个结果称之为校正值.而这样建立的预测—校正系统通常称为改进的Euler格式.
预测 yn1ynhf(xn,yn)
h校正 yn1yn f(xn,yn)f(xn1,yn1)2这一计算格式亦可表示为:
yn1ynhf(xn,yn)f(xn1,ynhf(xn,yn)), 2或表示为下列平均化形式:
ypynhf(xn,yn)ycynhf(xn1,yp) yn11(ypyc)2
2 误差与精度 (1)截断误差
在实际计算中,即使初始值是准确的,但所得的数值解往往与初始值问题的
.. .
..
准确解有一定的误差.用
n1y(xn1)yn1,
表示在节点xn1处准确解与数值解之差,称之为整体截断误差,它不仅与xxn1这步计算有关,而且与xn1,xn2,,x1这些步计算有关.
为方便估计,假定yi(in)为准确的,即在yiy(xi)(in)的前提下估计误差
En1y(xn1)yn1,
这种误差称为局部截断误差.
如果局部截断误差En1O(hp1),这里h是等距节点的步长,则称所用的数值解的方法的阶数是p,或称该方法有p阶精确度.显然,步长h越小,阶数p越高,则局部截断误差越小,计算结果的精度也越高.
(2)Euler格式是一阶方法
首先,可以通过几何直观来考察Euler格式的精度.
假设yny(xn),即顶点pn落在积分曲线yy(x)上,那么,按Euler格式作出的折线pnpn1便是yy(x)过点pn的切线(如图2).
从图形上看,这样定出的顶点pn1显著地偏离了原来的积分曲线,可见Euler格式是相当粗糙的.
图2
首先考虑Euler格式的局部截断误差En1,由(4)式得
y(xn1)y(xn)hy'(xn)12''hy(n) (xnnxn1). 2!由Euler格式,有
.. .
..
yn1ynhf(xn,yn)ynhy'(xn),
上面两式相减,则Euler格式的局部截断误差显然为
h2h2En1y(xn1)yn1y''()y''(xn).
22若令
Mmaxy''(x),
axb则有
En1这表明Euler格式是一阶方法.
M2hO(h2), 2下面考虑Euler格式的整体截断误差n. 由(3)式和(4)式,有
y(xn)y(xn1)hf(xn1,y(xn1))En1,
ynyn1hf(xn1,yn1).
两式相减得
nn1h[f(xn1,y(xn1))f(xn1,yn1)]En1.
由Lipschitz条件及Einn1M2h,有 2MMhLn1h2(1hL)n1h2.
22反复使用这个不等式,得
n(1hL)n1(1hL)n22M2h 2M2n1(1hL)0h(1hL)i
2i0nMM2h2(1hL)h22M2(1hL)n1(1hL)0h
2hLn(1hL)n0nMh[(1hL)n1]. 2L1hLnhL又nhba,(1hL)[(1hL)]e(ba)L,
.. .
..
所以
ne(ba)L0Mh(ba)L(e1). 2L上式表明,Euler格式的整体截断误差由初始误差0和局部截断误差界
M2h决定. 2又y(x0)y0,所以00,则nO(h).这表明当h0时,n0,也就是说当h充分小时近似值yn能和y(xn)充分接近,即数值解是收敛的.
综上所述,Euler格式的整体截断误差比局部截断误差低一阶,这表明Euler格式的精度是比较差的,为了提高精度,减小误差,可采用梯形格式. (3)梯形格式是二阶方法
首先考察梯形格式的局部截断误差. 由泰勒展式,有
h2y''(xn)O(h3), y(xn1)y(xn)hy'(xn) (7) 2 y'(xn1)y'(xn)hy''(xn)O(h2). (8) 由(8)式,有
y''(xn)将上式代入(7)式,得
y'(xn1)y'(xn)O(h).
hh y(xn1)y(xn)[y'(xn)y'(xn1)]O(h3), (9)
2又由梯形公式(6),有 yn1yn由微分中值定理,有
f(xn1,yn1)f(xn1,y(xn1))fy(xn1,)[yn1y(xn1)]
h f(xn,yn)f(xn1,yn1). (10)
2 y'(xn1)fy(xn1,)[yn1y(xn1)],
这里是介于yn1与y(xn1)之间的值,将上式代入(10)式,有
hhyn1yn[y'(xn)y'(xn1)]fy(xn1,)[yn1y(xn1)].
22.. .
..
将上式与(9)式相减,得梯形格式的局部截断误差为
yn1y(xn1)即有
hfy(xn1,)[yn1y(xn1)]O(h3), 2yn1y(xn1)1因此梯形方法是二阶方法.
1hfy(xn1,)2O(h3).
梯形方法是隐式的,可用迭代法求解,其迭代公式如下:
yn1(0)ynhf(xn,yn){
y(k1)n1 (k0,1,2,). h(k)ynf(xn,yn)f(xn1,yn1)2下面分析迭代过程的收敛性: 因为yn1yn1(k1)于是有
h(k), f(x,y)f(x,y)n1n1n1n12hL式中L为f(x,y)对y满足Lipschitz常数,yn1yn1(k),
2hL如果h选取充分小,使得1,
2yn1yn1(k1)则当k时有yn1(k1)yn1,这说明迭代过程是收敛的.
可见,梯形格式虽提高了精度,但在应用迭代公式进行实际计算时,每迭代一次,都要重新计算函数f的值,而迭代又要反复进行若干次,计算量很大,为减小计算量,便可采用改进的Euler格式.
3 程序设计
(1)Euler格式的算法及其程序设计 应用Euler方法计算初值问题
y'f(t,y),y(a) atb
的解y(t)在区间a,b上的N个等距点的近似值的算法. 输入 端点a,b; 区间等分数N; 初值 输出 y(t)在t的N个点处的近似值y
.. .
..
h(ba)/N; step1 ta;
y;step2 对i1,2,,N,做step3step4
step3 yyhf(t,y);taih;
step4 输出(t,y)
step5 停机
例:求解初值问题 {y'y2x/yy(0)1 源程序如下:
# include