Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用deSolve解R-导数数误差中的常微分方程_R_Ode - Fatal编程技术网

用deSolve解R-导数数误差中的常微分方程

用deSolve解R-导数数误差中的常微分方程,r,ode,R,Ode,我试图使用deSolve包来处理一组方程作为辅助变量的ODE。我一直得到一个错误,导数的数目与初始条件向量的长度不同。我应该换什么 # rm(list=ls()) library(deSolve) exponential=function(t,state,parameters){ with(as.list( c(state,parameters)), { #Aux. Var. fX2 = pmax(0,1-(1-(d2/r12)*(X2/K2))) fX1 = X1/(

我试图使用
deSolve
包来处理一组方程作为辅助变量的ODE。我一直得到一个错误,导数的数目与初始条件向量的长度不同。我应该换什么

# rm(list=ls())  
library(deSolve)

exponential=function(t,state,parameters){ with(as.list( c(state,parameters)), {

   #Aux. Var.
   fX2 = pmax(0,1-(1-(d2/r12)*(X2/K2)))
   fX1 = X1/(X1+k1); 

   # equations (ODE)
   dX1 = C-((d1)*(X1))-(r12)*(X2)*fX2*fX1 # differential equaion
   dX2 = r12*(X2)*fX2*fX1-((d2)*(X2))

   return(list(c(dX1, dX2)))
   })
 }

# -- RUN INFORMATION

# Set Initial Values and Simulation Time
state = c(X1=2,X2=0.01,K2= 10)
times=0:100

# Assign Parameter Values
parameters = c(d1=0.001, d2=0.008, r12=0.3,C=0.5,k1= 0.001)

for (i in 1:length(times)){
  out= ode(y=state,times=times,func=exponential,parms=parameters)
  }

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)**

错误来自定义函数中的
返回
: 您的输入参数
y
的长度为3,但您只返回2个值,这就是错误。你可以用电脑解决你的问题

return(list(c(X1, X2, K2)))
另一种可能是将
K2
带到参数中,那么您的旧
返回值是正确的。您必须确定
K2
是变量还是参数

顺便说一句:为什么是时间循环?我认为这是没有必要的,因为ode是在您提交给
ode
函数的时间间隔内求解的

out= ode(y=state,times=times,func=exponential,parms=parameters)

错误来自定义函数中的
返回
: 您的输入参数
y
的长度为3,但您只返回2个值,这就是错误。你可以用电脑解决你的问题

return(list(c(X1, X2, K2)))
另一种可能是将
K2
带到参数中,那么您的旧
返回值是正确的。您必须确定
K2
是变量还是参数

顺便说一句:为什么是时间循环?我认为这是没有必要的,因为ode是在您提交给
ode
函数的时间间隔内求解的

out= ode(y=state,times=times,func=exponential,parms=parameters)