# [R] using and event in deSolve

Thomas Petzoldt thpe at simecol.de
Sat Feb 23 19:50:09 CET 2013

```Hi Jannetta,

as far as I can see, your implementation was almost ;-) correct, except
that:

init <- init + d

should be:

init <- init + d

The root function with:

return(init-30)

is correct, because this triggers an event when init-30 crosses the
zero line, i.e. when init == 30. This can also be seen at the figure
if we decrease the external step size, see the corrected example below.

Note also, that ";" at the end of line is not required (and should be
avoided), because R is not C.

You can also send such questions to the special interest group:

r-sig-dynamic-models at r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models

Thanks for using deSolve

Thomas

-------------- next part --------------
library(deSolve)

Izhikevich <- function(time, init, parms) {
with(as.list(c(init, parms)), {
dv <- 0.04 * v^2 + 5 * v + 140 - u + I
du <- a * (b * v - u)
list(c(dv, du))
})
}

parms <- c(a = 0.02, b = 0.2, c = -65, d = 2, I = 10)
#times <- seq(from = 1, to = 1000, by = 0.1)
times <- seq(from = 1, to = 100, by = 0.005)
init  <- c(v = -65, u = 0.2)

root <- function(time, init, parms) {
return(v = init - 30)
}

event <- function(time, init, parms) {
with(as.list(parms), {
init <- init + d
init <- c
return(init)
})
}

out <- ode(y = init, times = times,
func = Izhikevich, parms = parms,
events = list(func = event, root = TRUE),
rootfun = root)

plot(out)
```