用deSolve解决ODE的导数错误 [英] Solving ODE with deSolve in R- number of derivatives error

查看:146
本文介绍了用deSolve解决ODE的导数错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将deSolve包用于带有方程式作为辅助变量的一组ODE.我不断得到错误,即导数的数量与初始条件向量的长度不同.我应该改变什么?

I am trying to use the deSolve package for a set of ODE's with equations as auxiliary variables. I keep getting the error where the number of derivatives isn't the same length as the initial conditions vector. What should I change?

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

推荐答案

错误来自定义函数中的return: 输入参数y的长​​度为3,但是只返回2个值,这就是错误.您可以使用

The error comes from the return in your defined function: Your input parameter y has length 3, but you only return 2 values back, that's the error. You can solve your problem with

return(list(c(X1, X2, K2)))

另一种可能性是将K2用作参数,那么您以前的return是正确的.您必须确定K2是变量还是参数.

Another possibility is to take K2 to the parameters, then your old return was right. You have to decide if K2 is a variable or a parameter.

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

And BTW: Why a for loop with the time? In my opinion that is not necessary, because the ODEs are solved in the timeinterval you submitted to the odefunction.

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

这篇关于用deSolve解决ODE的导数错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆