R:deSolve-package中的初始条件错误

时间:2016-09-28 15:54:45

标签: r ode

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

  

checkFunc中的错误(Func2,次,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个初始条件。因此,我无法解释这个错误。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

因此输出必须在向量中连接c()。这是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(c(dY1,dY2,dY3,dY4))
  })
}