12/19 MIKUセミナー

MikuHatsune2011-12-22

数学モデルの考え方人口問題モデル修正を例にとって。
 
モデルをどうするかというはなしについて、捨てて捨てて単純化して、微分方程式に落としこむのだが、捨てたものは覚えておく。
パラメータを厳密に決めて進めるようにする。
 
上のモデルでは指数関数になったが、指数関数の特徴を把握しておくことも重要。
 
モデルの変更
グラフをどう変えたいのか
最初、定数としていたものを変えるならば、それをモデルにして組み直す
(γをNの関数にするとか)
前のモデルを継承しつつ、違う要素を入れた。
 
前のモデルとの関係
パラメータを2つにして、前を包括している。
N_{inf}=\infty
N=0
ならば、ふたつのモデルは一緒になる。
 
けど、このモデルも破綻しつつある。
さらにモデルを変えるならば…
N_{inf}=f(t):時代によって技術革新が進み、多くの人口が許容出来るようになった、とか。
N_{inf}=N(t):人口の多さによって、許容出来る人口が決まる、とか。
 
下のモデルを付け加えてみる。
最初の年よりt年後では、最初想定していた限界人口N_{inf}t^{\frac{1}{6}}倍人口に余裕があるとした。

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)