gpt4 book ai didi

r - 在 deSolve 中的时间步更改参数值

转载 作者:行者123 更新时间:2023-12-04 17:43:59 27 4
gpt4 key购买 nike

我正在尝试使用 deSolve 解决 R 中的 ODE .使用以下代码,我期望参数 gamma0在时间步长 0、1、2、3、4、5、6、7、8、9 和 10 处取值 5,否则取 0。然而,print(gamma0)显示 gamma0保持在 0。

这是我的 ODE:

library(deSolve) 
param <- c(a = 0.1, b = 1)
yini <- c(alpha0 = 6, beta0 = 2)

mod <- function(times, yini, param) {

with(as.list(c(yini, param)), {

gamma0 <- ifelse(times %in% seq(0,10,1), 5, 0)

## print(gamma0)

dalpha0 <- - a*alpha0 + gamma0
dbeta0 <- a*alpha0 - b*beta0
return(list(c(dalpha0, dbeta0)))

})}

times <- seq(from = 0, to = 10, by = 1/24)
out <- ode(func = mod, times = times, y = yini, parms = param)
plot(out, lwd = 2, xlab = "day")

我究竟做错了什么?

最佳答案

这是对您的功能的非常简单的修改。如果您有兴趣知道自己做错了什么,可以查看以下内容。

mod <- function(times, yini, param) { 

dt = times[2] - times[1]
with(as.list(c(yini, param)), {

gamma0 <- ifelse(times <= 10*dt, 5, 0)

## print(gamma0)

dalpha0 <- - a*alpha0 + gamma0
dbeta0 <- a*alpha0 - b*beta0
return(list(c(dalpha0, dbeta0)))

})}

编辑

与 G5W 的回答相同,问题在于您正在比较的内容 times到。

当你在写作
times %in% seq(0,10,1)

你不是指时间步长。您只需引用 times 的值.

所以,如果你想在前 10 个时间步中使用它,你只需要使用我的代码或任何考虑 dt 的东西。 .

但这里有一个问题要问你:

如果您不需要 gamma0根据 times更改并希望它在前 11 (10) 个时间步长为 5,为什么要将其与 times 进行比较?为什么不简单地将这些时间步长设置为 5?

关于r - 在 deSolve 中的时间步更改参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com