seegongsik
我的单词本
工程数学

欧拉法靠斜率一步步走

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

微分方程在每个点告诉你往哪个方向、变得多快(斜率)。这正是你在方向场那一讲见过的斜率地图。麻烦在于,绝大多数微分方程没有干净的公式解。那要怎么解?欧拉的答案简单得近乎粗暴:在你现在所在的点读出斜率,沿那个方向直走一小步(h),到新点再读斜率,再走一步。如此反复,就把解曲线画成一串小线段。步子越短越接近真解,但步数变多、计算变大。精度与成本的拉锯。这一行的想法,是从天气预报到游戏物理引擎、再到火箭轨迹,几乎所有仿真的起点。

灰色斜线就是方向场,是微分方程在每个点指定的斜率。这里方程是 y'=y,按自身大小成比例增长,所以越往上斜线越陡。欧拉从起点沿斜线直走一步,到达后再读斜线、再走一步,如此画出折线。真解是 ex(灰色曲线)。把步长 h 调小,点会变密,折线紧贴曲线。把 h 调大,点变稀,折线塌到曲线下方,因为直线段跟不上曲线向上翘的弧度。

只取同一方程的终点。灰点是真值 e³≈20.1,金点是欧拉到达的值。两者之间的红色竖条就是累积(全局)误差。把 h 滑块往上拖,竖条和数字会实时飙升。这就是截断误差的爆发:每一步直线都略微偏离曲线,这些小误差逐步累积,到终点就成了大差距。反过来,把 h 减半,误差也大致减半,因为欧拉是一阶精度,误差与 h 成正比。下方的条越满,警示越强。

这次的方程是 y'=cos x,真解是 sin x。因为解在振荡,欧拉的弱点暴露得很清楚。用大的 h,金色折线会把波峰抬得比灰色正弦曲线更高,相位也略微滞后。沿振荡走过一个周期、两个周期,偏差会不断累积。把 h 调小,两条曲线就逐渐重合。这里要学的是:同一种方法,误差的表现会随解的性格而不同。比起平滑增长的解,快速弯折、振荡的解更迫切需要小步长。

现在是真正吓人的情形。方程是 y'=−ky,真解是平滑衰减到 0 的过程。欧拉每一步把 y 乘以 (1−hk)。可一旦 h·k 超过 2,这个倍数的绝对值就超过 1,于是真解明明趋向 0,数值解却变号并越来越大。这就是爆发。介于 1 和 2 之间会一边振荡一边衰减;小于 1 则乖乖衰减。这不是精度问题,而是稳定性问题。这意味着缩小步长不只为了精确,也是防止发散的保险。对刚性(stiff)方程尤其关键。

除了更小的步子,有没有更聪明的步子?有。欧拉只信起点的一个斜率就直走。RK2(中点法)先走一半,在中点再测一次斜率,用这个更好的斜率迈出完整一步。计算量翻倍,但精度大涨。把金色(欧拉)和蓝色(RK2)在同样的 h 下对比:蓝色更贴近真解 ex。欧拉误差与 h 成正比(一阶),RK2 与 h² 成正比(二阶),所以步子减半,误差降到四分之一。实战标准 RK4 把这个想法用四次,达到 h⁴ 精度。下一讲会看到积分里也有同样的原理。

实际应用欧拉法从微分方程取得斜率,沿直线一步(h)一步前进,把解曲线画成一串线段。单步误差是一阶泰勒的余项,逐步累积成全局误差。欧拉是一阶精度,所以误差与 h 成正比。步子越小越准,但计算越多。此外,若 h·k 过大,即使是衰减问题,数值解也会发散,这是与精度无关的稳定性问题。更聪明的 RK2、RK4 多测中间斜率,达到 h²、h⁴ 精度。方向场给出斜率地图,欧拉在其上行走,泰勒解释每一步的误差。
工程数学
如果有帮助,请支持我们