微分方程的功能因时间而异(R中)

问题描述 投票:0回答:1

我想制作一个微分方程,其中在一年中的特定时期存在青少年生长的峰值。在今年剩下的时间里,有一个背景出生率。我想用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'列表'”

如果您对如何创建这样的模型有任何想法,请告诉我!

r function if-statement differential-equations
1个回答
0
投票

没关系,我已经知道了!实际上,我真的很亲密!我将在下面发布答案,因为其他人也在努力解决这个问题!

有效的解决方案是:

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有不同的价值观

© www.soinside.com 2019 - 2024. All rights reserved.