数学モデルの考え方、人口問題とモデル修正を例にとって。
モデルをどうするかというはなしについて、捨てて捨てて単純化して、微分方程式に落としこむのだが、捨てたものは覚えておく。
パラメータを厳密に決めて進めるようにする。
上のモデルでは指数関数になったが、指数関数の特徴を把握しておくことも重要。
モデルの変更
グラフをどう変えたいのか
最初、定数としていたものを変えるならば、それをモデルにして組み直す
(γをNの関数にするとか)
前のモデルを継承しつつ、違う要素を入れた。
前のモデルとの関係
パラメータを2つにして、前を包括している。
ならば、ふたつのモデルは一緒になる。
けど、このモデルも破綻しつつある。
さらにモデルを変えるならば…
:時代によって技術革新が進み、多くの人口が許容出来るようになった、とか。
:人口の多さによって、許容出来る人口が決まる、とか。
下のモデルを付け加えてみる。
最初の年より年後では、最初想定していた限界人口の倍人口に余裕があるとした。
time <- seq(from=0, to=30, length=20) # 数値は本から。 gamma <- 0.3134 N_0 <- 3.9*10^6 Ninf <- 197*10^6 # 地味に計算する場合 N <- matrix(0, nr=length(gamma), nc=length(time)) N[, 1] <- N_0 for(j in 1:length(gamma)){ for(i in 2:length(time)){ N[j, i] <- N[j, i-1] + gamma[j] * N[j, i-1] } } Nv <- matrix(0, nr=length(gamma), nc=length(time)) Nv[, 1] <- N_0 for(j in 1:length(gamma)){ for(i in 2:length(time)){ Nv[j, i] <- Nv[j, i-1] + gamma[j] * Nv[j, i-1]*(1-Nv[j, i-1]/Ninf) } } Nv2 <- matrix(0, nr=length(gamma), nc=length(time)) Nv2[, 1] <- N_0 for(j in 1:length(gamma)){ for(i in 2:length(time)){ Nv2[j, i] <- Nv2[j, i-1] + gamma[j] * Nv2[j, i-1]*(1-Nv2[j, i-1]/((i^(1/6))*Ninf)) } } ylim <- range(N, Nv) matplot(t(N), type="l", lty=1, ylim=ylim, ylab="") par(new=TRUE) matplot(t(Nv), type="l", lty=1, ylim=ylim, col=2, ylab="") par(new=TRUE) matplot(t(Nv2), type="l", lty=1, ylim=ylim, col=3, ylab="") abline(h=Ninf, lty=2) legend(1, max(N, Nv), c("unlimited model", "limited model","new model"), col=1:3, lwd=3)