如何在ode中使用for循环

时间:2019-04-05 19:36:25

标签: r for-loop ode

我正在基于Lotka-Volterra动力学建立一个模型,该模型包括随机分散测度,目的是随着不良适应的猎物相对密度的增加,随时间推移观察种群数量。

我有一个功能全面的基本LV模型。到目前为止,我已经尝试将整个模型放在一个循环中并将散布定义为一个序列。

这是我的基本模型:

LVmod<-function(Time,State,Pars){
  with(as.list(c(State, Pars)),{
    ingestion1 <- ingP1 * P1 * P #ingestion maladapted
    ingestion2 <- ingP2 * P2 * P #ingestion residents
    ingestion3 <- ingS * S * p #source population

    growthprey1 <- rGrow1 * P1 * (1-((P1+P2)/K)) #mal
    growthprey2 <- rGrow2 * P2 * (1-((P2+P1)/K)) #res
    growthsource <- rGrowS * S * (1-(S/K2)) #source pop

    mortpred <- rMort * P #predator mortality
    mortpredS <- rMort * p #source pred mort
    migration <- S*.5 #dispersal from source pop

    dPrey1 <- growthprey1 - ingestion1 + migration #change in maladapted pop
    dPrey2 <- growthprey2 - ingestion2 # change in resident pop
    dSource <- growthsource - ingestion3 # source
    dPred <- (ingestion1+ingestion2)*assEff - mortpred #change in predator
    dpredS <- (ingestion3)*assEff - mortpredS #source predator

    return(list(c(dPrey1,dPred,dPrey2,dSource,dpredS)))
  })
}

pars <- c(ingP1 = 0.8,
          ingP2 = 0.2,
          ingS = 0.2,
          rGrow1 = 0.5,
          rGrow2 = 1.5,
          rGrowS = 1.5,
          rMort = 0.2,
          assEff = 0.8,
          K = 10,
          K2 = 15)
yini <- c(P1 = 1, P = 2, P2 = 1, S = 1, p = 2)
times <- seq(0,200,by=1)
out <- ode(yini,times,LVmod,pars)

这是问题所在行:

migration <- S*.5 #dispersal from source pop

当前,我的色散值设置为.5。我希望可以有这样的东西:

migration <- S*dispersal

每个迭代的散布随机变化。

这是我尝试过的循环的开始:

for (j in 2:200){
    disp=runif(200,0,1)
    LVmod<-function(Time,State,Pars){......

我想产生一个结果,该结果可以用图形表示为与分散率变化有关的人口随时间的变化。现在,如果我运行一个循环,就会得到大量具有一条水平线的图。

0 个答案:

没有答案