2016-09-28 8 views
0

Я только начал работать с deSolve. По какой-то причине простой пример кода дает мне сообщение об ошибке:R: ошибка начального условия в deSolve-пакете

Ошибка в checkFunc (func2, раз, у, 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) 

Как вы можете видеть, у меня есть ровно 4 производные и 4 начальные условия, определенные в Yini. Поэтому я не могу интерпретировать эту ошибку.

Как я могу решить эту проблему?

ответ

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)) 
    }) 
} 
+0

Спасибо большое! Извините за то, что вы заметили очевидное! – Arne

Смежные вопросы