我正在尝试使用 r 中的解求解来求解 2 个连通的微分方程组。
我的第一个模型是
library(package = "deSolve")
growth <- function(t, state, parms) {
with(as.list(c(state, parms)), {
dx1 <- a*x - b*x*x - c*x*y
dy2 <- d*y - e*y*x - f*y*y
return(list(c(dx1, dy2)))
})
}
parameters <- c(a = 0.5, b = 10, c = 0.7, d = 0.1, e = 1.2, f = 0.5)
init <- c(x = 0.1, y = 0.2)
model1 <- ode(y = init, func = growth, times = seq(from = 0, to = 10, by = 0.1), parms = parameters)
然后我想使用 dx1 和 dy1 在时间 t 的值来修改 model2 在时间 t 的值。
growth2 <- function(t, state, parms) {
with(as.list(c(state, parms)), {
dx2 <- a*x - b*x*x - c*x*y*dx1
dy2 <- d*y - e*y*x - f*y*y*dy1
return(list(c(dx2, dy2)))
})
}
parameters <- c(a = 0.5, b = 10, c = 0.7, d = 0.1, e = 1.2, f = 0.5)
init <- c(x = 0.1, y = 0.2)
model2 <- ode(y = init, func = growth2, times = seq(from = 0, to = 10, by = 0.1), parms = parameters)
我如何使用 dx1 在时间 t 的值来求解模型 2 在时间 t。
目前,我正在通过求解 1 个时间步长来求解 model2,然后使用循环更改方程中的值。这需要花费大量的时间。由于我的模型很大,我想减少模拟时间
您对如何提高效率有什么建议吗?
我以@tpetzoldt 在评论中的方式解释你的问题。我认为您想将模型构建为单个系统。这是我如何使第二个“模型”依赖于第一个“模型”......
library(package = "deSolve")
growth <- function(t, state, parms) {
with(as.list(c(state, parms)), {
dx1 <- a*x1 - b*x1*x1 - c*x1*y1
dy1 <- d*y1 - e*y1*x1 - f*y1*y1
dx2 <- a*x2 - b*x2*x2 - c*x2*y2*dx1
dy2 <- d*y2 - e*y2*x2 - f*y2*y2*dy1
return(list(c(dx1, dy1, dx2, dy2)))
})
}
parameters <- c(a = 0.5, b = 10, c = 0.7, d = 0.1, e = 1.2, f = 0.5)
init <- c(x1 = 0.1, y1 = 0.2, x2 = 0.1, y2 = 0.1)
model1 <- ode(y = init, func = growth, times = seq(from = 0, to = 10, by = 0.1), parms = parameters)
如果您正在寻找不同的东西,您能澄清您的问题吗?