Ch5. 常微分方程数值解法
§1. 引言
1. 问题的提出
?y??f(x,y)假设一阶微分方程初值问题?中的f?x,y?关于满足Lipschitz条
?y(x0)?y0件,即存在常数,使得f?x,y1??f?x,y2??Ly1?y2,则由常微分方程理论知,初值问题有唯一解。
除了一些特殊类型的方程外,许多微分方程都没有解析解。 2. 数值解法的基本思想——离散化
计算解y(x)在离散点x0,x1,?,xn,?上值y(xi)的近似值,xi?x0?ih。 3. 几个基本概念
(1)单步法与多步法
若计算时只用到,则称这种方法为单步法,如yi?1?yi?hf?xi,yi?;若计算时需用到yi,yi?1,,yi?k?k?1?,则称这种方法为多步法。
则称此计算公式为显式,否则称之为隐式。 ,yi?k表示,
(2)显式与隐式 若可以直接用yi,yi?1,§2. Euler方法
1. Euler公式
将y??f(x,y)在?xn,xn?1?上积分,y(xn?1)?y(xn)??得yn?1?yn??xn?1xnxn?1xnf(x,y(x))dx,
f(x,y(x))dx?I,用数值积分法求。
(1)I?hf?xn,yn?,得yn?1?yn?hf?xn,yn?。Euler公式
(2)I?hf?xn?1,yn?1?,得yn?1?yn?hf?xn?1,yn?1?。后退的Euler公式
h?f?xn,yn??f?xn?1,yn?1??, 2h得yn?1?yn??f?xn,yn??f?xn?1,yn?1??。梯形公式(隐式)
2(3)I?2. 改进的Euler公式
Euler公式计算简便,但精度差,梯形公式为隐式,计算较复杂,但精度较高,可将两者结合。
?yn?1?yn?hf(xn,yn)??h?f(xn,yn)?f(xn?1,yn?1)?y?y?n?1n?2?称为改进的Euler公式,上式也可写为
?y?y?hf(x,y)pnnn???yc?yn?hf(xn?1,yp)。 ???yn?1??yp?yc?2预测校正,
例1用Euler公式和改进的Euler公式求解初值问题
2x??y?y?(0?x?1)?y??y(0)?1?解y??y??2xy?1(贝努里方程,n??1),
??1?n?P?x?dx???1?n?P?x?dxdx?C? y1?n?e???Q?x?e???h?0.1。
?2???1?dx??2???1?dxdx?C??e2x?4xe?2xdx?C ?e?2??2xe???????????e2x??2x?1?e?2x?C?。由y?0??1,得C?0,从而y?2x?1。
?2xn?Euler公式:yn?1?yn?hf(xn,yn)?yn?h?y??ny??。
n???yp?yn?h?yn?2xnyn???改进的Euler公式:?yc?yn?h?yp?2xn?1yp?。
???yn?1??yp?yc?2x Euler 0.1 0.2 0.3 1.277 1.266 1.265 0.4 1.358 1.343 1.342 0.5 0.6 0.7 1.580 1.553 1.549 0.8 0.9 1.0 1.100 1.192 1.435 1.509 1.416 1.486 1.414 1.483 1.650 1.717 1.785 1.616 1.678 1.738 1.612 1.673 1.732 Euler改 1.096 1.184 准确 1.095 1.183 §3. Runge-Kutta方法
1. Taylor级数方法与阶
?y??f(x,y)h2y??(xn)??,将对?,有Taylor级数y(xn?1)?y(xn)?hy?(xn)?2!?y(x0)?y0此级数截断,并用代替y(xn),得阶Taylor公式
yn?1h2hp(p)?????yn?hy?ynyn。 2!p!'n显然截断误差为y(xn?1)?yn?1hp?1(p?1)?y(?)?O(hp?1)。 (p?1)!定义若某方法的截断误差为O(hp?1),则称此方法精度为阶。 2. Runge-Kutta方法基本思想
y(xn?1)?y(xn)?y?(?),
hy(xn?1)?y(xn)?hy?(?)?y(xn)?hf??,y(?)?, K*?y?(?)?f??,y(?)?——平均斜率。
(1)取K*?y?(xn)?f(xn,yn),即为Euler公式;
(2)取K*?y?(xn?1)?f(xn?1,yn?1),即为后退的Euler公式; (3)取K*?y?(xn)?y?(xn?1)f(xn,yn)?f(xn?1,yn?1)?,即为梯形公式。
22借用Taylor级数法的思想,将y(xn?1)?y(xn)?hy?(?)中的y?(?)(平均斜率)表示为在若干点处值的线性组合,通过选择组合系数使公式达到一定的阶。 3. 二阶Runge-Kutta方法
选为f(x,y)在某两点处值的线性组合,即K*??1K1??2K2,其中
'''??p?yn,K2?f(xn?p,yn?p)?ynK1?f(x?'y?phyn??,?1,?2,p待定。 n,yn)n将K1,K2代入yn?1?yn?hK*?yn?h??1K1??2K2?,得
'''''''yn?1?yn?h?1yn??2(yn?phyn??)?yn???1??2?hyn??2ph2yn??。
??将上式与二阶Taylor公式yn?1??1??2?12h?'??对比,得??yn?hyn?yn。 1(*)2!?2p??2?