使用 r 中的 desolve 求解 2 个连通微分方程组

问题描述 投票:0回答:1

我正在尝试使用 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,然后使用循环更改方程中的值。这需要花费大量的时间。由于我的模型很大,我想减少模拟时间

您对如何提高效率有什么建议吗?

r mathematical-optimization differential-equations desolve
1个回答
0
投票

我以@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)

如果您正在寻找不同的东西,您能澄清您的问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.