单步方法
Euler 法
对于初值问题(1)
{u′=f(t,u),t0<t≤T,u(t0)=a,
我们并不试图在自变量的整个连续区间上去逼近精确解 u(t), 只是在 N 个离散点 {tm}m=1N上考虑近似解 {Um}m=1N, 这里 t1,t2,...,tN≤T 称为 N 个节点, 它们满足关系
tm+1=tm+hm+1,m=0,1,...,N−1,
{hm}m=1N 是一组被称为步长的正数(如果当 hm=h=C,C为常数,这组结点被称为等步长的)。
Euler 方法是通过斜率来研究的,因为斜率已经给出了,当 h 很小的时候,用过 (t_0,u_0)的点斜式直线方程在 t1 处的值 u1 来近似代替 u(t1) ,即
t1−t0u1−u0=f(t0,u0),
由于这时 h=t1−t0,所以公式可以转换成
u1=u0+hf(t0,u0),
得到 u1之后,由于 t1 是知道的,又可以推出 u2。以此类推,得到 {um}m=1N 的递推公式:
{um+1=um+hf(tm,um),m=0,1,...,N−1,u0=u(t0)=a,
上述方法就是 Euler 方法,也称 Euler-Cauchy 折线法。

图 1:示意图
对于 Euler 方法可以有三种不同的解释:
- (1) 数值微分:用最简单的向前差商 hu(t+h)−u(t) 来近似代替 u′(t),即有
u(t+h)≈u(t)+hf(t,u(t)),
- (2) 数值积分:在[t,t+h]对方程(1)两端积分,并采用左矩形公式,有
u(t+h)−u(t)=∫tt+hf(τ,u(τ))dτ≈hf(t,u(t)),
- (3) 幂级数展开:将 u(t+h) 在 t 作 Taylor 展开,并略去 h2 以上的项,有
u(t+h)=u(t)+hu′(t)+2!h2u′′(t)+⋯≈u(t)+hf(t,u(t)),
在以上三式中令 t=tm ,并用 tm 记 u(tm) 的近似值。
算例 1
用 Euler 方法解初值问题
⎩⎨⎧u′=u−u2t,0<t≤1u0=1,
它的真解为 u(t)=1+2t,设定步长公式为 h(i)=24i1,(i=1,2),h(3)=2101(h 取为 2−n 形式可避免计算步长时的误差),则 tm(i)=mh(i),用 Euler 公式,有
um+1(i)=um(i)+h(i)(um(i)−um(i)2mh(i)).
下面我们来进行实验
这是使用了 Euler 最基本的方法对应上面提到的(1) 数值微分

图 2:三种不同的步长Euler法-数值微分计算结果

图 3:三种不同的步长Euler法-数值微分计算误差
这是使用了 Euler 进阶一点的方法对应上面提到的(2) 数值积分

图 4:三种不同的步长Euler法-数值积分计算结果

图 5:三种不同的步长Euler法-数值积分计算误差
这是使用了 Euler 进阶一点的方法对应上面提到 的(3) 幂级数展开(只到二阶)

图 6:三种不同的步长Euler法-幂级数展开计算结果

图 7:三种不同的步长Euler法-幂级数展开计算误差
三种方法在耗时以及误差上的比较,可以看出最耗时间是积分法,幂级数展开法(二阶)与微分法差别不大:

图 8:三种方法在误差上的比较

图 9:三种方法在耗时上的比较
多步法