我想制作一个微分方程,其中在一年中的特定时期存在青少年生长的峰值。在今年剩下的时间里,有一个背景出生率。我想用R中的函数来模拟这个,但是我卡住了。青少年变得年轻,年轻人变成成年人(可以繁殖新的青少年)
我认为在函数中使用函数是可能的,但是我得到一个错误......
我现在得到了:
model = function(t, state, parameters) {
with(as.list(c(state, parameters)), {
dJ = function(t, dJ1, dJ2) {
if (t<213) {dJ = rho*A - a*J*A - c*J - d*J*(1+(J/K1))} else {
dJ = r*A - a*J*A - c*J - d*J*(1+(J/K1))}
}
dY = c*J - e*Y * f*Y*(1+Y/K2) - k*Y*A
dA = e*Y - m*A(1+A/K3)
return(list(c(dJ, dY, dA)))
})
}
run()
但是......这不起作用。我收到错误“lsods中的错误(y,times,func,parms,...):REAL()只能应用于'numeric,not al'列表'”
如果您对如何创建这样的模型有任何想法,请告诉我!
没关系,我已经知道了!实际上,我真的很亲密!我将在下面发布答案,因为其他人也在努力解决这个问题!
有效的解决方案是:
model = function(t, state, parameters) {
with(as.list(c(state, parameters)), {
dJ = ifelse(t<213, rho*A - a*J*A - c*J - d*J*(1+(J/K1)),
ifelse(t<305, r*A - a*J*A - c*J - d*J*(1+J/K1)),
rho*A - a*J*A - c*J - d*J*(1+(J/K1))))
dY = c*J - e*Y - f*Y*(1+Y/K2)) - k*Y*A
dA = e*Y - m*A*1+(A/K3))
在这里,rho和r有不同的价值观