忍者ブログ
理系の若者が思ったことを書くブログです。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ロトカ・ボルテラ方程式とは、捕食生物および被捕食生物の個体数変動を
数式化した方程式であり、1階の二元連立微分方程式の代表的な問題です。
この方程式を解く際もRunge-Kutta法が大活躍します。具体的な方法論については
ゴッドフット企画さまのHPを引用させていただきます。

=================================
引用元:http://homepage1.nifty.com/gfk/rungekutta.htm
次の1階2元連立微分方程式で説明する。

 dφ/dt = F( t , φ, ω)
 dω/dt = G( t , φ, ω)

 F,Gは時間tと変数φ、ωの関数

初期値 t=t0 の時、φ=φ0, ω=ω0とすると、Δt後の変数値は下式となる。

  k1 = Δt・F( t0, φ0, ω0)
  m1 = Δt・G( t0, φ0, ω0)

  k2 = Δt・F( t0+Δt/2, φ0+k1/2, ω0+m1/2)
  m2 = Δt・G( t0+Δt/2, φ0+k1/2, ω0+m1/2)

  k3 = Δt・F( t0+Δt/2, φ0+k2/2, ω0+m2/2)
  m3 = Δt・G( t0+Δt/2, φ0+k2/2, ω0+m2/2)

  k4 = Δt・F( t0+Δt, φ0+k3, ω0+m3)
  m4 = Δt・G( t0+Δt, φ0+k3, ω0+m3)

  k = (k1+2・K2+2・k3+k4)/6
  m = (m1+2・m2+2・m3+m4)/6

Δt後の変数値φ1,ω1は

  φ1 = φ0 + k
  ω1 = ω0 + m

となる。

この手続きを繰り返せば、離散的だが、すべての時間での変数値が求まります。
ちなみに、Δtは0.0001秒のような微小値を設定する必要があります。
Δtが大きすぎると解が発散する場合があります。

計算量が多いので、手計算は困難です。EXCELなどを使って計算しましょう。
=================================

このゴットフット企画さまのHPの理論を応用すれば、ロトカ・ボルテラ方程式の
解析コードが作成できます。そこで、方程式例として
dx/dt = (8 - 3 * y) * x
dy/dt = (-18 + 4 * x) * y 
初期条件t = 0, x = 10 , y = 7
を考えましょう。この微分方程式の数値計算用プログラミングのソースコードを
下記に記します。

Sub RungeKutta()

Dim t, dt As Single
Dim x, y As Single
Dim K1, K2, K3, K4 As Single
Dim L1, L2, L3, L4 As Single
Dim i As Long

'初期値の入力

t = 0
x = 10#
y = 7#
dt = 0.01

Cells(1, 1).Value = "t"
Cells(1, 2).Value = "x"
Cells(1, 3).Value = "y"

Cells(2, 1).Value = t
Cells(2, 2).Value = x
Cells(2, 3).Value = y

For i = 0 To 5000

K1 = F(t, x, y) * dt
L1 = G(t, x, y) * dt

K2 = F(t + dt / 2, x + K1 / 2, y + L1 / 2) * dt
L2 = G(t + dt / 2, x + K1 / 2, y + L1 / 2) * dt

K3 = F(t + dt / 2, x + K2 / 2, y + L2 / 2) * dt
L3 = G(t + dt / 2, x + K2 / 2, y + L2 / 2) * dt

K4 = F(t + dt, x + K3, y + L3) * dt
L4 = G(t + dt, x + K3, y + L3) * dt

t = t + dt
x = x + (K1 + 2 * K2 + 2 * K3 + K4) / 6
y = y + (L1 + 2 * L2 + 2 * L3 + L4) / 6

Cells(3 + i, 1).Value = t
Cells(3 + i, 2).Value = x
Cells(3 + i, 3).Value = y

Next i

End Sub

Function F(t, x, y)

F = (8 - 3 * y) * x

End Function

Function G(t, x, y)

G = (-18 + 4 * x) * y

End Function


解析結果:



※特定のxに対してyは周期的に変化していることが確認できる。



※x、yの経時変化をみると図のようになっている。

このようにして、Runge-Kutta法を応用すると連立微分方程式のような
複雑な方程式も解析できます。

拍手[3回]

PR
Comment
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
[32]  [31]  [30]  [29]  [28]  [27]  [26]  [25]  [24]  [23]  [22
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新CM
[10/02 武市]
[09/15 朧月]
[09/08 トトロママ]
[08/22 トトロママ]
[08/17 トトロママ]
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
P R
アクセス解析
カウンター
コガネモチ
忍者ブログ [PR]