我有一个简单的 SIR 模型,我正在尝试实施一种疫苗接种方法 (V),首先检查感染者是否高于阈值 (100),如果仍有足够的易感者 (50),它将接种疫苗每个时间步长一定数量(50)。
但是我想做的是,一旦满足条件,它应该接种 7 天(无论在这 7 天内感染者是否仍然高于阈值,例如,如果在第 4 天之后, I = 70它应该仍然继续,只有在 S < 50 时才应该停止。在 7 天结束后,它应该再次检查条件,或者重新开始 7 天,或者不重新开始。
到目前为止,如果有人帮助我实现该循环,我将不胜感激
sirV=function(time, y, params){
S = y[1]
I = y[2]
R = y[3]
V = y[4]
with(as.list(params),{
vac_helper = if (I > 100 & S > 50) {50}
else {0}
N = S+I+R+V
dS = -S*beta*I/N - vac_helper
dI = S*beta*I/N - gamma*I
dR = +gamma*I
dV = vac_helper
return(list(c(dS, dI, dR, dV)))
})
}
myparameters = c(gamma=1/10,beta=0.2)
times <- seq(0, 300)
my_ode <- as.data.frame(ode( y=c(100000, 10, 0,0), times, sirV, myparameters))