計算情報学Ｉ
名古屋大学 情報文化学部
自然情報学科３年
第１１回

鈴木泰博
情報文化学部・大学院情報科学研究科
複雑系科学専攻

Science ofinteractions

Agenda

計算情報学 Ｉ 第１１回
微分方程式の数値解法

その１

Science ofinteractions

微分方程式の数値解法
初期値問題
ydxdy
初期値xf ( x, y)とは、x,yの各々の点での傾きがf(x,y)の値を持つ方程式を表している。

こうした解曲線は一般には無数に存在するが、初期値を与えることによりそこからの値をたどることで一意に決めることができる。

Science ofinteractions

微分方程式の数値解法
初期値問題〜オイラー法
計算機で解くので 連続は扱えない
そこで、離散点をとることで近似する。

f ( xnhxnxn+1h)hf ( xn )f ( xn )

上式においてhが十分に小さくとっていくことにより、近似的に導関数を求めることができる。

Science ofinteractions

微分方程式の数値解法〜オイラー法F(xn,yn) hhxn

f ( xnこれを繰り返すことにより折れ線近似を行う。
xn+1h)
hf ( xn )f ( xn )演習：上式をf(xn+h)について解け.ただし、f’(x)=F(x,y)とする。
Science ofinteractions

オイラー法の基本式
f ( xnh)hf ( xn )f ( xnh)f ( x0 )af ( xn )f ( xn ) hF ( xn , yn )オイラー法の基本式
演習：以下の微分方程式に対するオイラー法の基本式を求めよ。
① 2y’ + 3y = x② y’ – xy = 0

Science ofinteractions

オイラー法の基本式
演習：以下のオイラー法の基本式について最初の数項のみ計算せよ。
① y’=y (x + h) = y (x) + h (x – 3y(x)) / 2
ただし、y(0) = 1, h = 0.1 とする。

② y’=y (x + h) = y (x) + hxy(x)ただし、y(1) = 1, h = 0.01とする。

Science ofinteractions

① y (x + h) = y (x) + h (x – 3y(x)) / 2y(0) = 1, h = 0.1
y (0 + 0.1) = y(0) + 0.1 (0 – 3y(0)) / 2= 1 + 0.1 (0 – 3 x 1) / 2 = 0.85y(0.1 + 0.1) = y (0.1) + 0.1 (0.1 – 3y(0.1)) / 2= 0.85 + 0.1(0.1 – 3 x 0.85)/2= 0.7275② y (x + h) = y (x) + hxy(x)y(1) = 1, h = 0.01
y (1 + 0.01) = y (1) + 0.01 x 1 x y(1)= 1 + 0.01 x 1 x 1 = 1.01
y (1.01 + 0.01) = y (1.01) + 0.01 x 1.01 x y(1.01)= 1.01 + 0.01 x 1.01 x 1.01 = 1.020201
Science ofinteractions

オイラー法another view①

演習：カッコ内を埋めよ。
微分方程式の初期値問題は、

yf ( x, y)y(a )y0の形で書ける。数値計算での解は厳密解が得られないので近似解を得ることを考える。そこで考える区間を等分割し、x0=a, xn=a+nh, n=1,2,…N とする。
y (x )を x=x0 の近傍でテイラー展開すると（第０項から２項）①()

y(x0) = y0=Y0, y’(x0) = f (x0, y0) 2乗の項を無視してx = x0 + h = x1
y(x1)の近似値をY1≒y(x1)とすると、(②)
Science ofinteractions

オイラー法another view①

演習：カッコ内を埋めよ。
微分方程式の初期値問題は、

yf ( x, y)y(a )y0の形で書ける。数値計算での解は厳密解が得られないので近似解を得ることを考える。そこで考える区間を等分割し、x0=a, xn=a+nh, n=1,2,…N とする。
y (x )を x=x0 の近傍でテイラー展開すると

y( x)y( x0 ) ( x x0 ) y ( x0 )1
( x x0 ) 2 y ( 0 )2y(x0) = y0=Y0, y’(x0) = f (x0, y0) 2乗の項を無視してx = x0 + h = x1
y(x1)の近似値をY1≒y(x1)とすると、

Y1Y0

hf ( x0 , y0 )Science ofinteractionsオイラー法
another view①

微分方程式の初期値問題は、の形で書ける。数値計算での解は厳密解が得られないので近似解を得ることを考える。そこで考える区間を等分割し、x0=a, xn=a+nh, n=1,2,…Nとする。
y f ( x, y)y(a )y (x )を x=x0 の近傍でテイラー展開すると
y( x)y( x0 ) ( x x0 ) y ( x0 )y01
( x x0 ) 2 y ( 0 )2y(x0) = y0=Y0, y’(x0) = f (x0, y0) 2乗の項を無視してx = x0 + h = x1
y(x1)の近似値をY1≒y(x1)とすると、

Y1Y0

hf ( x0 , y0 )同様にY2=Y1+hf(x1,Y1)
Y3=Y2+hf(x2, Y2)
….

Yn 1

Yn

Y0 y0
hf ( xn , yn ), n0,1,2,..., N 1

オイラー法とはテイラー展開を第１項で打ち切って近似解を求める方法

Science ofinteractions

オイラー法another view ②微分方程式と解析的に解く場合ってどうしましたっけ？

Science ofinteractions

オイラー法another view②xn 1

y( xn 1 )…

y( xn )f ( x, y( x))dx
xnxj

xj+1

この面積を hf(xｊ, yｊ,)で近似
Science ofinteractions

オイラー法のまとめ①yn 1ynhf ( xn , yn )y’=f(x, y)の左辺を差分で置き換えたもの。

1( x x0 ) 2 y ( 0 )2
テイラー展開を第１項で打ち切ったもの② y( x)y( x0 ) ( x x0 ) y ( x0 )xn 1③ y( xn 1 ) y( xn )f ( x, y( x))dxxn

積分をhf(x,y)で置き換えたもの

簡便な方法ではあるが、精度はあまりよくない。
例） y’=2xy
Science ofinteractions

ルンゲ-クッタ法• 精度を上げる方法はいろいろあるが、本方法では直前のYnの値のみを用いて、オイラー法のごとく計算できる(１段階法）• オイラー法に比べてずっと精度がよい• 微分方程式の数値解法における標準手法
Science ofinteractions

ルンゲ-クッタ法
k1k2k3k4y( xi 1 )計算例

f ( xi , yi )k1
hf ( xi, yi)22k2
hf ( xi, yi)
22f ( xi h, yi hk3 )h(k162k2

2 k3

k4 )
Science ofinteractions