标准方法是使用approxfun
,即创建一个时间相关信号,我们也称之为强制变量:
library("deSolve")
time <- seq(0, 200, by=1)
parameters <- c(a=0.33, b=0.2, c=1)
state <- c(X = 0, Y = 0)
two_comp <- function(time, state, parameters, signal){
cc <- signal(time)
with(as.list(c(state, parameters)), {
dX <- -X * a + (Y - X) * b + cc
dY <- -Y * a + (X - Y) * b
return(list(c(dX, dY), c = cc))
})
}
signal <- approxfun(x = c(0, 50, 70, 200),
y = c(0, 1, 0, 0),
method = "constant", rule = 2)
out <- ode(y = state, times = time, func = two_comp,
parms = parameters, signal = signal)
plot(out)
另请注意 deSolve 特定的plot
函数和时间因变量cc
用作附加输出变量。
有关此内容的更多信息,请参阅:
- in the
?forcings
帮助页面和
- in a 简短教程在 Github 上。