解决R中的多个ODE的系统

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

我有一个带有X个连接补丁的系统,每个补丁都有一个像这样的简单捕食者-猎物模型:

C_i = r_c*C -d*C + e*P + b*\sum_j(A_ij*C_j)
P_i = r_p*P +e*P + b*\sum_j(A_ij*P_j)

其中C_iP_i是补丁i中的消费者和猎物数量; r_c,r_p是增长率; d是消费者的死亡率,e是猎物的摄入率。每个方程式的最后一项是消费者或猎物的涌入:A_ij是指示是否连接了补丁ij的矩阵,而b是从补丁j迁移的速率。 (我的系统更复杂,但是这个简单的示例可以做到)。

这种系统将需要与补丁一样多的ODE系统。任何想法如何实现这种系统?我知道如何使用deSolve对单个补丁(没有索引,没有流入术语)实现它。因此,任何具有deSolve的解决方案都是首选。

乳胶方程式:Consumer equation in patch iPrey equation in patch i

r ode
1个回答
0
投票

以下矩阵食肉动物-猎物模型可以作为起点:

library(deSolve)

model <- function(t, n, parms) {
  with(parms, {
    dn <- r * n  + n * (A %*% n)
    list(dn)
  })
}

parms <- list(
  r = c(r1 = 0.1, r2 = 0.1, r3 = -0.1, r4 = -0.1),
  A = matrix(c(
    0.0, 0.0, -0.2, 0.0, # prey 1
    0.0, 0.0, 0.0, -0.1, # prey 2
    0.2, 0.0, 0.0, 0.0,  # predator 1; eats prey 1
    0.0, 0.1, 0.0, 0.0), # predator 2; eats prey 2
    nrow = 4, ncol = 4, byrow = TRUE)
)

times = seq(0, 500, 0.1)
n0  = c(n1 = 1, n2 = 1, n3 = 2, n4 = 2)

out <- ode(n0, times, model, parms)
plot(out)
© www.soinside.com 2019 - 2024. All rights reserved.