070 数值近似: 欧拉法 Numerical Approximations: Euler's Method
回忆一阶线性初值问题 的两个重要事实。首先如果 连续,那么初值问题在包含 的某些区间上有唯一解 。第二点是很难找到解析解,之前分析了线性、可分离、恰当微分方程三种类型以及可以转成这三种类型之一的微分方程。然而,还有大量的微分方程很难给出解析解。
因此有其他方法分析问题就很重要了。之前讨论过,方向场可以可视化解的行为。这种方法非常简单,即使对复杂的微分方程也是如此。缺点也很明显,不适合定量计算或者比较。
比如下图是微分方程 的方向场。
从上图可以看到解的变化趋势。从 轴某一点开始,先递增,达到某个极值之后开始下降。
从上图或许可以注意到,有的线段和后续线段连起来了。如果从 的某点开始,一系列小的线段连接起来,可能可以得到一个近似解。为了把这种想法变成一个通用的方法,需要回答下面三个问题。
- 我们能否使用一种系统且直观的方法将切线连接起来?
- 如果可以,得到的分段线性函数是否是微分方程解的近似?
- 如果是,能够评估近似的精确度?也就是说,近似与实际偏差有多大?
这些问题的答案都是确定的。该方法于 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 的误差大很多的原因。
使用欧拉法必须要保证结果是充分精确的。之前的例子,我们与精确解对比无法。当使用数值方法的时候,往往没有解析解,所以我们需要不依赖精确解的方法估计误差范围。数值解最好也就是反应真实解的行为。相比收敛的解集,发散的解集更难被近似。