070 数值近似: 欧拉法 Numerical Approximations: Euler's Method

回忆一阶线性初值问题 的两个重要事实。首先如果 连续,那么初值问题在包含 的某些区间上有唯一解 。第二点是很难找到解析解,之前分析了线性、可分离、恰当微分方程三种类型以及可以转成这三种类型之一的微分方程。然而,还有大量的微分方程很难给出解析解。

因此有其他方法分析问题就很重要了。之前讨论过,方向场可以可视化解的行为。这种方法非常简单,即使对复杂的微分方程也是如此。缺点也很明显,不适合定量计算或者比较。

比如下图是微分方程 的方向场。

从上图可以看到解的变化趋势。从 轴某一点开始,先递增,达到某个极值之后开始下降。

从上图或许可以注意到,有的线段和后续线段连起来了。如果从 的某点开始,一系列小的线段连接起来,可能可以得到一个近似解。为了把这种想法变成一个通用的方法,需要回答下面三个问题。

  1. 我们能否使用一种系统且直观的方法将切线连接起来?
  2. 如果可以,得到的分段线性函数是否是微分方程解的近似?
  3. 如果是,能够评估近似的精确度?也就是说,近似与实际偏差有多大?

这些问题的答案都是确定的。该方法于 1768 年由欧拉提出,称为切线法(tangent line method)或欧拉法(Euler method)。本小节讨论前两个问题,第三个问题的系统讨论推迟到第八章。

下面看看欧拉法是如何工作的。考虑如何用切线近似初值问题 附近的解。我们已知解经过点 ,也知道该点处的斜率是 ,那么解的曲线在点 的切线是 附近充分小的范围内,与真实值没有明显差异,切线是真实解很好的近似,如下图所示。如果 足够接近 ,那么我们可以使用 来近似

重复这个过程。不过我们不知道 时刻的值 ,只能用近似值 来替代。那么就可以得到通过点 斜率为 的直线 那么可以用 来近似 附近的值。

继续这个过程。以点 为起点的切线是 因此 处的近似值是 如果引入记号 那么 可以写作 如果假定点 之间的间隔相等是 ,那么 ,可以得到欧拉公式 根据步长是否相等,欧拉法就是反复求 或者 的值,使用每一步的结果计算下一步。这样得到一系列值 ,它们是 在时刻 的近似。如果要近似解 ,那么就要构造分段线性函数表示上述的分段切线。在 区间,函数 就是 的方程 ,在 区间,函数 就是 的方程 ,以此类推。

例 1 初值问题 使用 作为参数,使用欧拉法求上面的初值问题,并求出与真实解的差。

解:这是一个线性微分方程,积分因子是 ,解是 欧拉法中的函数 ,使用初始值 得到 利用公式 得到 附近的近似 ,解得 重复这个步骤 那么在 附近的近似是 带入 得到 重复这个步骤可以得到下表。

切线 确定值
0 0.0 1.00000 2.5 1.00000
1 0.2 1.50000 1.85 1.43711
2 0.4 1.87000 1.265 1.75650
3 0.6 2.12300 0.7385 1.96936
4 0.8 2.27070 0.26465 2.08584
5 1.0 2.32363 2.11510

第二列是 的值,间隔是 。第三列是应用欧拉法 计算得到的 值。第四列是通过点 的切线斜率 。第五列是切线。第六列是 得到的精确值。 的解与切线近似如下图所示。

从上表和图中可以看出,欧拉法近似的结果比真实值稍大。这是因为解的图像是下凹的,因此切线在图像的上方。

这个近似的精确度不足以用于科学或工程计算。比如 时,近似误差是 2.11510-2.32363=0.20853,大约是是 9.86% 的误差。提高精度的方式之一是使用更小的步长,相应增加了计算的次数。

例 1 中的计算通常使用计算机完成。

例 2 使用不同的步长来近似求解 ,其中要求 。并于精确解 进行比较。

解:下表是 几种情况下 的近似值。

精确值
0.0 1.0000 1.0000 1.0000 1.0000 1.0000
1.0 2.2164 2.1651 2.1399 2.1250 2.1151
2.0 1.3397 1.2780 1.2476 1.2295 1.2176
3.0 -0.7903 -0.8459 -0.8734 -0.8898 -0.9007
4.0 -3.6707 -3.7152 -3.7373 -3.7506 -3.7594
5.0 -7.0003 -7.0337 -7.0504 -7.0604 -7.0671

从上表可以得出一些重要结论。当 固定时, 减小,精度增加。比如 时误差约 10%,然后 仅有 1%。从这里可以看出,步长减少 10 倍,误差也减少了 10 倍。这里可以得到结论:步长减少的倍数大致和误差减少的倍数一致。这里仅仅是一个例子,这是一个一般性的结论吗?第八章会进一步分析。

第二个观察是对于固定的 ,对于 而言,随着 的增加,近似更精确。比如 时, 的误差是 0.0668,而 时误差是 0.1221,差不多少了一半。

最后,欧拉法对于这个问题而言估算的相当好。即使对于较大的步长 ,结果也很好,减小 可以进一步提高精度。

例 3 考虑初值问题 方程的通解在 2.1 解例 3 中给出,结合初始条件 得到 使用不同的不长,使用欧拉法,计算区间 的近似,并于 的结果进行比较。

解:使用例 2 的步长,得到

精确值
0.0 1.000000 1.000000 1.000000 1.000000 1.000000
1.0 15.77728 17.25062 18.10997 18.67278 19.06990
2.0 104.6784 123.7130 135.5440 143.5835 149.3949
3.0 652.5349 837.0745 959.2580 1045.395 1109.179
4.0 4042.122 5633.351 6755.175 7575.577 8197.884
5.0 25026.95 37897.43 47555.35 54881.32 60573.53

和之前类似,给定 ,随着 的减少精度在增加。比如 时, 的误差是 17.3%,而 时误差仅有 2.1%。不过给定 ,随着 的增加,误差在增加。对 而言, 时的误差达到了 9.4%, 大的时候误差更大。这个误差对于科学或工程计算而言太大了。为了提高精度,可以使用更小的步长或者限制距离初值位置的距离。然而,欧拉法在这个例子中并不如例 2 中那么有效。

为了更好的理解这些例子,我们重新审视欧拉法近似求解初值问题 其精确解用 表示。一阶微分方程有无限的解,初值条件挑选了其中一个解,确定了任意常量 。在无限的解中, 是满足初值条件

在欧拉法的第一步中,使用切线近似通过 的解 ,然后估计 时刻 的值。通常 ,那么第二步并不是近似解 而是近似通过点 的解 。也就是说,欧拉法的每一步使用一系列切线近似微分方程一系列的解 。很多步之后,近似的质量强依赖于通过一系列点 的解的集合的行为。

例 2 中微分方程的通解是 初始条件要求 。当 时, 中依赖常量 的项趋于零,因此解集是收敛的。在欧拉方法中,用切线近似哪些解并不重要,因为随着 的增加,所有的解都会越来越接近。

不过在例 3 中微分方程的通解是 由于当 时,涉及常量 的项会无穷大,那么这个一个发散的解集。即使在 附近的解和 对应的解差距约会越来越大。例 3 中我们要近似的是 的解,但是欧拉法的每一步都是近似另一个解,并且随着 的增加,分离的越来越远。这也是为什么例 3 的误差比例 2 的误差大很多的原因。

使用欧拉法必须要保证结果是充分精确的。之前的例子,我们与精确解对比无法。当使用数值方法的时候,往往没有解析解,所以我们需要不依赖精确解的方法估计误差范围。数值解最好也就是反应真实解的行为。相比收敛的解集,发散的解集更难被近似。