R:deSolve-package 中的初始条件错误
R: initial condition error in deSolve-package
我刚开始使用 deSolve。出于某种原因,一个简单的示例代码给了我这个错误信息:
Error in checkFunc(Func2, times, y, rho) : The number of
derivatives returned by func() (1) must equal the length of the
initial conditions vector (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 个初始条件。因此,我无法解释此错误。
我该如何解决这个问题?
在你的函数中 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))
})
}
我刚开始使用 deSolve。出于某种原因,一个简单的示例代码给了我这个错误信息:
Error in checkFunc(Func2, times, y, rho) : The number of derivatives returned by func() (1) must equal the length of the initial conditions vector (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 个初始条件。因此,我无法解释此错误。
我该如何解决这个问题?
在你的函数中 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))
})
}