[R] vectors of equations in ode / desolve
Frank B.
fbjournals at gmail.com
Tue Apr 26 21:20:40 CEST 2016
Hello,
I have a syntactic problem with ode. How do I specify vectors of
equations in ordinary differential equation systems. (i.e. in my case I
want to simulate an a priory undefined number of species that have
different parameters but the same behaviour)
I demonstrate this using the Lotka Volterra example. The code below does
not work and I have not a good idea how to specify this right.
## =======================================================================
## Example1: Predator-Prey Lotka-Volterra model (with logistic prey)
## =======================================================================
LVmod <- function(Time, State, Pars) {
with(as.list(c(State, Pars)), {
# Now there are different species of Prey so Prey is a one dimensional
vector,
#Ingestion is also a one-dimensional vector. The number of species is
not defined a priory
Ingestion <- rIng * Prey * Predator
GrowthPrey <- rGrow * Prey * (1 - Prey/K)
MortPredator <- rMort * Predator
dPrey <- GrowthPrey - Ingestion
# the growth of predator would depend on the ingestion of all prays
regardless of species
sumIngestion<-sum(Ingestion)
dPredator <- sumIngestion * assEff - MortPredator
# returning an array of preys does produce an error
return(list(c(dPrey, dPredator)))
})
}
# Example is made for three different species of prey
pars <- c(rIng = 0.2, # /day, rate of ingestion
# I do not know how to pass on these parameters as a vector this
productes and error
rGrow = c(1.0, 1.3, 1.7) # /day, growth rate of prey
rMort = 0.2 , # /day, mortality rate of predator
assEff = 0.5, # -, assimilation efficiency
K = 10) # mmol/m3, carrying capacity
yini <- c(Prey = c(1, 2,3), Predator = 2)
times <- seq(0, 200, by = 1)
out <- ode(yini, times, LVmod, pars)
summary(out)
Thanks
Frank
More information about the R-help
mailing list