システムとモデリング

modelica, Julia, Design Structure Matrix, SysML, 他モデリング全般について。

DiscreteモデルとContinuousモデルの違い

 


 

今回も書籍『A Biologist's Guide to Mathematical Modeling in Ecology and Evolution』 から学習した内容の備忘録になります。

ネズミが生殖により増えたり、銀行に預けたお金が複利で増えたり、人気商品だということが広まるとさらに人気になったり…… 「時間経過に従い自己増殖」する現象が世の中には多く存在します。

これをDiscrete(離散的)な計算モデルで表すと以下のようになります。

\[ n(t+1) = (1+r)n(t) \]

  • nはネズミの個体数だったり、銀行預金だったりします。

  • rは増殖の速さを決める係数になります。

  • tは時間を表します。時間の単位は一日だったり一年だったりします。

上記式の意味は『1単位時間経過したとき、その前の個体数の(1+r)倍に増える』ということになります。

同じ自己増殖の計算モデルをContinuous(連続的な)な計算モデルで表すと以下のようになります。

\[ \frac{dn}{dt} = rn \]

  • rは増殖の速さを決める係数になります。

Discrete と Continuousの式は一見同じものに見えます。結果も同じになるでしょうか? juliaで計算してみます

計算

以下のパラメーターに基づいて計算します。

  • 初期値n(0)=1.0

  • r = 0.01

  • t=100まで計算

using Plots
using DifferentialEquations

N0 = 1.0
tmax = 100
r = 0.01


function Discrete(r,N0,tmax)
     A = zeros(tmax)
     A[1] = N0
    for i = 1:tmax-1
        A[i+1] = (1+r)*A[i]
    end
    return A
end

DiscreteAns = Discrete(r,N0,tmax)


Continuous(u,p,t) =  r * u
u0 = N0
tspan = (0.0,tmax)
prob = ODEProblem(Continuous,u0,tspan)
sol = solve(prob, Tsit5(), reltol=1e-8, abstol=1e-8)

plot(sol,label="Continuous")
plot!(DiscreteAns,ls=:dash,label="Discreat")

f:id:Otepipi:20200510132953j:plain



Continuousの計算結果のほうが僅かにDiscreteを上回っています。

解析

両者の違いについてはそれぞれの式の解を求めてみれば明らかになります。

Discreteの計算式

\[ n(t+1) = (1+r)n(t) \]

の解は

\[ n(t) = (1+r)^{t}n(0) \]

一方、Continuousの計算式

\[ \frac{dn}{dt} = rn \]

の解は

\[ n = e^{rt}n(0) \]

したがってDiscreteとContinuousの計算結果の違いは$1+r$$e^r$の大小によることになります。 実際に$e^r$テイラー展開すると以下のようになり、必ず$1+r$より大きくなります。

\[ e^r = 1 + r + \frac{1}{2}r^2 + …… \]

以上です。初歩的ですが混乱しがちな内容をまとめました。