人口の推移モデル
N_t+1=r*N_t*(1-N_t)
FUNpop_t<-function(r=2.5,n0=0.5,gen=100) { nt=n0;x=seq(0, 1, 0.01);y=r*x*(1-x) maxY=max(y,1);i_gen=1 plot(x,y,type='l',xlim=c(-0.1, 1.1),ylim=c(0,maxY),xlab="Prop. @ time t", ylab="Prop @ time t+1"); lines(x,x,type='l') while ((i_gen < gen) & (nt>0)) { nt1=r*nt*(1-nt); lines(c(nt,nt),c(nt, nt1),type='l',col='red') lines(c(nt,nt1),c(nt1,nt1),type='l',col='red') nt=nt1; i_gen=i_gen+1; } } # example par(mfrow=c(2,2)) FUNpop_t(r=2.7,n0=0.15,gen=100) FUNpop_t(r=3.1,n0=0.15,gen=100) FUNpop_t(r=3.8,n0=0.15,gen=100) FUNpop_t(r=4.2,n0=0.15,gen=100)
周期性の検証
FUNpop_t2<-function(gen=100,digit=5,n0=0.5){ r=seq(2.5,4,0.001) res=matrix(0,ncol=2,nrow=1) r.length=length(r) for (i_r in 1:r.length) { nt=matrix(0,nrow=gen,ncol=1) nt[1]=n0; for (i_loop in 2:gen) {nt[i_loop]=r[i_r]*nt[i_loop-1]*(1-nt[i_loop-1])} bunnki<-unique(round(nt[duplicated(round(nt,digits=digit))],digits=digit)) bunnki.length<-length(bunnki); res=rbind(res,cbind(rep(r[i_r],bunnki.length),bunnki)) } return(res[-1, ]) } # example res<-FUNpop_t2(gen=10000, digit=5) plot(res[,1],res[,2],pch=19,cex=0.1,col="red",xlab="r values",ylab="cyclic points")