我喜欢求解涉及多个阈值的耦合微分方程组。通过查看 R 信息,我将 ODE 与根函数和事件函数结合使用。
\n\n通过各种示例,即温度模型,第 14 页http://cran.r-project.org/web/packages/diffEq/vignettes/ODEinR.pdf - 下面粘贴的代码 - 我能够让我的模型发挥作用在一个阈值上,即找到一个变量的根/达到阈值会触发一个事件。
\n\nlibrary(deSolve)\nyini <- c(temp = 18, heating_on=1)\n\ntemp <- function(t,y, parms) {\n dy1 <- ifelse(y[2] == 1, 1.0, -0.5)\n dy2 <- 0\n list(c(dy1, dy2))\n}\n\nrootfunc <- function(t,y,parms) c(y[1]-18, y[1]-20)\n\neventfunc <- function(t,y,parms) {\n y[1] <- y[1]\n y[2] <- ! y[2] \n return(y)\n}\n\ntimes <- seq(from=0, to=20, by=0.1)\nout <- lsode(times=times, y=yini, func = temp, parms = NULL, \n rootfun = rootfunc, events = list(func=eventfunc, root = TRUE))\nplot(out, lwd=2)\nattributes(out)$troot\nRun Code Online (Sandbox Code Playgroud)\n\n该示例还表明,不同的根可以触发相同的事件函数(y[1] \xe2\x80\x93 …