欧拉法

在數學和計算機科學中，**歐拉方法**（英語：Euler method），是一種一階數值方法，用以對給定初值的常微分方程求解。

歐拉方法是常微分方程數值方法中最基本的顯式方法；也是一個一階方法，意味著其局部截斷誤差正比於步長的平方，並且其全局截斷誤差正比於步長。

## 非正式的幾何描述

考慮計算這樣的一個未知曲線的形狀：它具有給定的起點並且滿足一個給定的微分方程。 這裡，所謂「微分方程」可以看作能夠通過曲線上任意點的位置而計算出這一點的切線斜率的公式。

思路是，一開始只知道曲線的起點（假設為 $A_{0}$ ），曲線其他部份是未知的，不過通過微分方程， $A_{0}$ 的斜率可以被計算出來，也就得到了切線。

順著切線向前走一小步到點 $A_{1}$ 。如果假設 $A_{1}$ 是曲線上的一點（實際上通常不是），那麼同樣的道理就可以確定下一條切線，依此類推。在經過幾步之後，一條折線 $A_{0}A_{1}A_{2}A_{3}\dots $ 就被計算出來了。一般情況下，這條折線與原先的未知曲線偏離不遠，並且任意小的誤差都可以通過減少步長來得到。

## 歐拉方法的推導

以以下微分方程為例

　
: $y'(t)=f(t,y(t)),\qquad y(t_{0})=y_{0},$

希望用 _y_ 在點 (t0,y(t0)) 附近的線性近似來得到其近似解（也就是 _y_ 的泰勒展開式的前二項）。利用時間 _t_n 時的數值，若用單步的歐拉方法，可得到時間 _t_n+1 = _t_n + _h_ 時的近似值如下：

　
: $y_{n+1}=y_{n}+hf(t_{n},y_{n}).\qquad \qquad $

歐拉方法是一種顯型方法，也就是說 $y_{n+1}$ 的解是 $y_{i}$ , $i\leq n$ 的顯函數。

歐拉方法可以求解一階的微分方程，而任何 $N$ 階的微分方程都可以表示成一階的微分方程。

對於微分方程

　
: $y^{(N)}(t)=f(t,y(t),y'(t),\ldots ,y^{(N-1)}(t))$

可以通過新設輔助變量 $z_{1}(t)=y(t),z_{2}(t)=y'(t),\ldots ,z_{N}(t)=y^{(N-1)}(t)$ ，得到以下的等價方程

　
: $\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}}$

這是一個以 $\mathbf {z} (t)$ 為變量的一階系統，因此可以用歐拉法求解，也可以使用其他的一階數值方法。

## 應用例題

設微分方程為 $y'=y$ ，初始值為 $y(0)=1$ ，試用歐拉方法求 $y_{3}$ 的近似值，步長為 $h=1$ 。

歐拉法為：

　
: $y_{n+1}=y_{n}+hf(t_{n},y_{n}).$

首先求 $f(t_{0},y_{0})$ （當 $n=0$ ）， $f$ 的定義為 $f(t,y)=y$ ，因此有

　
: $f(t_{0},y_{0})=f(0,1)=1.$

透過以上步驟，求得解曲線在點 $(0,1)$ 的切線斜率。回顧直線斜率的定義： $y$ 變化量和 $t$ 變化量的比值，亦記作 $\Delta y/\Delta t$ 。 

接著是

　
: $h\cdot f(y_{0})=1\cdot 1=1.$

　
: $y_{0}+hf(y_{0})=y_{1}=1+1\cdot 1=2.$

重複以上步驟求出 $y_{2}$ 和 $y_{3}$ 的值。

　
: $y_{2}=y_{1}+hf(y_{1})=2+1\cdot 2=4$

　
: $y_{3}=y_{2}+hf(y_{2})=4+1\cdot 4=8$

由於歐拉法屬於遞歸算法，把運算整理成表格也許有助於避免計算錯誤。

## 局部截尾誤差

歐拉法的局部截尾誤差（Local truncation error, LTE）是指在實施一次歐拉法所產生的誤差，是指經過一步的數值解 $y_{1}$ 與在 $t_{1}=t_{0}+h$ 時精確解的誤差。數值解 $y_{1}$ 由以下給出：

　
: $y_{1}=y_{0}+hf(t_{0},y_{0}).\quad $

對於精確解，使用泰勒級數展開給出：

　
: $y(t_{0}+h)=y(t_{0})+hy'(t_{0})+{\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).$

歐拉法的局部截尾誤差為：

　
: $\mathrm {LTE} =y(t_{0}+h)-y_{1}={\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).$

當 $y$ 擁有三階有界導數時，這個結果是成立的。

結果顯示：當步長 $h$ 很小時，局部截尾誤差近似與 $h^{2}$ 成比例。也就是說，歐拉法沒有其他的高階方法如龍格－庫塔法和線性多步法精確，這些方法的局部截尾誤差與 $h^{p}$ （_p_>2）成比例。

## 全局截尾誤差

全局截尾誤差（Global truncation error, GTE）是指在一個固定時間 $t$ 時的誤差，但是很多步之後該方法需要以從初始時間到達該時間來計算。全局截尾誤差可以看做是一個每一步的局部截尾誤差的累積效應。 經過的步驟數為 $(t-t_{0})/h$ ，而每步的誤差則正比於 $h^{2}$ 。因此，可以預期全局截尾誤差是正比於 $h$ 的。

這個直觀的推測可以被嚴謹地證明。如果解 $y$ 存在二階有界導數，並且 $f$ 關於 $y$ 是利普希茨連續的，那麼全局截尾誤差是有界的：

　
: $|{\text{GTE}}|\leq {\frac {hM}{2L}}(e^{L(t-t_{0})}-1)\qquad \qquad $

其中 $M$ 是在給定區間內 $y$ 的二階導數的上界， $L$ 是 $f$ 的利普希茨常數。

這種精確的形式其實是沒有什麼意義的，通常情況下這個上界都會嚴重高估了歐拉法所造成的實際誤差。重要的是，這顯示了全局截尾誤差是近似正比於 $h$ 的，所以歐拉法被稱為是一階的。

## 相關條目

* 克蘭克－尼科爾森方法
* 梯度下降法，也是用有限步進行，計算函數的最小值。
* 龍格－庫塔法列表
* 線性多步法
* 數值積分（計算定積分）
* 常微分方程數值方法

## 註腳

## 參考資料

## 參考文獻

* 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） .