R-package deSolve:checkFunc出错

时间:2016-05-26 09:38:46

标签: r ode differential-equations

我对R很新,我试图用de deSolve包解决微分方程组。

我总共有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
  }
}

您有什么建议可以摆脱错误或改进代码吗? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

你的问题是,你有两个衍生品&#39; du&#39;和&#39; dm&#39;,但yini的三个值(&#39; u&#39;,&#39; m&#39;和&#39; h&#39;)。这会导致错误。

一种解决方案是(1)添加三阶导数或(2)删除&#39; h&#39;来自yini并将其添加到参数中。