Skip to content

[R-sig-dyn-mod] problem with DDE

2 messages · GRANJON DAVID p1005245, Thomas Petzoldt

#
David,

this happens if you try to access past values that don't exist yet or 
that cannot be interpolated from accumulated data in the history buffer.

See ?lagvalue that tells us: "the lagged time should not be smaller than 
the initial simulation time, nor should it be larger than the current 
simulation time."

The solution is to catch this condition in the model function and and to 
provide default values. Just try the example example below with and 
without the outcommented lines.

Hope it helps

Thomas P.

----------------------------------------------------------------------

library(deSolve)

derivs <- function(t, y, parms) {
   cat("t=", t, "\n")
   with(as.list(c(y, parms)), {
     #if (t < tau)
     #  ytau <- c(1, 1)
     #else
       ytau <- lagvalue(t - tau, c(1, 2))

     dN <- f * N - g * N * P
     dP <- e * g * ytau[1] * ytau[2] - m * P
     list(c(dN, dP), tau=ytau[1], tau=ytau[2])
   })
}

yinit <- c(N=1, P=1)
times <- seq(0, 100, 10)
parms <- c(f=0.1, g=0.2, e=0.1, m=0.1, tau = .2)
yout <- dede(y = yinit, times = times, func = derivs, parms = parms)