廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

R {deSolve} で差分方程式

R の deSolve パッケージで差分方程式を計算するには ode のメソッド "iteration" を使う。

関数 func は変化率ではなく状態変数の新しい値を返すように書く。

library(deSolve)
Ti <- 100
a <- 1.2
disc_logis <-function(Time,x,a){
  x2 =a*x*(1-x)
  list(x2)
}
out1 <-ode(y=c(pop=0.1),times=1:Ti,func=disc_logis,parms=a,method = "iteration")
plot(out1)

f:id:abrahamcow:20161122013904p:plain

これは次のように書くのと同じ結果が得られる。

x <- numeric(Ti)
x[1] <- 0.01
for(i in 2:Ti){
  x[i] <- a*x[i-1]*(1-x[i-1])
}

スピードは後者のほうが速い。