首页 > 解决方案 > R中deSolve的lsoda函数出错

问题描述

我正在尝试使用 deSolve 库的 lsoda 函数模拟逻辑人口增长模型(dp/dt = k p (1-P/K))。但是,我在定义的参数上不断收到错误消息:

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)

错误:func(time, state, parms, ...) 中的错误:缺少参数“K”,没有默认值

我已经在 parms 向量中定义了参数 K,所以我不知道错误来自哪里。这是我第一次使用 deSolve。我试图在论坛中寻找类似的答案,但没有成功。任何帮助是极大的赞赏。

标签: r

解决方案


看起来参数变量 ( 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

推荐阅读