【问题标题】:Error with lsoda function of deSolve in RR中deSolve的lsoda函数出错
【发布时间】:2019-02-02 06:19:14
【问题描述】:

我正在尝试使用 deSolve 库的 lsoda 函数模拟逻辑人口增长模型 (dp/dt = kp(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)

错误:函数中的错误(时间,状态,参数,...): 缺少参数“K”,没有默认值

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

【问题讨论】:

    标签: r


    【解决方案1】:

    看起来参数变量(parms)可以通过with()访问(参见here)。试试这个:

    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
    

    【讨论】:

    • 这正是我所需要的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多