Hi Andreas,

adding a varying amount of something over time is even easier than implementing an "immediate" event. It can be implemented as a "forcing", see ?forcings and example below.

Hope it helps,

Thomas


require(deSolve)

pkmod <- function(t, y, p) {
  inp <- forc(t)

  if (t < tin) R <- (D/tin) else R <- 0
  dy1 <- R - (p["k12"]+p["k"])* y[1] + p["k21"]*y[2]   + inp
  dy2 <- p["k12"]* y[1] - p["k21"] *y[2]
  list(c(dy1, dy2), inp=inp)
}

## an example, not your data
intimes <- c(0, 2, 5, 10, 24)
input   <- c(0, 200, 100, 0, 0)
forc <- approxfun(intimes, input, method="constant")

times <- seq(0, 24, 0.1)
tin  <- 0.5
D    <- 400
V    <- 26.3
yini <- c(Central = 0, Peripheral = 0)
p    <- c(k=0.05, k12=0.197118, k21=0.022665, V=26.3)

result <- lsoda(yini, times, pkmod, p, rtol = 1e-08, atol = 1e-08)
plot(result)


--
Thomas Petzoldt
Technische Universitaet Dresden
Faculty of Environmental Sciences
Institute of Hydrobiology
01062 Dresden, Germany
http://tu-dresden.de/Members/thomas.petzoldt

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to