欧拉方法

在数学和计算机科学中，欧拉方法（英語：Euler method），是一种一阶数值方法，用以对给定初值的常微分方程求解。 欧拉方法是常微分方程數值方法（英语：Numerical methods for ordinary differential equations）中最基本的显式方法；也是一个一阶方法，意味着其局部截断误差正比于步长的平方，并且其全局截断误差正比于步长。 考虑计算這樣的一个未知曲線的形状：它具有给定的起点并且满足一个给定的微分方程。 这里，所谓“微分方程”可以看作能够通过曲线上任意点的位置而计算出这一点的切线斜率的公式。 思路是，一开始只知道曲線的起点（假设为 A 0 {\displaystyle A_{0}} ），曲線其他部份是未知的，不過通过微分方程， A 0 {\displaystyle A_{0}} 的斜率可以被计算出来，也就得到了切线。 顺着切线向前走一小步到点 A 1 {\displaystyle A_{1}} 。如果假设 A 1 {\displaystyle A_{1}} 是曲线上的一点（实际上通常不是），那么同样的道理就可以确定下一条切线，依此类推。在经过几步之后，一条折线（英语：Polygonal chain） A 0 A 1 A 2 A 3 … {\displaystyle A_{0}A_{1}A_{2}A_{3}\dots } 就被计算出来了。一般情况下，这条折线与原先的未知曲线偏离不远，并且任意小的误差都可以通过减少步长来得到。 以以下微分方程為例 y ′ ( t ) = f ( t , y ( t ) ) , y ( t 0 ) = y 0 , {\displaystyle y'(t)=f(t,y(t)),\qquad y(t_{0})=y_{0},} 希望用 y 在點 (t0,y(t0)) 附近的線性近似來得到其近似解（也就是 y 的泰勒展開式的前二項）。利用時間 tn 時的數值，若用單步的欧拉方法，可得到時間 tn+1 = tn + h 時的近似值如下： y n + 1 = y n + h f ( t n , y n ) . {\displaystyle y_{n+1}=y_{n}+hf(t_{n},y_{n}).\qquad \qquad } 欧拉方法是一種顯型方法，也就是說 y n + 1 {\displaystyle y_{n+1}} 的解是 y i {\displaystyle y_{i}} , i ≤ n {\displaystyle i\leq n} 的顯函數。 欧拉方法可以求解一階的微分方程，而任何 N {\displaystyle N} 階的微分方程都可以表示成一階的微分方程。 對於微分方程 y ( N ) ( t ) = f ( t , y ( t ) , y ′ ( t ) , … , y ( N − 1 ) ( t ) ) {\displaystyle y^{(N)}(t)=f(t,y(t),y'(t),\ldots ,y^{(N-1)}(t))} 可以通過新設輔助變量 z 1 ( t ) = y ( t ) , z 2 ( t ) = y ′ ( t ) , … , z N ( t ) = y ( N − 1 ) ( t ) {\displaystyle z_{1}(t)=y(t),z_{2}(t)=y'(t),\ldots ,z_{N}(t)=y^{(N-1)}(t)} ，得到以下的等價方程 z ′ ( t ) = ( z 1 ′ ( t ) ⋮ z N − 1 ′ ( t ) z N ′ ( t ) ) = ( y ′ ( t ) ⋮ y ( N − 1 ) ( t ) y ( N ) ( t ) ) = ( z 2 ( t ) ⋮ z N ( t ) f ( t , z 1 ( t ) , … , z N ( t ) ) ) {\displaystyle \mathbf {z} '(t)={\begin{pmatrix}z_{1}'(t)\\\vdots \\z_{N-1}'(t)\\z_{N}'(t)\end{pmatrix}}={\begin{pmatrix}y'(t)\\\vdots \\y^{(N-1)}(t)\\y^{(N)}(t)\end{pmatrix}}={\begin{pmatrix}z_{2}(t)\\\vdots \\z_{N}(t)\\f(t,z_{1}(t),\ldots ,z_{N}(t))\end{pmatrix}}} 這是一個以 z ( t ) {\displaystyle \mathbf {z} (t)} 為變量的一階系統，因此可以用歐拉法求解，也可以使用其他的一階數值方法。 设微分方程为 y ′ = y {\displaystyle y'=y} ，初始值为 y ( 0 ) = 1 {\displaystyle y(0)=1} ，试用欧拉方法求 y 3 {\displaystyle y_{3}} 的近似值，步长为 h = 1 {\displaystyle h=1} 。 欧拉法為： y n + 1 = y n + h f ( t n , y n ) . {\displaystyle y_{n+1}=y_{n}+hf(t_{n},y_{n}).} 首先求 f ( t 0 , y 0 ) {\displaystyle f(t_{0},y_{0})} （当 n = 0 {\displaystyle n=0} ）， f {\displaystyle f} 的定義為 f ( t , y ) = y {\displaystyle f(t,y)=y} ，因此有 f ( t 0 , y 0 ) = f ( 0 , 1 ) = 1. {\displaystyle f(t_{0},y_{0})=f(0,1)=1.} 透過以上步驟，求得解曲線在点 ( 0 , 1 ) {\displaystyle (0,1)} 的切线斜率。回顾直線斜率的定义： y {\displaystyle y} 变化量和 t {\displaystyle t} 变化量的比值，亦記作 Δ y / Δ t {\displaystyle \Delta y/\Delta t} 。 接著是 h ⋅ f ( y 0 ) = 1 ⋅ 1 = 1. {\displaystyle h\cdot f(y_{0})=1\cdot 1=1.} y 0 + h f ( y 0 ) = y 1 = 1 + 1 ⋅ 1 = 2. {\displaystyle y_{0}+hf(y_{0})=y_{1}=1+1\cdot 1=2.} 重复以上步骤求出 y 2 {\displaystyle y_{2}} 和 y 3 {\displaystyle y_{3}} 的值。 y 2 = y 1 + h f ( y 1 ) = 2 + 1 ⋅ 2 = 4 {\displaystyle y_{2}=y_{1}+hf(y_{1})=2+1\cdot 2=4} y 3 = y 2 + h f ( y 2 ) = 4 + 1 ⋅ 4 = 8 {\displaystyle y_{3}=y_{2}+hf(y_{2})=4+1\cdot 4=8} 由于欧拉法属于递归算法，把運算整理成表格也許有助於避免計算錯誤。 欧拉法的局部截尾误差（Local truncation error, LTE）是指在实施一次欧拉法所产生的误差，是指经过一步的数值解 y 1 {\displaystyle y_{1}} 与在 t 1 = t 0 + h {\displaystyle t_{1}=t_{0}+h} 时精确解的误差。数值解 y 1 {\displaystyle y_{1}} 由以下给出： y 1 = y 0 + h f ( t 0 , y 0 ) . {\displaystyle y_{1}=y_{0}+hf(t_{0},y_{0}).\quad } 对于精确解，使用泰勒级数展开给出： y ( t 0 + h ) = y ( t 0 ) + h y ′ ( t 0 ) + 1 2 h 2 y ″ ( t 0 ) + O ( h 3 ) . {\displaystyle y(t_{0}+h)=y(t_{0})+hy'(t_{0})+{\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).} 欧拉法的局部截尾误差为： L T E = y ( t 0 + h ) − y 1 = 1 2 h 2 y ″ ( t 0 ) + O ( h 3 ) . {\displaystyle \mathrm {LTE} =y(t_{0}+h)-y_{1}={\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).} 当 y {\displaystyle y} 拥有三阶有界导数时，这个结果是成立的。 结果显示：当步长 h {\displaystyle h} 很小时，局部截尾误差近似与 h 2 {\displaystyle h^{2}} 成比例。也就是说，欧拉法没有其他的高阶方法如龙格－库塔法和线性多步法（英语：Linear multistep method）精确，这些方法的局部截尾误差与 h p {\displaystyle h^{p}} （p>2）成比例。 全局截尾误差（Global truncation error, GTE）是指在一个固定时间 t {\displaystyle t} 时的误差，但是很多步之后该方法需要以从初始时间到达该时间来计算。全局截尾误差可以看做是一个每一步的局部截尾误差的累积效应。 经过的步骤數為 ( t − t 0 ) / h {\displaystyle (t-t_{0})/h} ，而每步的误差则正比于 h 2 {\displaystyle h^{2}} 。因此，可以预期全局截尾误差是正比于 h {\displaystyle h} 的。 这个直观的推测可以被嚴謹地證明。如果解 y {\displaystyle y} 存在二阶有界导数，并且 f {\displaystyle f} 關於 y {\displaystyle y} 是利普希茨连续的，那么全局截尾误差是有界的： | GTE | ≤ h M 2 L ( e L ( t − t 0 ) − 1 ) {\displaystyle |{\text{GTE}}|\leq {\frac {hM}{2L}}(e^{L(t-t_{0})}-1)\qquad \qquad } 其中 M {\displaystyle M} 是在给定区间内 y {\displaystyle y} 的二阶导数的上界， L {\displaystyle L} 是 f {\displaystyle f} 的利普希茨常数。 这种精确的形式其实是没有什么意义的，通常情况下这个上界都會嚴重高估了欧拉法所造成的实际误差。重要的是，这顯示了全局截尾误差是近似正比于 h {\displaystyle h} 的，所以欧拉法被稱为是一阶的。 克兰克－尼科尔森方法 梯度下降法，也是用有限步進行，計算函數的最小值。 龍格－庫塔法列表（英语：List of Runge-Kutta methods） 線性多步法（英语：Linear multistep method） 數值積分（計算定積分） 常微分方程數值方法（英语：Numerical methods for ordinary differential equations） 命名自它的发明者萊昂哈德·歐拉 即初值問題 即每步误差 欧拉方法经常应用于作为构建一些更复杂方法的基础，例如预估-校正方法。 Butcher 2003，第3頁；Hairer, Nørsett & Wanner 1993，第2頁 Butcher 2003，第60頁 Atkinson 1989，第344頁 Butcher 2003，第49頁 Atkinson 1989，第346頁；Lakoba 2012，公式 (1.16) Iserles 1996，第7頁 Butcher 2003，第63頁 Atkinson, Kendall A., An Introduction to Numerical Analysis 2nd, New York: John Wiley & Sons, 1989, ISBN 978-0-471-50023-0 . Ascher, Uri M.; Petzold, Linda R., Computer Methods for Ordinary Differential Equations and Differential-Algebraic Equations, Philadelphia: Society for Industrial and Applied Mathematics, 1998, ISBN 978-0-89871-412-8 . Butcher, John C., Numerical Methods for Ordinary Differential Equations, New York: John Wiley & Sons, 2003, ISBN 978-0-471-96758-3 . Hairer, Ernst; Nørsett, Syvert Paul; Wanner, Gerhard, Solving ordinary differential equations I: Nonstiff problems, Berlin, New York: Springer-Verlag, 1993, ISBN 978-3-540-56670-0 . Iserles, Arieh, A First Course in the Numerical Analysis of Differential Equations, Cambridge University Press, 1996, ISBN 978-0-521-55655-2 . Lakoba, Taras I., Simple Euler method and its modifications (PDF) (Lecture notes for MATH334, University of Vermont), 2012 [2016-01-02], （原始内容存档 (PDF)于2012-07-12） .