seegongsik
工程数学

欧拉法

沿微分方程的斜率直走一步步,步子大了误差就爆发

微分方程告诉你,在每个点上朝哪个方向、以多快的速度变化,也就是斜率。那是方向场的斜率地图。大多数微分方程没有干净的公式解。欧拉的方法很单纯。在当前点读出斜率,沿那个方向直走短短的一步 (h),到了新的点再读斜率,再走一步。重复下去,解曲线就画成折线。步子越短越靠近真解,但步数变多,计算也变多。这是精度和代价的拉锯。这一行是天气预报、游戏物理、火箭轨迹里几乎所有模拟的起点。图里的滑块选的就是这一步的长度。点越密,折线越靠近真解。

灰色斜线是方向场。每一处是微分方程在那个点规定的斜率。这里是 y'=y,按自身的值成比例生长,所以越往上斜线越陡。欧拉从起点沿斜线直线走一步,到了那一点再读斜线,再走一步,如此画出折线。真解是灰色曲线 ex。把步长 h 缩小,点变密,折线贴住曲线。把 h 加大,点变少,折线垂到曲线下方。直线跟不上曲线向上弯的样子。每一根斜线就是那一点的斜率。

只看同一个式子的终点。灰点是真值 e³≈20.1,金点是欧拉走到的值。两者之间的橙色条是累积的全局误差。把 h 滑块调大,条子和数字立刻窜高。这是截断误差的爆发。每一步直线稍稍偏离曲线的小误差堆起来,到终点就成了大差距。把 h 减半,误差也大约减半。欧拉是 1 次精度,误差与 h 成正比。条下方的带子越满,警报越响。

这一次的式子是 y'=cos x,真解是 sin x。解在振动,欧拉的弱点就显出来。h 大的时候,金色折线把灰色 sin 曲线的峰顶撑得更高,相位也略微落后。振动跟着走一个周期、两个周期,偏差就越积越多。把 h 缩小,两条曲线渐渐重合。同一个方法,误差的样子随解的性格而不同。比起平滑生长的解,快速弯曲、来回振动的解更需要短步。

现在是更棘手的情形。式子是 y'=−ky,真解是平缓收到 0 的衰减。欧拉每一步把 y 乘上 (1−hk)。当 h·k 超过 2,这个倍率的绝对值大于 1,真解走向 0,数值解却一边翻符号一边变大。它以红色爆发。在 1 和 2 之间,它以橙色振动着平息。小于 1,就以绿色安静地衰减。这不是精度问题,是稳定问题。把步子缩短,不只是为了精密,也是挡住发散的保险。在刚硬 (stiff) 的方程里尤其要紧。

不只有更小的步,还有更好的步。欧拉只信起点的斜率,然后直走。RK2,也就是中点法,先走一半,再量一次中间的斜率,用那个更好的斜率走完整的一步。计算量加倍,精度却上去了。用同一个 h 比较金色的欧拉和蓝色的 RK2,蓝色贴真解 ex 贴得紧得多。欧拉的误差是与 h 成正比的 1 次,RK2 是与 h² 成正比的 2 次,所以把步长减半,误差就变成 1/4。实务里的标准 RK4 把这个想法用四次,得到更高的精度。用小块去量面积的数值积分里,也是同一个原理。

实际应用欧拉法接过微分方程的斜率,沿直线一步 (h) 一步地前进,把解曲线画成折线。一步的误差是 1 次泰勒的余项,它每步堆积,成为全局误差。欧拉是 1 次精度,误差与 h 成正比。步子缩短就更准,计算也更多。h·k 太大时,即使是衰减问题,数值解也会发散,这是与精度分开的稳定问题。更好的 RK2、RK4 再量几次途中的斜率,得到更高阶的精度。方向场交出斜率地图,欧拉在上面走,泰勒说明每一步的误差。
← 工程数学
如果有帮助,请支持我们