2016-05-26 9 views
1

私はRでかなり新しく、deSolveパッケージで微分方程式を解くことを試みています。RパッケージdeSolve:checkFuncのエラー

私は合計10000のタイムステップと100のタイムステップごとに変数の値を変更する必要があります。私はエラーがどこから来るのか、非常にわからないんだけど

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

: 私が試したコードは私に、次のエラーが発生します。ここ は、これまでの私のコードです:

library(deSolve) 

#--------variables and parameter-------------------------- 


parameters <- c(up = 0.0001, hm = 0.1, hp = 0,889, mm = 0.1 , nt = 100) 
yini <- c(u = 1, m = 0.001, h = 0.001) 
times <- seq(0,100, by=0.1) 
out<- NULL 

#--------functions--------------------------------------- 
DiffU <- function(t, yini, parameters){ 
    with(as.list(c(yini, parameters)),{ 

    #functions 
    du <- -(up*u) + hm*h + (1/2*nt)*h 
    dm <- hp*h - mm*m - (1/nt)*m 

    # return functions 
    list(c(du, dm)) 
    }) 
} 

#--------------------------------------------- 
repeat{ 
    out<- rbind(out, ode(yini, times, DiffU, parameters)) 
    yini<-c(u = u+0.5*h, m = 0.001, h = m+0.5*h) 
    x<- x+1 
    if (x==100){ 
    break 
    } 
} 

あなたはエラーを取り除くためにまたはコードを改善するための任意の提案を持っていますか? ありがとうございます!

答えて

0

あなたの問題は、2つの派生物「du」と「dm」がありますが、yini( 'u'、 'm'と 'h')の3つの値です。これにより、エラーが発生します。

1つの解決策は、(1)3次導関数を追加すること、または(2)yiniから 'h'を削除してパラメータに追加することです。