在數學 和計算機科學 中,歐拉方法 (英語:Euler method [ 註 1] ),是一種一階數值 方法,用以對給定初值的常微分方程 [ 註 2] 求解。
歐拉方法是常微分方程數值方法 中最基本的顯式方法 ;是一階的方法,意味着其局部截斷誤差[ 註 3] 正比於 步長的平方,並且其全局截斷誤差正比於步長。[ 註 4]
圖示為方程
y
′
=
y
,
y
(
0
)
=
1
{\displaystyle y'=y,y(0)=1}
的數值積分。藍色為歐拉法,綠色為中點法 ,紅色為精確解
y
=
e
t
{\displaystyle y=e^{t}}
。所用步長為
h
=
1.0
{\displaystyle h=1.0}
。
圖示為同一個方程在步長
h
=
0.25
{\displaystyle h=0.25}
時的結果。可以看出中點法比歐拉法收斂更快。
以以下微分方程為例
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 的泰勒展開式 的前二項)。利用時間 t n 時的數值,若用單步的歐拉方法,可得到時間 t n+1 = t n + 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)}
為變量的一階系統,因此可以用歐拉法求解,也可以使用其他的一階數值方法。[ 1]
設微分方程為
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}
由於歐拉法屬於遞歸算法,把運算整理成表格也許有助於避免計算錯誤。
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) .