2

私は微分方程式モデル (以下を参照) を持っています。特定の時間ステップまたは状態変数の 1 つの特定の値でパラメーターの値の一部を変更する方法を探しています (または、それがうまく機能する場合は別の方法) )。たとえば、タイム ステップ 5 で GammaQR と GammaQD を 0 から .02 に変更したいと考えています (H > .04 の場合は、よりうまく機能する場合もあります)。どうすればいいのかわからないので、アドバイスをいただければ幸いです。ありがとう!

 VS  = 0.01    
VE  = 0.01  
VH  = 0.01  
BSE = 10 #
BSI = 10  #
THE = 1/10      
TEI =  1/3 
DeltaID = .5 
GammaIR = .5 
XIQ = 0.001  
XEQ = 0.01 
XHQ = 0.05 
GammaQR = .02  
GammaQD = .02 

library(deSolve)

pars <- c(VS, VE, VH, BSE, BSI, THE, TEI, DeltaID, GammaIR, XIQ, XEQ, XHQ, GammaQR)

init.values <- c(S = .99 , H = .01 , E = 0 , V = 0, I = 0 , Q = 0 , D = 0 , R = 0 )

times <- seq(0, 60, by = 1)

Smallpox <- function(time, y.values, parameters){
   with(as.list(c(y.values, parameters)), {

    dS.dt = -VS*S - BSI*S*I - BSE*E*S 
    dH.dt = BSI*S*I + BSE*E*S  - THE*H - XHQ*H - VH*H 
    dE.dt = THE*H - XEQ*E - VE*E - DeltaID*E - TEI*E
    dV.dt = VS*S + VE*E + VH*H
    dI.dt = TEI*E - XIQ*I - GammaIR*I - DeltaID*I
    dQ.dt = XHQ*H + XIQ*I + XEQ*E - GammaQR*Q - GammaQD*Q
    dD.dt = DeltaID*I + DeltaID*E + GammaQD*Q
    dR.dt = GammaQR*Q + DeltaID*I


    return(list(c(dS.dt, dH.dt, dE.dt, dV.dt, dI.dt, dQ.dt, dD.dt, dR.dt)))
  })
}

out <- as.data.frame(ode(func = Smallpox, y = init.values, parms = pars, times = times))
tail(out)

matplot(out$time, out[ ,2:9], type = "l", xlab = "time", ylab = "percent of       population", main = "Model Name", lwd = 2, col = c("black", "red", "green", "Blue", "cyan", "purple", "grey", "magenta"), lty = 1:8)
4

0 に答える 0