Я строю модели хищников-жертв на основе производных Лотки-Вольтерры в R с использованием пакета deSolve.Я определяю параметры, начальное состояние и временные шаги и функцию модели.Затем я решаю все, используя ode()
или dede()
при использовании временной задержки.
Я заметил, что есть большая разница в выводе в зависимости от того, как вы определяете параметры В функции модели, и я действительно не понимаюЗачем.Вы можете извлечь параметры, вызвав их через аргумент: parms['r']
или через ранее определенный объект, который я передал аргументу: parameters['r']
.В обоих случаях один и тот же результат.
Это отличается от исходного состояния, хотя: вызов аргумента: y[1]
или y['N']
, дает совершенно другой результат, чем вызов его через объект, переданный аргументу: init[1]
или init['N']
.
Также в DDE: есть разница в time - tau
против times - tau
и ylag <- y
против ylag <- init
.
Почему есть другой результатдля аргумента против объекта для начального состояния и времени, а не для параметров?Мне нужно хорошо это понять, чтобы использовать пакет FME на более позднем этапе, поэтому я надеюсь, что кто-то может объяснить это поведение.
Мой код:
library(deSolve)
## Parameters
parameters <- c(r = 0.25, K = 200, a = 0.01, c = 0.01, m = 1, tau = 7)
init <- c(N = 20, P = 2)
time <- seq(0, 100, by = 0.01)
## Ordinary DE
PreyPred <- function(times, y, parms){ #chose same argument names as ode()
N <- y['N'] #y[1] works as well
P <- y['P']
#N <- init['N'] #(or init[1]) gives a totally different result!
#P <- init['P']
r <- parms['r'] #growth rate prey parameters['r'] gives same result
K <- parms['K'] #carrying capacity prey
a <- parms['a'] #attack rate predator
c <- parms['c'] #assimilation rate (?) predator
m <- parms['m'] #mortality predator
dN <- r * N * (1-N/K) - a * N * P
dP <- c * N * P - m * P
return(list(c(dN, dP)))
}
oderesult <- ode(func = PreyPred, parms = parameters, y = init, times = time)
plot(oderesult, lwd = 2, mfrow = c(1,2))
## Delayed DE
PreyPredLag <- function(times, y, parms){
N <- y['N']
P <- y['P']
#N <- init['N']
#P <- init['P']
r <- parms['r'] #growth rate prey
K <- parms['K'] #carrying capacity prey
a <- parms['a'] #attack rate predator
c <- parms['c'] #assimilation rate (?) predator
m <- parms['m'] #mortality predator
tau <- parms['tau'] #time lag
tlag <- times - tau
#tlag <- time - tau #different result
if (tlag < 0)
ylag <- y
#ylag <- init
else
ylag <- lagvalue(tlag)
# dede
dN <- r * N * (1-N/K) - a * N * P
dP <- c * ylag[1] * ylag[2] - m * P
return(list(c(dN, dP), lag = ylag))
}
dederesult <- dede(func = PreyPredLag, parms = parameters, y = init, times = time)
plot(dederesult, lwd = 2, mfrow = c(2,2))