• 検索結果がありません。

(2)常微分方程式のルンゲ・クッタ法による解法

N/A
N/A
Protected

Academic year: 2021

シェア "(2)常微分方程式のルンゲ・クッタ法による解法"

Copied!
62
0
0

読み込み中.... (全文を見る)

全文

(1)

電気 303/ 電情 303 数値解析 (12) 微分方程式の数値解法 (2)

常微分方程式の

ルンゲ・クッタ法による解法

(2)

• 解くべき微分方程式はdx

dt =f(x, t)

• 取り扱うのは離散変数法(時刻(t0, t1, . . . , tN) で微分方程式の数値解を計算)

• hk = tk+1−tkをステップ幅という. hkがk によらず一定のときにはhと書く.

• x(tk)のことをxkと書く.

(3)

• 常微分方程式の数値解法:1段法 と 多段法.

段は英単語stepの訳.

• 1段法の一般形:

explicit(陽的)な公式: ξk+1k+hkΨ(tkk, hk) implicit(陰的)な公式:

ξk+1k+hkΨ(tk, tk+1kk+1, hk)

(4)

• まず, Euler法より精密なΨの構成法である Runge-Kutta型公式について述べ(おもにex-

plicitな公式),続いて多段法について述べる.

• 参考文献は前回と同じなので再掲しない.

• 以下では, x(t)は dx

dt =f(x, t)の解とする.

(5)

• Runge-Kutta型公式は代表的な1段法.

• 平均値の定理から, ∃Φ(tk,xk, hk), xk+1 = xk+hkΦ(tk,xk, hk). Φ(tk,xk, hk)は未知な ので, 既知のΨ(t,x(t), hk)で近似する.

• Ψ(t,x(t), hk)−Φ(t,x(t), hk)を局所離散化誤 差といい, τ(t, r)と書く.

(6)

• ある公式が∃C > 0, ∃ρ > 0, ∀r : 0 < r < ρ,

∀t ∈ [a, b], kτ(t, r)k ≤ Crpを満たすとき, その公式をp次精度の公式, あるいはp次の 公式という.

区間の右端では,たとえばx(t+r)x(t)x(t)x(t−r)で読み換えるな どといった,若干の読み換えが必要.

(7)

• ステップ幅が一定であるとき(hとする),p次 精度の公式に対し, あるL >0が存在して,

∀k,kxk−ξkk ≤ eL(b−a) L Chp

となることが示せる([齊藤], pp. 225–226).

(8)

• Runge-Kutta型の公式は, いくつかの点にお けるf(x, t)の値を組み合わせてΨを構成す ることでp次精度(p≥1)の公式を得る方法 の総称.

• 色々なバリエーションがある.

• Heun法はRunge-Kutta法の一種.

(9)

• Ψを構成するために関数fの値をs個の点に おいて評価するとき, これをs段数(s-stage) のRunge-Kutta法と呼ぶ([齊藤])

• s段数のRunge-Kutta法を構成する目的は, その公式がp次精度となるようにすること.

(10)

• s ≥pである必要があることが示せるが([齊 藤]), s=pとは限らない.

• 一般論の前に, 代表的な公式を紹介する(見 方がわかればよく, 覚える必要はない).

• 差分方程式ξk+1k+hkΨ(tkk, hk)にお ける関数Ψをp次精度となるようにしたい.

(11)

⊲ 2段数のRunge-Kutta法

• 2段数のRunge-Kutta法は, k1 = f(ξk, tk), k2 =f(ξk+hkβk1, tk+αhk)とし, Ψ(tkk) = c1k1+c2k2とする公式である. α,β,c1,c2を うまく選ぶと2次精度となる.

(12)

• 2段数のexplicitなRunge-Kutta法において, α > 0とし, β = α, c1 = 1− 1 , c2 = 1 とすると, 2次精度が達成できることが示せ る. この意味で, 2段数2次精度のexplicitな

Runge-Kutta法には,無限のバリエーション

がある([齊藤], pp. 227–229).

• よく知られた選び方を次ページに示す.

(13)

2段数Runge-Kutta α β c1 c2 Heun法 1 1 12 12 改良Euler法 12 12 0 1

(14)

開し,その低次の項が零になるように係数合わせをすること によって得られる. 計算は繁雑ではあるが,機械的にできる.

すべてのRunge-Kutta法を特徴付けることにはあまり意味

がないので,以下ではよく知られたパラメータの選び方のみ をを紹介する. 以下で述べる,より高い段数のRunge-Kutta 法についても,「なぜそんなパラメータを選ぶか」が一見し て明らかでないと思われるが,それらは「辻褄が合うように 係数合わせをして,うまくいったものの例」に過ぎない.

(15)

⊲ 4段数のRunge-Kutta法

• 4段数のRunge-Kutta法は, kj =f(ξk+hkP

l<jβjlkl, tkjhk) (ただし j = 1, . . . ,4,P

l<jβjlj)とし, Ψ(tkk) = P4

j=1cjkj(ただしP4

j=1cj = 1)とする公式で ある. (j = 1のときはP

l<j· · · の項は· · · の 部分にかかわらず零と定義する).

(16)

Rungeの1/6公式 α1 α2 α3 α4 c1 c2 c3 c4

0 12 12 1 16 13 13 16 β21= 12, β32= 12, β43= 1

記載のないパラメータは零

この公式は, RK4, RK41,古典的Runge-Kutta法など,色々の名前で呼ばれる.

(17)

Kuttaの1/8公式 α1 α2 α3 α4 c1 c2 c3 c4

0 13 23 1 18 38 38 18 β21= 13, β31=−13, β32= 1 β41= 1, β42=−1, β43 = 1

記載のないパラメータは零

(18)

• 続いて, Runge-Kutta法の一般形とその表記 法について述べる.

• Ψ(tkk) =

s

X

j=1

cjkj, Ps

j=1cj = 1 という構 成を考える. kjは後述. j = 1, . . . , sに注意.

(19)

Explicit(陽的):P

l<jβjljとしたとき, kj =f(ξk+hkX

l<j

βjlkl, tkjhk), Implicit(陰的):Ps

l=1βjljとしたとき, kj =f(ξk+hk

s

X

l=1

βjlkl, tkjhk)

(20)

• Euler法は1段数のRunge-Kutta法であると 解釈できる.

• s段数のRunge-Kutta型公式は, s個のパラ メータα1, . . . , αs,s個のパラメータc1, . . . , cs およびs2個のパラメータ(βil)によって特徴 付けられる. ただし,αj =Ps

l=1βjlである.

(21)

• Runge-Kutta型公式のパラメータを簡潔に表 示するために, Butcher配列という形式が用 いられる. これは, 次のような表である.

α1 β11 β12 · · · β1s α2 β21 β22 · · · β2s ... ... ... ... αs βs1 βs2 · · · βss

c1 c2 · · · cs

(22)

• explicitな公式のButcher配列では,右下がり の対角線とその上の要素は零である.

• s = p = 2, s = p = 3, s = p = 4の場合 は,パラメータを含んだRunge-Kutta型公式 の一般形(のButcher配列)を書き下すことが できる([Butcher]).

(23)

• s = p = 2とした場合のexplicitな公式の一 般形についてはすでに述べた.

• s=p= 3,s=p= 4については,パラメータ 値に関する場合分けが必要で繁雑なので,こ の講義では述べない([Butcher]参照).

• 以下, Butcher配列の例を示す([齊藤]).

(24)

前進Euler法

1 後退Euler法

1 2段数 (s =p= 2) [齊藤]

Heun法 改良Euler法 Crank–Nicolson法 0 0 0

1 1 0

1 2

1 2

0 0 0

1 2

1 2 0 0 1

0 0 0 1 12 12

1 2

1 2

(25)

Heun法 Kutta法

0 0 0 0

1 4

1

4 0 0

2

329 89 0

1

4 0 34

0 0 0 0

1 2

1

2 0 0

1 −1 2 0

1 6

2 3

1 6

(26)

0 0 0 0 0

1 2

1

2 0 0 0

1

2 0 12 0 0 1 0 0 1 0

1 6

1 3

1 3

1 6

0 0 0 0 0

1 3

1

3 0 0 0

2

313 1 0 0 1 1 −1 1 0

1 8

3 8

3 8

1 8

(27)

• B= (βjl)1≤j≤s,1≤l≤sをButcher配列の中央部 にある行列, α= (α1, . . . , αs)T を左側にある ベクトル, c = (c1, . . . , cs)を下側にあるベク トルとし, 対応するButcher配列を(B,α,c) と表記する.

(28)

• explicit な Runge-Kutta法に関し, p ≥ 5な らp段数ではp次精度は実現不可,p≥7なら p+ 1段数ではp次精度は実現不可,p≥8な らp+ 2段数ではp次精度は実現不可という 事実が知られている([Hairer et al], Vol. 1).

• 上記は指定された下限より大きいsに対して 公式の存在を保証するわけではない.

(29)

• 5次精度については6段数, 6次精度について は7段数, 8次精度については11段数, 10次 精度については17段数の公式が知られてい る([Hairer et al], Vol. 1).

• 浮動小数点演算の誤差のため, 高次精度の公 式がつねに実用的とは限らない.

(30)

• 今までの議論では, ステップ幅の決め方は議 論されていなかった.

• 後に述べるように, Butcher配列(B,α,c)を 持つp+1次精度の公式と, Butcher配列(B,α,c) を持つp次精度の公式が存在すれば, これを 使って誤差を見積ることができる.

(31)

• いくつかの(p, p+ 1)の組み合わせについて, 上述のようなButcher配列が存在することが 知られている.

• このようになっているとき, s段数p+ 1次精 度の公式にp次精度の公式が埋め込まれてい ると表現する([齊藤]).

(32)

• 上記のようなRunge-Kutta法の組み合わせ を埋め込み型Runge-Kutta法と呼ぶ([齊藤]).

その用途は, 数値解に含まれる誤差の見積り である.

• (B,α,c)に対応するRunge-Kutta法が生成 する数値解を(ξk), (B,α,c)に対応するRunge- Kutta法が生成する数値解を(ξk)とする.

(33)

• 詳細は省くが,kξk−ξkkの値から,数値解に 含まれる誤差を見積ることができる(ただし, 近似を含むので,精密な評価ではない).

• 誤差の見積りが一定以下になるまでステップ 幅をどんどん小さくしてゆく手法をステップ 幅の自動調整という.

(34)

• ステップ幅の自動調整により, 数値解の正し さを, ある程度保証することができる(近似 が含まれるので厳密ではない). 詳細につい ては[齊藤]を参照.

• Scilabに実装されているRKF45は埋め込み 型Runge-Kutta法で, 6段数5次精度の公式 に4次精度の公式が埋め込まれている.

(35)

• この講義では今までほとんど述べなかったが, implicitなRunge-Kutta法は硬い問題(後述) やdifferential-algebraic equationを解くのに 用いられる. ただし, 内部反復を必要とする ため, 必ずしも使いやすいわけではない.

• implicitなRunge-Kutta法に興味がある者は [Hairer et el.]や[Butcher]などを参照せよ.

(36)

線形微分方程式 dtx =Axにおいて, 行列A 固有値がすべて相異なり,それら実部がすべて負 であるものとする.

• Aの固有値のうち実部が最小のものをλm, 最大 のものをλM とする.

• |ReλM|/|Reλm|を硬度比という.

硬度比が大きい問題を硬い問題という. 硬い問題 は数値的に解きにくいことが知られている.

(37)

• 多段法は, ξk+1を構成するために, ξkだけで なく, 過去の数値解の系列(ξk−L, . . . ,ξk)に 関連した情報を使う方法の総称(復習).

• Runge–Kutta法では,複数の点での関数値の 線形結合により高精度の公式を得ていたが, 多段法は, (ξk−L, . . . ,ξk)を使うことで類似し た効果を得ることを意図している.

(38)

• 記法の便宜上, ξk+Lを(ξk, . . . ,ξk+L−1)に関 連した情報を使って構成するという形で問題 を考え直す.

• 簡単のために, この講義では, 多段法ではス テップ幅はhに固定されているものとする

(ステップ幅可変の場合については[Hairer et

al.], Vol. 1を参照).

(39)

• Runge–Kutta型公式と比較すると,f(ξk, tk), . . . , f(ξk+L, tk+L) の線形結合で近似関数を 構成するのが簡単:

ξk+Lk+h PL

l=0βl(0)f(ξk+l, tk+l)

• βl(0) (0≤l ≤L) はパラメータとして残す.

• ξkを左辺に移項して・・・

(40)

• ξk+L−ξk =h PL

l=0βl(0)f(ξk+l, tk+l)

• 左辺を{ξk+l}0≤l≤L をすべて使う形に拡張す

ると,線形多段法の一般形が得られる(次式).

L

X

l=0

αlξk+l =h

L

X

l=0

βlf(ξk+l, tk+l)

!

(41)

• 先の式の{αl}0≤l≤L, {βl}0≤l≤Lはパラメータ で, これらの取り方によって色々な公式が得 られる.

• 上述一般形の中で, 等号の右辺にξk+Lが含 まれるものをimplicit(陰的)な公式,右辺に ξk+Lが含まれないものをexplicit(陽的)な 公式という. これらの特徴は1段法と同様.

(42)

• 多段法を非線形にまで(形式的に)拡張するこ とも可能, この形で一般形が述べられている 本もあるので([山本]), 念のため書いておく.

PL

l=0αlξk+l=hΨ tk, . . . , tk+Lk, . . . ,ξk+L;h

• 以下で,代表的な多段法をいくつか紹介する が, その前に注意点を述べる.

(43)

段数Lの多段法を使うときには, ξ0, . . . , ξL−1(1 法等によって)事前に計算する.

(線形)多段法のメリットはl}0≤l≤Ll}0≤l≤Lをう まく選ぶと高次精度の公式が得られること.一方で, 定性などに関して注意すべき点も多い.

多段法が安定で収束するための必要十分条件として, 下のものが知られている([]): (1)多項式α0+α1z+

· · ·+αLzLの根の絶対値がすべて1以下で,絶対値1

根は単根, (2)PL

l=0αl= 0, (3)Pl

l=0lPL

l=0βl= 0.

(44)

• 多段法において, explicitな公式で仮の解を求

め, それをimplicitな公式に代入してから修

正する方法を, 予測子修正子法という. また, この方法で使われるexplicitな公式を予測子, implicitな公式を修正子という.

• explicitな解法とimplicitな解法の組み合わ せは色々.

(45)

• 微分方程式dx

dt =f(x, t), x(tk+L−1) =xk+L−1 は次の積分方程式と等価.

xk+L−xk+L−1 =Rtk+L

tk+L−1 f(ϕ(τ, tk,xk), τ)dτ

• しかし,この積分はϕ(τ, tk,xk)が未知だから 計算できない.

(46)

• そこで,ϕ(τ, tk,xk)を時間τに関する1変数 関数と見倣し, Lagrange補間多項式で近似す ることを考える.

• 近似に(tk,xk), . . . ,(tk+L−1,xk+L−1)を使うと, xk+L−xk+L−1 ≃ PL−1

l=0 βlf(xk+l, tl)という 形に, (tk,xk), . . . ,(tk+L,xk+L)を使うと,xk+L− xk+L−1 ≃PL

l=0βlf(xk+l, tl)という形になる.

(47)

• 前ページのxjをξjで置き換えると(k ≤j ≤ k+L), 多段法による常微分方程式の数値解 法の公式が得られる. これを, Adams型公 式という.

• 右辺に(ξk+L, tk+L)を含まない公式をAdams–

Bashforth公式,これを含む公式をAdams–

Moulton公式という.

(48)

• Adams–Bashforth 公式 はexplicit, Adams–

Moulton 公式はimplicit である.

• 右辺の係数{βl}0≤l≤Lは, Lagrange補間多項 式を積分することで得られる. この係数はL の値だけで決まり, 問題によって変わるわけ ではないので, 事前に計算するか, 文献等の 値をそのまま用いればよい.

(49)

例として, L=2の場合のAdams–Bashforth公式を計算してみる. tk

においてfk, tk),tk+1においてf(ξk+1, tk+ 1)という値を取るLa- grange補間多項式は, ttk+1

tktk+1

fk, tk) + ttk

tk+1tk

fk+1, tk+1) あり, tk+1 tk = hであることに注意すると,

Z tk+2

tk+1

ttk+1

tktk+1

=

1

2h(ttk+1)2

tk+2 tk+1=h

2, Z tk+2

tk+1

ttk

tk+1tk

= 1

2h(ttk)2

tk+2 tk+1=3h

2 である. よって, L=2の場合のAdams–Bashforth公式は,

ξk+2ξk+1=h

1

2fk, tk) +3

2fk+1, tk+1)

.

(50)

• BDF法はBackward Difference Formula法の 略. この方法はimplicitな解法の一種.

• BDF法は硬い系向けの解法として広く使わ れている([三井]).

• ξk+Lを(ξk, . . . ,ξk+L−1)に関連した情報から 構成するという多段法の問題設定に戻る.

(51)

• ξk+Lを未定のままにしたまま,

(tkk), (tk+1k+1), . . . , (tk+Lk+L)を通る

L次のLagrange補間多項式を構成する. こ

れをp(t)とする.

• ステップ幅が等間隔だったから,tk+L−1 =tk+l− h, tk+L−2 =tk+l−2h, . . .等に注意する.

(52)

• p(t)が微分方程式の解の近似関数となるよう にξk+Lを決めたい.

• 決め方はひと通りというわけではないが,p(t) の導関数のt=tk+Lにおける値が微分方程式

dx

dt =f(x, t)の右辺と一致するように決める というのはひとつの考え方である.

(53)

• d dtp(t)

t=tk+L

=f(ξk+L, t)となるようにξk+L を定める解法をBDF法という.

• Lagrange補間多項式を微分し, t=tk+Lにお ける値を評価することは,代数的にできる(ス テップ幅が等間隔であることに注意).

(54)

• いくつかのLに対するBDF法は・・・

L= 1 : −ξk+ξk+1=hfk+1, tk+1) L= 2 : 12ξkk+1+32ξk+2=hfk+2, tk+2)

L= 3 : 13ξk+32ξk+1k+2+116ξk+3=hf(ξk+3, tk+3)

• BDF法はL >6に対して不安定となること

が知られている.

(55)

微分方程式 d

dt x1 x2

!

= 0 −1 1 0

! x1 x2

!

, x1(0) x2(0)

!

= 1

0

!

を解く. 解はx1(t) = cost, x2(t) = sint. この微分 方程式は硬い系ではないので, BDF法などを使う 利点はないが,すべての解法を試してみる.

(56)

dx=[0 -1;1 0]*x;

endfunction t0=0;

//時間の刻みは問題に合わせて要調整. t=0:.1:100;

x0=[1;0];

(57)

y=ode(x0,t0,t,f); //デフォルト

y=ode("adams",x0,t0,t,f); //Adams y=ode("stiff",x0,t0,t,f); //BDF

y=ode("rk",x0,t0,t,f); //Runge-Kutta y=ode("rkf",x0,t0,t,f); //RKF45

デフォルト解法はAdams型予測子・修正子法とBDF 法の自動切り換え

(58)

通り.

解法 誤差 計算時間

デフォルト 5.33×10−5 0.031 Adams 5.78×10−5 0.111 BDF 7.61×10−4 0.062 Runge-Kutta 9.10×10−9 0.811 RKF45 1.66×10−5 0.062

(59)

以下は文献[三井]に掲載されている硬い系である.

d dt

x1 x2

!

= −2 1

1998 −1999

! x1 x2

!

+ cost

1999 costsint

! ,

初期値をx1(0) = 1, x2(0) = 2とする. 解はx1(t) = e−t, x2(t) =e−t+ costである(真の解はMathematicaによって求 めた).

(60)

dx=[-2 1;1998 -1999]*x+..

[-cos(t);1999*cos(t)-sin(t)];

endfunction

//注意: 記号.. は「次の行に続く」という意味 t0=0;

t=0:.5:100;

x0=[1;2];

(61)

y=ode(x0,t0,t,f); //デフォルト

y=ode("adams",x0,t0,t,f); //Adams y=ode("stiff",x0,t0,t,f); //BDF

y=ode("rk",x0,t0,t,f); //Runge-Kutta y=ode("rkf",x0,t0,t,f); //RKF45

(62)

通り.

解法 誤差 計算時間

デフォルト 3.3×10−7 0.031 Adams 2.1×10−6 0.484 BDF 4.9×10−7 0.109 Runge-Kutta 7.5×10−1 29.547 RKF45 8.9×10−4 2.028

参照

関連したドキュメント

 この論文の構成は次のようになっている。第2章では銅酸化物超伝導体に対する今までの研

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

の知的財産権について、本書により、明示、黙示、禁反言、またはその他によるかを問わず、いかな るライセンスも付与されないものとします。Samsung は、当該製品に関する

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな

、肩 かた 深 ふかさ を掛け合わせて、ある定数で 割り、積石数を算出する近似計算法が 使われるようになりました。この定数は船

わかりやすい解説により、今言われているデジタル化の変革と

巣造りから雛が生まれるころの大事な時 期は、深い雪に被われて人が入っていけ