【问题标题】:R: initial condition error in deSolve-packageR:deSolve-package 中的初始条件错误
【发布时间】:2017-02-06 17:15:11
【问题描述】:

我刚开始使用 deSolve。出于某种原因,一个简单的示例代码给了我这个错误信息:

checkFunc(Func2, times, y, rho) 中的错误: func() (1) 返回的导数必须等于 初始条件向量(4)

我使用以下示例代码:

library(deSolve)
model <- function (time, y, parms) {
  with(as.list(c(y, parms)), {
    dY1 <- -k1*y1*y2 + k2*y3
    dY2 <- k2 * y3 - k1*y1*y2
    dY3 <- -k2*y3-k3*y3+k1*y1*y2
    dY4 <- k3*y3
    list(dY1,dY2,dY3,dY4)
  })
}
yini <- c(y1 = 1,y2=1,y3=0,y4=0)
parms <- c(k1=0.1,k2=0.1,k3=0.1)
times <- seq(0, 100, 1)
out <- ode(y=yini, times=times, func=model, parms=parms)
plot(out)

如您所见,我在 yini 中定义了 4 个导数和 4 个初始条件。因此,我无法解释此错误。

我该如何解决这个问题?

【问题讨论】:

    标签: r ode


    【解决方案1】:

    在您的函数model 中,最后一行必须是:

    list(c(dY1,dY2,dY3,dY4))
    

    所以输出必须在一个向量中连接c()。这是deSolvepackage 所要求的。

    所以整个函数看起来像这样:

    model <- function (time, y, parms) {
      with(as.list(c(y, parms)), {
        dY1 <- -k1*y1*y2 + k2*y3
        dY2 <- k2 * y3 - k1*y1*y2
        dY3 <- -k2*y3-k3*y3+k1*y1*y2
        dY4 <- k3*y3
        list(c(dY1,dY2,dY3,dY4))
      })
    }
    

    【讨论】:

    • 非常感谢!很抱歉忽略了显而易见的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多