r语言 - 我在我的微分方程求解器中包含"时间"参数,它以某种方式搞砸了它


library(deSolve)
require(deSolve)
delta_conc <- function(time, current_state, params) {
with(as.list(c(current_state, params)),{
dX <- Y
dY <- X - X^3 - 0.25*Y + A * sin(t)
return(list(c(dX, dY)))
})
}
params <- c(
A <- 0.2645
)
initial_state <- c(
X <- 0.9,
Y <- 0.4
)
times <- 1:10
model <- ode(initial_state, times, delta_conc, params)
summary(model)
matplot(model, type="l",lty=1, main="Enzyme model", xlab="Time")

当我尝试运行它时,我收到了以下错误消息:

checkFunc中出错(Func2,times,y,rho(:func(((21(返回的导数数必须等于初始条件向量(2(的长度

当我排除"sin(t("部分时,它是有效的,所以问题出在该部分,但我是一个初学者,所以我不知道如何处理这个问题

实际时间步长应始终使用einerttime。在您的情况下,t没有定义为变量,因此t被解释为转置函数。

以下内容应该有效:

require(deSolve)
delta_conc <- function(time, current_state, params) {
with(as.list(c(current_state, params)),{
dX <- Y
dY <- X - X^3 - 0.25*Y + A * sin(time)
return(list(c(dX, dY)))
})
}
params <- c(
A = 0.2645
)
initial_state <- c(
X = 0.9,
Y = 0.4
)
times <- 1:10
model <- ode(initial_state, times, delta_conc, params)
summary(model)
matplot.0D(model, type="l",lty=1, main="Enzyme model", xlab="Time")

此外,该代码还存在一些其他问题:

  • 使用requirelibrary,而不是同时使用
  • c()中使用=。这是参数匹配,而不是赋值

另外两个建议:

  • 您可以使用deSolve内置的绘图函数matplot.0D
  • 我建议使用times <- seq(0, 10, length.out = 100)而不是1:10。这样剧情就会变得流畅。用1(或其他值(开始时间可能可以,但用0开始时间通常更方便

相关内容

最新更新