Ошибка с функцией lsoda от deSolve в R - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь смоделировать модель логистического прироста населения (dp / dt = k p (1-P / K)), используя функцию lsoda библиотеки deSolve. Тем не менее, я получаю сообщение об ошибке с определенными параметрами:

tiempo <- seq(0,10,0.5) #define time interval
ic2 <- 1 #define initial population density
parms <- c(K=100, k=2) #define the parameters of the model

log.gr <- function(t,x,k,K){ #define function.

x1 <- k * x[1] * (1-(x[1]/K))
list(c(x1))
}

log.gr.out <- lsoda(ic2, tiempo,log.gr,parms)

Ошибка: ошибка в функции (время, состояние, параметры, ...): аргумент "K" отсутствует, по умолчанию нет

Я уже определил параметр K в векторе parms, поэтому не знаю, откуда исходит ошибка. Я впервые использую deSolve. Я пытался найти аналогичный ответ на форумах, но мне это не удалось. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 27 августа 2018

Похоже, что переменная параметра (parms) доступна через with() (см. здесь ). Попробуйте это:

tiempo <- seq(0, 10, 0.5) #define time interval
ic2 <- 1 #define initial population density
parms <- c(K = 100, k=2) #define the parameters of the model
log.gr <- function(t, x, parms) {
        with(as.list(c(parms, x)), {
                x1 <- k * x[1] * (1-(x[1]/K))
                list(c(x1))
        })}
log.gr.out <- lsoda(ic2, tiempo,log.gr,parms)
log.gr.out # output
   time         1
1   0.0  1.000000
2   0.5  2.672371
3   1.0  6.945310
4   1.5 16.866424
5   2.0 35.546072
6   2.5 59.985918
7   3.0 80.295546
8   3.5 91.719949
9   4.0 96.785724
10  4.5 98.793065
11  5.0 99.552603
12  5.5 99.834928
13  6.0 99.939218
14  6.5 99.977638
15  7.0 99.991767
16  7.5 99.996957
17  8.0 99.998889
18  8.5 99.999599
19  9.0 99.999844
20  9.5 99.999940
21 10.0 99.999977
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...