У меня возникают проблемы с решателем ode в R от deSolve.deSolve in R дает неправильные промежуточные значения
Я обнаружил, что решатель дает ненулевые промежуточные значения для переменных, которые всегда должны быть равны нулю. Это не похоже на проблему, пока я не начну отлаживать тесты, например if (R> 0) {browser()}, которые запускаются.
Мой код ниже. Заранее спасибо!
Эллен
library(deSolve)
simpleSIR <- function(t,states,par){
with(as.list(c(states,par)),{
S=states[1]
I=states[2]
R=states[3]
newinfections = beta*I*S
dS <- -newinfections
dI <- newinfections - gamma*I
dR <- gamma*I
if(R>0)
{
print(paste("why is this not zero?",R))
}
return(list(c(dS,dI,dR)))
})}
par=list(beta=0.3,gamma=0.0)
init=c(0.99,0.01,0)
times <- seq(0,500,by = 1)
out <- as.data.frame(ode(y = init, times = times, func = simpleSIR, parms = par,maxsteps=2000))
plot(out[,2],type="l")
lines(out[,3],type="l",col="red")
lines(out[,4],type="l",col="blue")
Почему вы проверяете 'R> 0' ** внутри ** функцию вместо проверки входов? Но в любом случае внимательно изучите оба ответа. –
Это не мой код, над которым я работаю, но простой пример. Я считаю, что решение жесткой/не-жесткой решетки. – EBP