Ich habe Probleme mit dem Ode Solver in R von deSolve.deSolve in R gibt falsche Zwischenwerte
Ich habe gefunden, dass der Löser Zwischenwerte ungleich Null für Variablen gibt, die immer gleich Null sein sollten. Es sieht nicht wie ein Problem aus, bis ich versuche, mit Tests wie if (R> 0) {browser()} zu debuggen, das ausgelöst wird.
Mein Code ist unten. Danke im Voraus!
Ellen
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")
Warum überprüfen Sie 'R'0 ** innerhalb der Funktion, anstatt die Eingänge zu überprüfen? Aber sieh dir auf jeden Fall beide Antworten genau an. –
Dies ist nicht mein Code, an dem ich arbeite, aber ein einfaches Beispiel. Ich denke, der steife/nicht-starre Löser ist die Lösung. – EBP