常微分方程式の数値解を求めるアプローチ
(図 1) オイラー法の図解。未知の曲線は青で、その多角形近似は赤で示されています。
数学 と 計算科学 において 、 オイラー法 ( フォワードオイラー法 とも呼ばれる)は、与えられた 初期値を持つ 常微分 方程式(ODE)を解くための 1次の 数値手順である。これは 常微分方程式の数値積分 のための 最も基本的な 明示的方法 であり、最も単純な ルンゲ・クッタ法である。オイラー法は、 レオンハルト・オイラー が著書 『積分計算の原理 』 (1768年 - 1770年出版)で初めて提案した ことにちなんで名付けられた。 [1]
オイラー法は一次法であり、局所誤差(ステップごとの誤差)はステップサイズの2乗に比例し、グローバル誤差(特定の時点での誤差)はステップサイズに比例します。オイラー法は、予測子 修正子法 などのより複雑な方法を構築するための基礎としてよく使用されます。
幾何学的記述
目的とそれが機能する理由
与えられた点から始まり、与えられた微分方程式を満たす未知の曲線の形状を計算する問題を考えてみましょう。ここで、微分方程式は、ある点の位置が計算されると、曲線上の任意の点での曲線の 接線 の 傾き を計算できる式と考えることができます。
考え方としては、曲線は最初は未知ですが、 で示されるその開始点は 既知です (図 1 を参照)。次に、微分方程式から、 における曲線の傾き を計算でき、それによって接線を計算できます。
A
0
,
{\displaystyle A_{0},}
A
0
{\displaystyle A_{0}}
その接線に沿って点まで小さなステップを踏みます。 この小さなステップでは、傾きはあまり変化しないため、 曲線に近くなります。 が まだ曲線上にあると仮定すると、 上記の点の場合と同じ推論を使用できます。いくつかのステップの後、 多角形曲線 ( ) が計算されます。一般に、この曲線は元の未知の曲線から大きく逸脱することはなく、ステップサイズが十分に小さく、計算間隔が有限であれば、2 つの曲線間の誤差を小さくすることができます。 [2]
A
1
.
{\displaystyle A_{1}.}
A
1
{\displaystyle A_{1}}
A
1
{\displaystyle A_{1}}
A
0
{\displaystyle A_{0}}
A
0
A
1
A
2
A
3
…
{\displaystyle A_{0}A_{1}A_{2}A_{3}\dots }
一次プロセス
および の値が与えられている場合 、 の導関数は および の与えられた関数で 、 と 表記されます 。 を設定することでプロセスを開始します 。次に、t軸に沿ったすべてのステップのサイズの値を選択し 、 (または同等の)を設定します。ここで、オイラー法を使用して および から を求めます 。 [3]
t
0
{\displaystyle t_{0}}
y
(
t
0
)
{\displaystyle y(t_{0})}
y
{\displaystyle y}
t
{\displaystyle t}
y
{\displaystyle y}
y
′
(
t
)
=
f
(
t
,
y
(
t
)
)
{\displaystyle y'(t)=f{\bigl (}t,y(t){\bigr )}}
y
0
=
y
(
t
0
)
{\displaystyle y_{0}=y(t_{0})}
h
{\displaystyle h}
t
n
=
t
0
+
n
h
{\displaystyle t_{n}=t_{0}+nh}
t
n
+
1
=
t
n
+
h
{\displaystyle t_{n+1}=t_{n}+h}
y
n
+
1
{\displaystyle y_{n+1}}
y
n
{\displaystyle y_{n}}
t
n
{\displaystyle t_{n}}
y
n
+
1
=
y
n
+
h
f
(
t
n
,
y
n
)
.
{\displaystyle y_{n+1}=y_{n}+hf(t_{n},y_{n}).}
の値は 、時刻 における解の近似値 、つまり です 。オイラー法は 明示的 です。つまり、解は に対して の明示的な関数です 。
y
n
{\displaystyle y_{n}}
t
n
{\displaystyle t_{n}}
y
n
≈
y
(
t
n
)
{\displaystyle y_{n}\approx y(t_{n})}
y
n
+
1
{\displaystyle y_{n+1}}
y
i
{\displaystyle y_{i}}
i
≤
n
{\displaystyle i\leq n}
高次プロセス
オイラー法は1階常微分方程式を積分しますが、任意の階数の常微分方程式は1階常微分方程式のシステムとして表すことができます。次 のように定義される
階数の常微分方程式が与えられた場合、
N
{\displaystyle N}
N
{\displaystyle N}
y
(
N
+
1
)
(
t
)
=
f
(
t
,
y
(
t
)
,
y
′
(
t
)
,
…
,
y
(
N
)
(
t
)
)
,
{\displaystyle y^{(N+1)}(t)=f\left(t,y(t),y'(t),\ldots ,y^{(N)}(t)\right),}
、、および と 同様に 、希望する時間における常微分方程式の解の近似値に達するまで、次の式を実行します。
h
{\displaystyle h}
t
0
{\displaystyle t_{0}}
y
0
,
y
0
′
,
…
,
y
0
(
N
)
{\displaystyle y_{0},y'_{0},\dots ,y_{0}^{(N)}}
y
→
i
+
1
=
(
y
i
+
1
y
i
+
1
′
⋮
y
i
+
1
(
N
−
1
)
y
i
+
1
(
N
)
)
=
(
y
i
+
h
⋅
y
i
′
y
i
′
+
h
⋅
y
i
″
⋮
y
i
(
N
−
1
)
+
h
⋅
y
i
(
N
)
y
i
(
N
)
+
h
⋅
f
(
t
i
,
y
i
,
y
i
′
,
…
,
y
i
(
N
)
)
)
{\displaystyle {\vec {y}}_{i+1}={\begin{pmatrix}y_{i+1}\\y'_{i+1}\\\vdots \\y_{i+1}^{(N-1)}\\y_{i+1}^{(N)}\end{pmatrix}}={\begin{pmatrix}y_{i}+h\cdot y'_{i}\\y'_{i}+h\cdot y''_{i}\\\vdots \\y_{i}^{(N-1)}+h\cdot y_{i}^{(N)}\\y_{i}^{(N)}+h\cdot f\left(t_{i},y_{i},y'_{i},\ldots ,y_{i}^{(N)}\right)\end{pmatrix}}}
これらの一次システムはオイラー法、あるいは実際には一次システムのための他の任意の方式で扱うことができる。 [4]
一次例
初期値問題を考えると
y
′
=
y
,
y
(
0
)
=
1
,
{\displaystyle y'=y,\quad y(0)=1,}
を近似するためにオイラー法を使いたい 。 [5]
y
(
4
)
{\displaystyle y(4)}
ステップサイズを1( h = 1 )
(図2)方程式の数値積分図 青はオイラー法、緑は 中点法 、赤は厳密解、 ステップサイズは
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.}
オイラー法は
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})}
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
{\textstyle {\frac {\Delta y}{\Delta t}}}
次のステップでは、上記の値にステップ サイズを掛けます 。ここではステップ サイズは 1 とします。
h
{\displaystyle h}
h
⋅
f
(
y
0
)
=
1
⋅
1
=
1.
{\displaystyle h\cdot f(y_{0})=1\cdot 1=1.}
ステップ サイズは の変化なので 、ステップ サイズと接線の傾きを掛け合わせると、 値の変化が得られます。この値は初期 値に加算され、計算に使用される次の値が得られます。
t
{\displaystyle t}
y
{\displaystyle y}
y
{\displaystyle y}
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
4
{\displaystyle y_{4}}
y
2
=
y
1
+
h
f
(
y
1
)
=
2
+
1
⋅
2
=
4
,
y
3
=
y
2
+
h
f
(
y
2
)
=
4
+
1
⋅
4
=
8
,
y
4
=
y
3
+
h
f
(
y
3
)
=
8
+
1
⋅
8
=
16.
{\displaystyle {\begin{aligned}y_{2}&=y_{1}+hf(y_{1})=2+1\cdot 2=4,\\y_{3}&=y_{2}+hf(y_{2})=4+1\cdot 4=8,\\y_{4}&=y_{3}+hf(y_{3})=8+1\cdot 8=16.\end{aligned}}}
このアルゴリズムは反復的な性質を持っているため、エラーを避けるために、以下に示すように計算をチャート形式で整理すると役立ちます。
この計算の結論は、 です 。微分方程式の正確な解は なので 、 です 。この特定のケースでは、特に値のステップ サイズが大きいため、オイラー法の近似はあまり正確ではありませんでしたが 、図が示すように、その動作は定性的に正しいです。
y
4
=
16
{\displaystyle y_{4}=16}
y
(
t
)
=
e
t
{\displaystyle y(t)=e^{t}}
y
(
4
)
=
e
4
≈
54.598
{\displaystyle y(4)=e^{4}\approx 54.598}
h
{\displaystyle h}
他のステップサイズの使用
(図3)同じ図
h
=
0.25.
{\displaystyle h=0.25.}
はじめに述べたように、ステップ サイズ が小さいほど、オイラー法の精度は高くなります。以下の表は、さまざまなステップ サイズでの結果を示しています。一番上の行は前のセクションの例に対応し、2 行目は図に示されています。
h
{\displaystyle h}
表の最後の列に記録されている誤差は、 における正確な解とオイラー近似との差です 。表の下部では、ステップ サイズは前の行のステップ サイズの半分であり、誤差も前の行の誤差の約半分です。これは、少なくともステップ サイズの値がかなり小さい場合、誤差がステップ サイズにほぼ比例することを示唆しています。これは一般に当てはまり、他の方程式にも当てはまります。詳細については、「グローバル切り捨て誤差」セクションを参照してください。
t
=
4
{\displaystyle t=4}
図にも示されている 中点法 などの他の方法は、より好ましい動作をします。中点法の全体誤差は、ステップ サイズの 2 乗 にほぼ比例します。このため、オイラー法は 1 次法であるのに対し、中点法は 2 次法と言われています。
上記の表から、小数点以下3桁まで正確な答えを得るために必要なステップサイズは約0.00001であることが推測できます。つまり、400,000ステップが必要です。この大きなステップ数は、高い計算コストを伴います。このため、特に高い精度が求められる場合は、 ルンゲ・クッタ法 や 線形マルチステップ法 などの高次手法が使用されます。 [6]
高階の例
この 3 次例では、次の情報が与えられていると仮定します。
y
‴
+
4
t
y
″
−
t
2
y
′
−
(
cos
t
)
y
=
sin
t
t
0
=
0
y
0
=
y
(
t
0
)
=
2
y
0
′
=
y
′
(
t
0
)
=
−
1
y
0
″
=
y
″
(
t
0
)
=
3
h
=
0.5
{\displaystyle {\begin{aligned}&y'''+4ty''-t^{2}y'-(\cos {t})y=\sin {t}\\&t_{0}=0\\&y_{0}=y(t_{0})=2\\&y'_{0}=y'(t_{0})=-1\\&y''_{0}=y''(t_{0})=3\\&h=0.5\end{aligned}}}
これから y''' を分離して次の式を得ることができます。
f
(
t
,
y
,
y
′
,
y
″
)
=
y
‴
=
sin
t
+
(
cos
t
)
y
+
t
2
y
′
−
4
t
y
″
{\displaystyle f\left(t,y,y',y''\right)=y'''=\sin {t}+(\cos {t})y+t^{2}y'-4ty''}
これを使用すると、 の解を得ることができます 。 また、 の解を使用すると 、 の解を得ることができます 。 同じ式を使用してこのプロセスを必要なだけ続けることで、 目的の解を見つけることができます。
y
→
1
{\displaystyle {\vec {y}}_{1}}
y
→
1
=
(
y
1
y
1
′
y
1
″
)
=
(
y
0
+
h
⋅
y
0
′
y
0
′
+
h
⋅
y
0
″
y
0
″
+
h
⋅
f
(
t
0
,
y
0
,
y
0
′
,
y
0
″
)
)
=
(
2
+
0.5
⋅
−
1
−
1
+
0.5
⋅
3
3
+
0.5
⋅
(
sin
0
+
(
cos
0
)
⋅
2
+
0
2
⋅
(
−
1
)
−
4
⋅
0
⋅
3
)
)
=
(
1.5
0.5
4
)
{\displaystyle {\vec {y}}_{1}={\begin{pmatrix}y_{1}\\y_{1}'\\y_{1}''\end{pmatrix}}={\begin{pmatrix}y_{0}+h\cdot y'_{0}\\y'_{0}+h\cdot y''_{0}\\y''_{0}+h\cdot f\left(t_{0},y_{0},y'_{0},y''_{0}\right)\end{pmatrix}}={\begin{pmatrix}2+0.5\cdot -1\\-1+0.5\cdot 3\\3+0.5\cdot \left(\sin {0}+(\cos {0})\cdot 2+0^{2}\cdot (-1)-4\cdot 0\cdot 3\right)\end{pmatrix}}={\begin{pmatrix}1.5\\0.5\\4\end{pmatrix}}}
y
→
1
{\displaystyle {\vec {y}}_{1}}
y
→
2
{\displaystyle {\vec {y}}_{2}}
y
→
2
=
(
y
2
y
2
′
y
2
″
)
=
(
y
1
+
h
⋅
y
1
′
y
1
′
+
h
⋅
y
1
″
y
1
″
+
h
⋅
f
(
t
1
,
y
1
,
y
1
′
,
y
1
″
)
)
=
(
1.5
+
0.5
⋅
0.5
0.5
+
0.5
⋅
4
4
+
0.5
⋅
(
sin
0.5
+
(
cos
0.5
)
⋅
1.5
+
0.5
2
⋅
0.5
−
4
⋅
0.5
⋅
4
)
)
=
(
1.75
2.5
0.9604...
)
{\displaystyle {\vec {y}}_{2}={\begin{pmatrix}y_{2}\\y_{2}'\\y_{2}''\end{pmatrix}}={\begin{pmatrix}y_{1}+h\cdot y'_{1}\\y'_{1}+h\cdot y''_{1}\\y''_{1}+h\cdot f\left(t_{1},y_{1},y'_{1},y''_{1}\right)\end{pmatrix}}={\begin{pmatrix}1.5+0.5\cdot 0.5\\0.5+0.5\cdot 4\\4+0.5\cdot \left(\sin {0.5}+(\cos {0.5})\cdot 1.5+0.5^{2}\cdot 0.5-4\cdot 0.5\cdot 4\right)\end{pmatrix}}={\begin{pmatrix}1.75\\2.5\\0.9604...\end{pmatrix}}}
y
→
i
{\displaystyle {\vec {y}}_{i}}
導出
オイラー法はさまざまな方法で導出できます。
(1) まず、上に述べた幾何学的記述がある。
(2) もう一つの可能性は、関数 の テイラー展開を 考えることである :
y
{\displaystyle y}
t
0
{\displaystyle t_{0}}
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})+{\tfrac {1}{2}}h^{2}y''(t_{0})+O\left(h^{3}\right).}
微分方程式は と述べている 。これをテイラー展開に代入し、二次項と高次項を無視すると、オイラー法が生じる。 [7]
y
′
=
f
(
t
,
y
)
{\displaystyle y'=f(t,y)}
以下では、オイラー法によって発生する誤差を解析するためにテイラー展開が使用され、これを拡張して ルンゲ・クッタ法 を生成することができます。
(3) これに密接に関連する導出法は、導関数を
前向き 差分 式に置き換えることである。
y
′
(
t
0
)
≈
y
(
t
0
+
h
)
−
y
(
t
0
)
h
{\displaystyle y'(t_{0})\approx {\frac {y(t_{0}+h)-y(t_{0})}{h}}}
微分方程式で 。これもまたオイラー法となる。 [8]
y
′
=
f
(
t
,
y
)
{\displaystyle y'=f(t,y)}
同様の計算により、 中点法 と 後退オイラー法 が得られます。
(4) 最後に、微分方程式をからまで積分し、微積分の基本定理を適用すると次の式 が 得 られる 。
t
0
{\displaystyle t_{0}}
t
0
+
h
{\displaystyle t_{0}+h}
y
(
t
0
+
h
)
−
y
(
t
0
)
=
∫
t
0
t
0
+
h
f
(
t
,
y
(
t
)
)
d
t
.
{\displaystyle y(t_{0}+h)-y(t_{0})=\int _{t_{0}}^{t_{0}+h}f{\bigl (}t,y(t){\bigr )}\,\mathrm {d} t.}
ここで、左側の 長方形法 (長方形は 1 つだけ)で積分を近似します。
∫
t
0
t
0
+
h
f
(
t
,
y
(
t
)
)
d
t
≈
h
f
(
t
0
,
y
(
t
0
)
)
.
{\displaystyle \int _{t_{0}}^{t_{0}+h}f{\bigl (}t,y(t){\bigr )}\,\mathrm {d} t\approx hf{\bigl (}t_{0},y(t_{0}){\bigr )}.}
両方の方程式を組み合わせると、再びオイラー法が見つかります。 [9]
この考え方を継続することで、さまざまな 線形多段階法 に到達できます。
ローカル切り捨てエラー
オイラー法の局所的打ち切り誤差は 、 1ステップで生じる誤差である。これは、1ステップ後の数値解 と、 時刻 における正確な解との差である 。数値解は次のように与えられる。
y
1
{\displaystyle y_{1}}
t
1
=
t
0
+
h
{\displaystyle t_{1}=t_{0}+h}
y
1
=
y
0
+
h
f
(
t
0
,
y
0
)
.
{\displaystyle y_{1}=y_{0}+hf(t_{0},y_{0}).}
正確な解を得るには、上記の導出セクションで説明したテイラー展開を使用します。
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})+{\tfrac {1}{2}}h^{2}y''(t_{0})+O\left(h^{3}\right).}
オイラー法によって導入される局所的切り捨て誤差 (LTE) は、次の式の差で表されます。
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}={\tfrac {1}{2}}h^{2}y''(t_{0})+O\left(h^{3}\right).}
この結果は、3次導関数が有界である 場合に有効である。 [10]
y
{\displaystyle y}
これは、 が小さい場合 、局所的打ち切り誤差が にほぼ比例することを示しています 。これにより、オイラー法は、 局所的打ち切り誤差がステップ サイズのより高いべき乗に比例する
ルンゲ クッタ法 や 線形マルチステップ法などの高次手法よりも精度が低くなります。
h
{\displaystyle h}
h
2
{\displaystyle h^{2}}
テイラーの定理 の剰余項にラグランジュ形式を用いることで、局所的打ち切り誤差の若干異なる定式化が得られる 。 が 連続2次導関数を持つ場合、 が存在する 。
y
{\displaystyle y}
ξ
∈
[
t
0
,
t
0
+
h
]
{\displaystyle \xi \in [t_{0},t_{0}+h]}
L
T
E
=
y
(
t
0
+
h
)
−
y
1
=
1
2
h
2
y
″
(
ξ
)
.
{\displaystyle \mathrm {LTE} =y(t_{0}+h)-y_{1}={\tfrac {1}{2}}h^{2}y''(\xi ).}
[11]
上記の誤差の式では、未知の正確な解の2次導関数は、 微分方程式の右辺を含む式に置き換えることができます。実際、この式から次の式が得られます [ 12]
y
{\displaystyle y}
y
′
=
f
(
t
,
y
)
{\displaystyle y'=f(t,y)}
y
″
(
t
0
)
=
∂
f
∂
t
(
t
0
,
y
(
t
0
)
)
+
∂
f
∂
y
(
t
0
,
y
(
t
0
)
)
f
(
t
0
,
y
(
t
0
)
)
.
{\displaystyle y''(t_{0})={\frac {\partial f}{\partial t}}{\bigl (}t_{0},y(t_{0}){\bigr )}+{\frac {\partial f}{\partial y}}{\bigl (}t_{0},y(t_{0}){\bigr )}\,f{\bigl (}t_{0},y(t_{0}){\bigr )}.}
グローバル切り捨てエラー
グローバル な切り捨て誤差 は、初期時間からその時間に到達するまでに何ステップもかかった後の、 固定時間 における誤差です。グローバルな切り捨て誤差は、各ステップで発生するローカルな切り捨て誤差の累積効果です。 [13] ステップ数は と簡単に決定でき 、これは に比例し 、各ステップで発生する誤差は に比例します (前のセクションを参照)。したがって、グローバルな切り捨て誤差は に比例することが予想されます 。 [14]
t
i
{\displaystyle t_{i}}
t
i
−
t
0
h
{\textstyle {\frac {t_{i}-t_{0}}{h}}}
1
h
{\textstyle {\frac {1}{h}}}
h
2
{\displaystyle h^{2}}
h
{\displaystyle h}
この直感的な推論は正確に行うことができます。解が 有界な2次導関数を持ち、その2番目の引数で リプシッツ連続で ある場合 、全体的な打ち切り誤差( と表記 )は次のように制限されます。
y
{\displaystyle y}
f
{\displaystyle f}
|
y
(
t
i
)
−
y
i
|
{\displaystyle |y(t_{i})-y_{i}|}
|
y
(
t
i
)
−
y
i
|
≤
h
M
2
L
(
e
L
(
t
i
−
t
0
)
−
1
)
{\displaystyle |y(t_{i})-y_{i}|\leq {\frac {hM}{2L}}\left(e^{L(t_{i}-t_{0})}-1\right)}
ここで、は 与えられた区間における の2次導関数の上限であり、 は のリプシッツ定数です 。 [15] またはもっと簡単に言うと、 のとき 、値 ( は 定数として扱われます)。対照的に、 の とき、関数は変数 のみを含む正確な解です 。
M
{\displaystyle M}
y
{\displaystyle y}
L
{\displaystyle L}
f
{\displaystyle f}
y
′
(
t
)
=
f
(
t
,
y
)
{\displaystyle y'(t)=f(t,y)}
L
=
max
(
|
d
d
y
[
f
(
t
,
y
)
]
|
)
{\textstyle L={\text{max}}{\bigl (}|{\frac {d}{dy}}{\bigl [}f(t,y){\bigr ]}|{\bigr )}}
t
{\displaystyle t}
M
=
max
(
|
d
2
d
t
2
[
y
(
t
)
]
|
)
{\textstyle M={\text{max}}{\bigl (}|{\frac {d^{2}}{dt^{2}}}{\bigl [}y(t){\bigr ]}|{\bigr )}}
y
(
t
)
{\displaystyle y(t)}
t
{\displaystyle t}
この境界の正確な形は実用上あまり重要ではない。なぜなら、ほとんどの場合、この境界はオイラー法によって犯される実際の誤差を大幅に過大評価するからである。 [16] 重要なのは、グローバルな打ち切り誤差が(ほぼ)に比例することを示していることである 。このため、オイラー法は一次法であると言われている。 [17]
h
{\displaystyle h}
例
微分方程式 、厳密解、および のときの および を 求めます 。 こうして、t=2.5 および h=0.5 における誤差境界を求めることができます。
y
′
=
1
+
(
t
−
y
)
2
{\displaystyle y'=1+(t-y)^{2}}
y
=
t
+
1
t
−
1
{\displaystyle y=t+{\frac {1}{t-1}}}
M
{\displaystyle M}
L
{\displaystyle L}
2
≤
t
≤
3
{\displaystyle 2\leq t\leq 3}
L
=
max
(
|
d
d
y
[
f
(
t
,
y
)
]
|
)
=
max
2
≤
t
≤
3
(
|
d
d
y
[
1
+
(
t
−
y
)
2
]
|
)
=
max
2
≤
t
≤
3
(
|
2
(
t
−
y
)
|
)
=
max
2
≤
t
≤
3
(
|
2
(
t
−
[
t
+
1
t
−
1
]
)
|
)
=
max
2
≤
t
≤
3
(
|
−
2
t
−
1
|
)
=
2
{\displaystyle L={\text{max}}{\bigl (}|{\frac {d}{dy}}{\bigl [}f(t,y){\bigr ]}|{\bigr )}=\max _{2\leq t\leq 3}{\bigl (}|{\frac {d}{dy}}{\bigl [}1+(t-y)^{2}{\bigr ]}|{\bigr )}=\max _{2\leq t\leq 3}{\bigl (}|2(t-y)|{\bigr )}=\max _{2\leq t\leq 3}{\bigl (}|2(t-[t+{\frac {1}{t-1}}])|{\bigr )}=\max _{2\leq t\leq 3}{\bigl (}|-{\frac {2}{t-1}}|{\bigr )}=2}
M
=
max
(
|
d
2
d
t
2
[
y
(
t
)
]
|
)
=
max
2
≤
t
≤
3
(
|
d
2
d
t
2
[
t
+
1
1
−
t
]
|
)
=
max
2
≤
t
≤
3
(
|
2
(
−
t
+
1
)
3
|
)
=
2
{\displaystyle M={\text{max}}{\bigl (}|{\frac {d^{2}}{dt^{2}}}{\bigl [}y(t){\bigr ]}|{\bigr )}=\max _{2\leq t\leq 3}\left(|{\frac {d^{2}}{dt^{2}}}{\bigl [}t+{\frac {1}{1-t}}{\bigr ]}|\right)=\max _{2\leq t\leq 3}\left(|{\frac {2}{(-t+1)^{3}}}|\right)=2}
error bound
=
h
M
2
L
(
e
L
(
t
i
−
t
0
)
−
1
)
=
0.5
⋅
2
2
⋅
2
(
e
2
(
2.5
−
2
)
−
1
)
=
0.42957
{\displaystyle {\text{error bound}}={\frac {hM}{2L}}\left(e^{L(t_{i}-t_{0})}-1\right)={\frac {0.5\cdot 2}{2\cdot 2}}\left(e^{2(2.5-2)}-1\right)=0.42957}
t 0 は 2 に等しいことに注意してください。これは、 における t の下限値だからです 。
2
≤
t
≤
3
{\displaystyle 2\leq t\leq 3}
数値安定性
(図 4) オイラー法でステップ サイズ (青い四角) と (赤い円) を使用して計算された の解。黒い曲線は正確な解を示しています。
y
′
=
−
2.3
y
{\displaystyle y'=-2.3y}
h
=
1
{\displaystyle h=1}
h
=
0.7
{\displaystyle h=0.7}
オイラー法は数値的に 不安定に なることもあり、特に 硬い方程式 の場合は、正確な解が存在しない方程式の数値解が非常に大きくなることを意味する。これは線形方程式を使用して説明できる。
y
′
=
−
2.3
y
,
y
(
0
)
=
1.
{\displaystyle y'=-2.3y,\qquad y(0)=1.}
正確な解は で 、 のときにゼロに減少します 。しかし、ステップ サイズ でこの方程式にオイラー法を適用すると 、数値解は質的に間違っています。つまり、振動して増大します (図を参照)。これが不安定であるということです。たとえば、より小さなステップ サイズを使用すると 、数値解はゼロに減少します。
y
(
t
)
=
e
−
2.3
t
{\displaystyle y(t)=e^{-2.3t}}
t
→
∞
{\displaystyle t\to \infty }
h
=
1
{\displaystyle h=1}
h
=
0.7
{\displaystyle h=0.7}
(図5) ピンク色の円はオイラー法の安定領域を示しています。
オイラー法を線形方程式に適用すると、積が 領域外にある
場合、数値解は不安定になる。
y
′
=
k
y
{\displaystyle y'=ky}
h
k
{\displaystyle hk}
{
z
∈
C
|
|
z
+
1
|
≤
1
}
,
{\displaystyle {\bigl \{}z\in \mathbf {C} \,{\big |}\,|z+1|\leq 1{\bigr \}},}
右に図示されているように、この領域は(線形) 安定領域 と呼ばれます。 [18] この例では 、 なので、 の場合 、 は安定領域外となり、したがって数値解は不安定になります。
k
=
−
2.3
{\displaystyle k=-2.3}
h
=
1
{\displaystyle h=1}
h
k
=
−
2.3
{\displaystyle hk=-2.3}
この制限と、誤差の収束が遅いことから 、オイラー法は数値積分の簡単な例を除いてはあまり使用されません [ 要出典 ] 。物理システムのモデルには、減衰の速い要素 (つまり、大きな負の指数引数を持つ要素) を表す項が含まれることがよくあります。これらが全体的なソリューションでは重要でない場合でも、これらが引き起こす不安定性により、オイラー法を使用する場合は例外的に小さなタイムステップが必要になります。
h
{\displaystyle h}
丸め誤差
オイラー法の ステップでは、 丸め誤差 はおおよそ の大きさで、 は マシンイプシロン です 。丸め誤差が独立したランダム変数であると仮定すると、期待される合計丸め誤差は に比例します 。 [19]したがって、ステップサイズが極端に小さい値の場合、切り捨て誤差は小さくなりますが、丸め誤差の影響は大きくなる可能性があります。オイラー法の式で 補正加算 を使用すれば、丸め誤差の影響のほとんどを簡単に回避できます 。 [20]
n
{\displaystyle n}
ε
y
n
{\displaystyle \varepsilon y_{n}}
ε
{\displaystyle \varepsilon }
ε
h
{\textstyle {\frac {\varepsilon }{\sqrt {h}}}}
変更と拡張
上記の安定性の問題を排除するオイラー法の単純な修正法は、 後退オイラー法 です。
y
n
+
1
=
y
n
+
h
f
(
t
n
+
1
,
y
n
+
1
)
.
{\displaystyle y_{n+1}=y_{n}+hf(t_{n+1},y_{n+1}).}
これは、関数が ステップの開始点ではなく終了点で評価される点で、(標準または前進) オイラー法とは異なります。後退オイラー法は 暗黙的な方法 であり、つまり、後退オイラー法の式は 両辺に を持つため、後退オイラー法を適用するときは方程式を解く必要があります。これにより、実装コストが高くなります。
f
{\displaystyle f}
y
n
+
1
{\displaystyle y_{n+1}}
安定性を高めるためにオイラー法を修正した他の方法として、 指数オイラー法 や 半暗黙的オイラー法が あります。
より複雑な方法では、より高い次数(およびより高い精度)を達成できます。1 つの可能性は、より多くの関数評価を使用することです。これは、この記事ですでに説明した 中点法 によって説明されます。
y
n
+
1
=
y
n
+
h
f
(
t
n
+
1
2
h
,
y
n
+
1
2
h
f
(
t
n
,
y
n
)
)
{\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\tfrac {1}{2}}h,y_{n}+{\tfrac {1}{2}}hf(t_{n},y_{n})\right)}
。
これにより、ルンゲ・クッタ法 のファミリーが生まれます 。
もう 1 つの可能性は、2 段階の Adams-Bashforth 法で示されるように、より多くの過去の値を使用することです。
y
n
+
1
=
y
n
+
3
2
h
f
(
t
n
,
y
n
)
−
1
2
h
f
(
t
n
−
1
,
y
n
−
1
)
.
{\displaystyle y_{n+1}=y_{n}+{\tfrac {3}{2}}hf(t_{n},y_{n})-{\tfrac {1}{2}}hf(t_{n-1},y_{n-1}).}
これは線形多段階法 のファミリーにつながる 。メモリ使用量を最小限に抑えるために圧縮センシングの技術を使用する他の修正もある [21]
大衆文化では
映画 『Hidden Figures』 では、 キャサリン・ゴーブルが宇宙飛行士 ジョン・グレン の地球軌道からの 再突入を計算する際にオイラー法を利用している。 [22]
参照
注記
^ ブッチャー 2003、p. 45; ヘアラー、ノーセット、ワナー 1993、p. 35
^ アトキンソン 1989、342 ページ; ブッチャー 2003、60 ページ
^ ブッチャー 2003、p. 45; ヘアラー、ノーセット、ワナー 1993、p. 36
^ ブッチャー 2003、p. 3; ヘアラー、ノーセット、ワナー 1993、p. 2
^ アトキンソン 1989、344 ページも参照
^ ハイラー、ノーセット、ワナー、1993、p. 40
^ アトキンソン 1989、342 ページ; ヘアラー、ノーセット、ワナー 1993、36 ページ
^ アトキンソン 1989、342 ページ
^ アトキンソン 1989、343 ページ
^ ブッチャー 2003、60 ページ
^ アトキンソン 1989、342 ページ
^ Stoer & Bulirsch 2002、p. 474
^ アトキンソン 1989、344 ページ
^ ブッチャー 2003、49 ページ
^ アトキンソン、1989、p. 346;ラコバ 2012、方程式 (1.16)
^ イゼルレス 1996、7 ページ
^ ブッチャー 2003、63 ページ
^ ブッチャー 2003、p. 70; イザールズ 1996、p. 57
^ ブッチャー 2003、74-75 ページ
^ ブッチャー 2003、75-78 ページ
^ Unni, MP; Chandra, MG; Kumar, AA (2017 年 3 月)。「圧縮センシングを使用した微分方程式の数値解のメモリ削減」。2017 IEEE 第 13 回信号処理とその応用に関する国際会議 ( CSPA) 。pp. 79–84。doi :10.1109/ CSPA.2017.8064928。ISBN 978-1-5090-1184-1 . S2CID 13082456。
^ カーン、アミナ(2017年1月9日)。「アメリカ人を宇宙に送るのを助けた『Hidden Figures』の数学者に会おう」 ロサンゼルス・タイムズ。 2017年 2月12日 閲覧 。
参考文献
アトキンソン、ケンドール A. (1989)。 数値解析入門 ( 第 2 版)。ニューヨーク: John Wiley & Sons。ISBN 978-0-471-50023-0 。
Ascher, Uri M.; Petzold, Linda R. (1998)。『常微分方程式と 微分 代数方程式のコンピュータ手法』フィラデルフィア: 産業応用数学協会 。ISBN 978-0-89871-412-8 。
ブッチャー、ジョン C. ( 2003)。 常微分方程式の数値解析法 。ニューヨーク: John Wiley & Sons。ISBN 978-0-471-96758-3 。
ハイラー、エルンスト。ノーセット、シベール・ポール。ゲルハルト、ワナー (1993)。 常微分方程式を解く I: 非スティッフ 問題ベルリン、ニューヨーク: Springer-Verlag 。 ISBN 978-3-540-56670-0 。
イザールズ、アリエ (1996)。微分方程式の数値解析入門。 ケンブリッジ大学 出版局 。ISBN 978-0-521-55655-2 。
ステア、ジョセフ。ブリルシュ、ローランド (2002)。 数値解析入門 (第 3 版)。ベルリン、ニューヨーク: Springer-Verlag 。 ISBN 978-0-387-95452-3 。
Lakoba, Taras I. (2012)、Simple Euler method and its modifications (PDF) (MATH334 の講義ノート)、University of Vermont 、 2012 年 2 月 29 日閲覧
Unni, M P. (2017). 「圧縮センシングを用いた微分方程式の数値解法におけるメモリ削減」 2017 IEEE 第 13 回信号処理とその応用に関する国際会議 (CSPA) IEEE CSPA. pp. 79–84. doi :10.1109/CSPA.2017.8064928. ISBN 978-1-5090-1184-1 . S2CID 13082456。
外部リンク
ウィキブック 微積分には オイラー法 に関するページがあります。