【发布时间】:2019-07-05 21:57:12
【问题描述】:
免责声明:Stack Computational Science 上的交叉帖子
目标:我正在尝试使用 sde package 中的 de sde.sim() 函数对 R 中的 Lotka-Volterra ODE 进行数值求解。我想使用sde.sim() 函数,以便最终将此系统转换为 SDE。所以最初,我从一个没有噪声项的简单 ODE 系统(Lotka Volterra 模型)开始。
Lotka-Volterra ODE 系统:
x = 10 和 y = 10 的初始值。
alpha、beta、delta 和 gamma 的参数值分别为 1.1、0.4、0.1 和 0.4(模仿这个example)。
尝试解决问题:
library(sde)
d <- expression((1.1 * x[0] - 0.4 * x[0] * x[1]), (0.1 * x[0] * x[1] - 0.4 * x[1]))
s <- expression(0, 0)
X <- sde.sim(X0=c(10,10), T = 10, drift=d, sigma=s)
plot(X)
但是,这似乎不会产生捕食者和猎物种群的良好循环行为。
预期输出
我使用 R 中的 deSolve 包来生成预期的输出。
library(deSolve)
alpha <-1.1
beta <- 0.4
gamma <- 0.1
delta <- 0.4
yini <- c(X = 10, Y = 10)
Lot_Vol <- function (t, y, parms) {
with(as.list(y), {
dX <- alpha * X - beta * X * Y
dY <- 0.1 * X * Y - 0.4 * Y
list(c(dX, dY))
}) }
times <- seq(from = 0, to = 100, by = 0.01)
out <- ode(y = yini, times = times, func = Lot_Vol, parms = NULL)
plot(y=out[, "X"], x = out[, "time"], type = 'l', col = "blue", xlab = "Time", ylab = "Animals (#)")
lines(y=out[, "Y"], x = out[, "time"], type = 'l', col = "red")
问题
我认为漂移功能可能有问题,但是,我不确定是什么。在尝试解决 sde.sim() 中的这个 ODE 系统时出了什么问题?
【问题讨论】:
-
d <- expression(...)的第二个参数不应该是0.1 * x[0] * x[1] - 0.4 * x[1]吗? -
是的,对不起(草率的错误)。我更新了代码。
-
这能解决问题吗?如果不是,请包括您的预期输出(情节)。
-
我包含了预期的输出和代码(使用
deSolve包)。