我之所以发布,是因为我正在数值上求解常微分方程,并且想约束状态变量。总而言之,我是一个模拟种群的生物学家,并希望当种群变得很小时灭绝。
当我运行模型时,种群会变得非常小(例如
),但永远不会达到0。对我而言,这样做很重要,这样我就可以计算出灭绝率。但是更现实的是,当一个人口的密度远小于地球上原子的密度时,那不是太现实;)即使在像下面这样的简单的2种物种的敌方受害者模型中,
的密度也想被解释为0。library(package = "deSolve")
lv <- function(times,state,parms) {
with(as.list(c(state,parms)),{
dR <- 2*R - 0.5*R*C
dC <- 0.2*R*C - 0.6*C
return(list(c(dR,dC)))
})
}
time_vec <- seq(from = 0,to = 100,length.out = 1e4)
y_0 <- c(R = 50,C = 20)
out <- ode(y = y_0,times = time_vec,func = lv,parms = NULL,method = "lsoda")
min(out[,-1])
plot(x = out[,2],y = out[,3],type = "l")
理想情况下,我想看看如何使用R中的求解器“ deSolve”来模拟灭绝,但是对于将我引向此类问题的一般答案/名称的任何帮助,也将不胜感激。
P.S。这类似于关于用0(link)替换负值的帖子,但是有所不同,因为我希望总体不只是非负数,而是无限地保持为0。但是,在这篇文章中,如何做到这一点也没有很好的答案。