дифференциальные уравнения функционируют по-разному в зависимости от времени (в R) - PullRequest
0 голосов
/ 07 марта 2019

Я хотел бы составить дифференциальное уравнение, в котором пик роста несовершеннолетних существует в течение определенного периода года.В остальное время года наблюдается фоновая рождаемость.Я хотел бы смоделировать это с помощью функции в R, но я застрял.Несовершеннолетние становятся молодыми, а молодые становятся взрослыми (что может воспроизводить новых несовершеннолетних)

Я думал, что было бы возможно использовать функцию в функции, но я получаю ошибку ...

Iтеперь получил:

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 () может быть применен только к 'числовому, а не' списку '"

Если у вас есть какие-либоидеи, как я могу создать такую ​​модель, пожалуйста, дайте мне знать!

1 Ответ

0 голосов
/ 07 марта 2019

Неважно, я уже понял! На самом деле, я был очень близко! Я опубликую ответ ниже, на случай, если кто-то еще также борется с ним!

Решение, которое работает:

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 имеют разные значения

...