2017-10-27 2 views
0

私はエラーを取得しておいてください。FUNC2、倍、Y、ロー・エラー

Error in checkFunc(Func2, times, y, rho) : 
    The number of derivatives returned by func() (175) must equal the length of the initial conditions vector (51) 

私はBrigattiら2009(predは、獲物モデルWA空間構成要素)

のオフに基づいてモデルを作成しようとしています
x<-c(1:40000) 

left_shift = function(x) { 
    x[c(2:length(x), 1)] 
} 

right_shift = function(x) { 
    x[c(length(x), 1:(length(x) - 1))] 
} 

laplace = function(x) { 
    return(c(left_shift(x) + right_shift(x) - 2 * x)) 
} 

dxdt <- function(time, state, pars) { 
    prey = state[1:length(state)/2] 
    pred = state[(length(state)/2 + 1):length(state)] 
    dprey = pars[5] * laplace(prey) + pars[1] * prey - x[2] * prey * pred 
    dpred = pars[5] * laplace(pred) + pars[3] * prey * pred - pars[4] * pred 
    list(c(prey, pred, dprey, dpred)) 
} 

time <- seq(0, 600, by = 1) 
pars <- c(alpha=1, 
     beta = .5, 
     gamma = .2, 
     delta = .6, 
     D = 0.000008 #(0.004*0.004/2), #diffusion coefficient 
     ) 

state <- rep(0.1, 51) 

out <- as.data.frame(ode(func = dxdt, y = state, parms = pars, times = time)) 
+0

あなた 'state'パラメータは、51の長さを持っていますが、あなたの関数' dxdt'はバック175個の値を示します。方程式を見ることができるモデルへのリンクがありますか? –

+0

これは私がモデルのために持っているコードですが、Bertelliらの方程式を基にしています。相互作用の空間スケールを特徴とする捕食者 - 獲物システムのパターン形成 –

答えて

1

いくつかの問題があります。まず、かっこがありません。

prey = state[1:length(state)/2] 

prey = state[1:(length(state)/2)] 

セカンドをお読みください、あなたの初期条件は、長さが奇数です。 stateは、捕食者捕食者の両方のための初期条件を(この順序で)指定しなければならない。したがって、各位置について2つの値が存在する必要があり、その結果、ベクトルは常に2の倍数でなければなりません。

第3に、関数dxdtlist(c(dprey, dpred))を返す必要があります。状態変数の値を返す理由はありません。なぜなら、ODEソルバはそれらを計算するからです。

はそれらを修正して、これはあなたが得るものです:

left_shift = function(x) { 
    x[c(2:length(x), 1)] 
} 

right_shift = function(x) { 
    x[c(length(x), 1:(length(x) - 1))] 
} 

laplace = function(x) { 
    return(c(left_shift(x) + right_shift(x) - 2 * x)) 
} 

dxdt <- function(time, state, pars) { 
    prey = state[1:(length(state)/2)] 
    pred = state[(length(state)/2 + 1):length(state)] 
    dprey = pars[5] * laplace(prey) + pars[1] * prey - x[2] * prey * pred 
    dpred = pars[5] * laplace(pred) + pars[3] * prey * pred - pars[4] * pred 

    list(c(dprey, dpred)) 
} 

time <- seq(0, 600, by = 1) 
pars <- c(alpha=1, 
      beta = .5, 
      gamma = .2, 
      delta = .6, 
      D = 0.000008 #(0.004*0.004/2), #diffusion coefficient 
) 

state <- rep(0.1, 50) 

out <- as.data.frame(ode(func = dxdt, y = state, parms = pars, times = time)) 
+0

ありがとう、あなたは命を救ってくれてありがとう!!本当にありがとうございました:) –

+0

@GraceMusserよろしくお願いします! – Lyngbakr

関連する問題