講義・実習メモ

2015 年度・前期・数理解析・計算機数学3・第8回
1
● 講義資料
▼ 講義予定
• 常微分方程式の初期値問題の数値解法
– 前進オイラー法・後退オイラー法の誤差評価
– テイラー展開法
– 修正オイラー法と数値的不安定性
● 前回の講義のまとめ
★ 前進オイラー法
• 最も単純な離散変数法は, 前進オイラー法
xn+1 = xn + hf (tn , xn )
である. (単に「オイラー法」と言ったときには, この前進オイラー法を指す.)
• 微分方程式を離散変数法で数値的に解く場合には, 微分
がある. そのため, 以下のように差分化を行う.
dx
を何らかの形で離散化する必要
dt
x(t + h) − x(t)
dx
(t) = lim
h→0
dt
h
を t = tn で考えれば, h > 0 が小さいと仮定して,
dx
x(tn + h) − x(tn )
x(tn+1 ) − x(tn )
(tn ) = lim
∼
h→0
dt
h
h
と書き直すことができる. (これを前進差分と呼ぶ.)これを, 微分方程式 x′ = f (t, x) に適
用すれば,
x(tn+1 ) − x(tn )
∼ f (tn , xn )
h
x(tn+1 ) ∼ x(tn ) + hf (tn , x(tn ))
となる. したがって, 前進オイラー法の計算スキーム
xn+1 = xn + hf (tn , xn )
に相当する式を得ることができる.
• 前進オイラー法のスキームの右辺は, 直前の xn の値があれば直接計算可能である. その意味
で陽的解法 (explicit method) となっている.
• 前進オイラー法のスキームは, 直前の xn の値のみで, 次の xn+1 を計算可能である. その意
味で1段階法となっている.
Jun. 08, 2015, Version: 1.0
[email protected]
2015 年度・前期・数理解析・計算機数学3・第8回
2
★ 後退オイラー法
• 前進オイラー法での差分化を行った点を t = tn ではなく t = tn+1 での値と考える. すなわち
x(tn + h) − x(tn )
x(tn+1 ) − x(tn )
dx
(tn+1 ) = lim
∼
h→0
dt
h
h
と書き直すことができる. これを, 微分方程式 x′ = f (t, x) に適用すれば,
x(tn+1 ) − x(tn )
∼ f (tn+1 , xn+1 )
h
x(tn+1 ) ∼ x(tn ) + hf (tn+1 , x(tn+1 ))
となる計算スキームを得ることができる. (これを後退差分と呼ぶ.)このようにして得られ
た計算スキーム
xn+1 = xn + hf (tn+1 , xn+1 )
を後退オイラー法 (backward Euler method) と呼ぶ.
• 後退オイラー法のスキームは, 直前の xn の値のみで, 次の xn+1 を計算可能である. その意
味で1段階法となっている.
• 後退オイラー法のスキームの右辺は, 直前の xn の値だけからは直接計算できない. その意味
で陰的解法 (implicit method) となっている.
この詳細な意味は以下の通りである.
– 微分方程式 x′ (t) = x(t) に後退オイラー法を適用すると,
xn+1 = xn + hxn+1
を得る. ここで, xn から xn+1 を得るためには, この式を代数的に xn+1 について解
いて,
xn+1 =
として計算する必要がある.
1
xn
1−h
– 微分方程式 x′ (t) = sin(x(t)) に後退オイラー法を適用すると,
xn+1 = xn + h sin(xn+1 )
を得る. ここで, xn から xn+1 を得るために, この式を代数的に xn+1 について解くこ
とはできない. したがって, 逐次近似
y0 = xn ,
yk+1 = xn + h sin(yk )
を用いて, その極限として xn+1 を求める必要がある. (なお, h が十分に小さければ,
この逐次近似が収束することを証明できる.)
Jun. 08, 2015, Version: 1.0
[email protected]
2015 年度・前期・数理解析・計算機数学3・第8回
3
★ オイラー法の誤差
• 今後, 考える微分方程式の初期値問題は,
x′ (t) = f (x(t))
の形をしていると仮定する. もし, x′ (t) = f (t, x(t)) の形をしている場合には, X(t) = (t, x(t))
とおき, X(t) に関する微分方程式を考えることにより, x′ (t) = f (x(t)) に帰着できるので, こ
の形の微分方程式だけを考えても一般性を失わないことに注意する必要がある.
• 関数 x のテイラー展開と, 前進オイラー法の計算スキームを書くと,
h2 ′′
x (tn ) + O(h3 ),
2
h2
= x(tn ) + hf (x(tn )) + f (x′ (tn ))f (x(tn )) + O(h3 ),
2
= xn + hf (xn )
x(tn+1 ) = x(tn ) + hx′ (tn ) +
xn+1
x(tn+1 ) − xn+1 = x(tn ) − xn + h(f (x(tn )) − f (xn )) +
h2 ′
f (x(tn ))f (x(tn )) + O(h3 )
2
と計算できる. ここで, f がリプシッツ条件
|f (p) − f (q)| ≤ L|p − q|
をみたし, f はなめらかであると仮定すると,
|x(tn+1 ) − xn+1 | ≤ (1 + Lh)|x(tn ) − xn | + M h2
が成り立つ.
• 後退オイラー法の場合には,
h2 ′′
x (tn+1 ) + O(h3 ),
2
h2
= x(tn+1 ) − hf (x(tn+1 )) + f (x′ (tn+1 ))f (x(tn+1 )) + O(h3 ),
2
= xn + hf (xn+1 )
x(tn ) = x(tn+1 ) − hx′ (tn+1 ) +
xn+1
x(tn+1 ) − xn+1 = x(tn ) − xn + h(f (x(tn+1 )) − f (xn+1 )) +
h2 ′
f (x(tn+1 ))f (x(tn+1 )) + O(h3 )
2
より,
|x(tn+1 ) − xn+1 | ≤ (1 − Lh)−1 |x(tn ) − xn | + M h2
が成り立つ.
• 前進オイラー法, 後退オイラー法のいずれの場合にも,
ǫn+1 = Aǫn + M h2 ,
ǫn = |x(tn ) − xn |
の形の不等式を得ることができた. この評価を局所離散化誤差と呼び, ある時刻 t = tn にお
いて, 数値解の値 xn と厳密解の値 x(tn ) が一致しているとき, 1ステップ進んだ際の誤差が
O(h2 ) であることを示している.
Jun. 08, 2015, Version: 1.0
[email protected]
2015 年度・前期・数理解析・計算機数学3・第8回
4
• この局所離散化誤差の不等式から t = T = N h においての誤差
|x(T ) − xN | ≤ CheT L , 前進オイラー法,
|x(T ) − xN | ≤ CheT L , 後退オイラー法,
を得ることができる. すなわち, オイラー法は誤差が h に関して1次の公式であることがわ
かる.
● 講義資料
▼ 修正オイラー法による数値計算
x’ = -x (Modified Euler, h=0.01)
3
2.5
2
1.5
1
0.5
0
0
0.2
0.4
0.6
0.8
1
x′ (t) = x(t), x(0) = 1
x’ = -x (Modified Euler, h=0.01)
x’ = -x (Modified Euler, h=0.001)
1.5
1.5
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
-1
0
0.5
1
1.5
2
2.5
3
3.5
x′ (t) = x(t), x(0) = 1, h = 0.01
4
0
1
2
3
4
5
6
7
x′ (t) = −x(t), x(0) = 1, h = 0.001
● 実習内容
1. (★)テイラー展開法を用いて, 6回目資料の微分方程式 1, 2 を解きなさい.
2. (★★)修正オイラー法を用いて, 6回目資料の微分方程式 1 (λ = −1) を解きなさい.
√
3. (★★)Fibinacchi 数列 xn+2 = xn+1 + xn , x0 = 1, x1 = (1 − 5)/2 の一般項の近似値を,
この漸化式を使って計算しなさい. その結果が, 本来の挙動(一般項を explicit に計算した値
の挙動)と異ることを確認しなさい.
Jun. 08, 2015, Version: 1.0
[email protected]