Очень новый пользователь здесь. Я пытаюсь использовать lsoda для решения дифференциальных уравнений, расслоенных на два слоя (как обозначается петлей for(s in 1:2)
).Сообщение об ошибке с объектами в 'lsoda' в R
При выполнении этого полный код, я получаю сообщение об ошибке
объект «N» не найден
независимо от того, где и как я пытаюсь определить N
.
Может ли кто-нибудь помочь выявить ошибку или сообщить о том, что я делаю неправильно? Заранее спасибо.
код R:
library(deSolve)
Dyn <- function(t, var,par) {
with(as.list(c(par, var)), {
for(s in 1:2){
#Derivatives
dX[s] <- mu*N[s] - sigma*X[s] - (c[s]*beta*(InD[s] +ID[s]+ IdT[s])/N[s])*X[s] - mu*X[s]
dXint[s] <- sigma*X[s] - (1-omega)*(c[s]*beta*(InD[s] +ID[s]+ IdT[s])/N[s])*Xint[s] - mu*Xprep[s]
dInD[s] <- (c[s]*beta*(InD[s] +ID[s]+ IdT[s])/N[s])*X[s] - psi*InD[s]- mu*InD[s]
dID[s] <- (1-omega)*(c[s]*beta*(InD[s] +ID[s]+ IdT[s]) /N[s])*Xint[s]+ psi*InD[s]- mu*ID[s]
N[s] <- X[s]+Xint[s]+InD[s]+ID[s]
diffs <- c(dX[s], dXint[s], dInD[s], dID[s], N[s])}
return(list(diffs))
})}
#Defining parameter and initial values
par <- c(mu=0.033, sigma=0.29, beta=0.40, c=c(2, 30), Ctot=1773600, N=c(332550, 36950), psi=0.022, omega=0.44)
init <- c(X=c(332550,36950), Xint=c(0,0), InD=c(1,1), ID=c(0,0))
t <- seq(0, 30, by=0.1)
#Numerical solution#
Hom.sol <- lsoda(init, t, Dyn,par)
Я не вижу, где вы определили '' N'', - дайте нам полный воспроизводимый пример , Для справки см. [Здесь] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –