用deSolve解决ODE的导数错误 [英] Solving ODE with deSolve in R- number of derivatives error
问题描述
我正在尝试将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 ode
function.
out= ode(y=state,times=times,func=exponential,parms=parameters)
这篇关于用deSolve解决ODE的导数错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!