数値計算法

数値計算及び実習
第12回 応用プログラミング(4)
応用プログラミング(4)
1. 微分方程式(初期値問題)
・オイラー法
・ルンゲ クッタ法
常微分方程式の初期値問題
常微分方程式の初期条件を満たす特殊解を
求める問題
dy
 f x , y 
dx
yx 0   y0
これは以下の式として表すことができる。
x
y  y 0   f  , y d
x0
数値解法
・数値解法では、x0,x1,x2…といった離散的なxの値に対して
yの値(y0,y1,…)を計算することになる。
・xi(n=0,1,2…)を分点、その間隔を刻み(h)という。
y
y
刻みh
x
x
分点
数値解法の種類
• 一段階法: yi 1  yi  h xi , yi 
φ(xi,yi):増分関数
• 多段階法: yi 1  yi r  h b j f xi  j , yi  j 
p
j 0
• 予測子・修正子法: 多段階法を、繰
り返し手続きを用いて計算する方法
※今回は一段解法について説明
テイラー展開
刻みhが十分に小さいものとして、yi+1=y(xi+h)をx=xi
まわりでテイラー展開すると、以下のようになる。
1 2
1 i (i )
yi 1  yi  hy' xi   h y" xi     h y xi   
2!
i!
f ( xi , yi ) 
1  f ( xi , yi )
  
 yi  hf xi , yi   h 2 
 f ( xi , yi )
2! 
x
y

i 1


1 i 
 
 h   f ( xi , yi )  f xi , yi   
i!  x
y 


オイラー法
y(x)
(xi+2,yi+2)
yi 1  yi  hf xi , yi 
(xi+1,yi+1)
hf(xi,yi)
(xi,yi)
・テイラー展開した式の第二項
以下を無視
・増分関数φ(x,y)をf(x,y)と
xi
xi+1
xi+2
したもの
・ (xi,yi)における傾きf(xi,yi)と刻みhから増分を計算し、
(xi+1,yi+1)を得る(以下、これを繰り返す)。
・折れ線で、f(x)を近似
x
ルンゲクッタ法
k1  2k 2  2k3  k 4
yi 1  yi 
6
k1  hf xi , yi 
k2 
h

k 3  hf  xi  , y i  
2
2

k1 
h

k 2  hf  xi  , yi  
2
2

k 4  hf xi  h, yi  k 3 
・4次のルンゲクッタ法
・テイラー展開のh4までの項が等しくなるように
作られている
ルンゲクッタ法(続き)
y(x)
1) A点における傾きから
k1を計算
(xi+1,yi+1)
k4
2) B点(xi+h/2,yi+k1/2)におけ
る傾きからk2を計算
5) k1 ~k4の重み付き平均を
増分として、これをyiに加える
ことによりyi+1を求める
k3
C
3) C点(xi+h/2,yi+k2/2)におけ (xi,yi)
る傾きからk3を計算
4) C点(xi+h,yi+k3)における
傾きからk4を計算
D
A
k1
B
h/2
xi
k2
h/2
xi+1/2
xi+1
x