Système d'équations différentielles avec retard/fonction lag

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Marion Bouvier
Messages : 2
Enregistré le : 28 Avr 2016, 19:25

Système d'équations différentielles avec retard/fonction lag

Messagepar Marion Bouvier » 29 Avr 2016, 14:25

Bonjour à tous ,
Je suis débutante en R et ai besoin de résoudre un système d'équations différentielles avec retard (DDEs). Je travaille avec la package PBSddesolve qui a l'air d'être le seul adapté, d'après mes recherches... Le système est du type:
d(y1)/dt=(y1-y2)(t)
d(y2)/dt= (y1-y2)(t-taui)
d(y3)/dt= (y2-y3)(t-tauj)

Pour le delay, j'ai utilisé la fonction lag:

Code : Tout sélectionner

require(PBSddesolve)
local(env=.PBSddeEnv, expr={
parms<-c(taui=5, tauj=10)

myGrad<- function(t, y, parms){
   with(as.list(c(parms)),{

   if(t<taui)
     lag1<-1
   else
     lag1<-pastvalue(t-taui)

   if(t<tauj)
      lag2<-1
   else
      lag2<-pastvalue(t-tauj)
   
   y1 <- y[1]-y[2]
   y2 <- lag1[1]- lag1[2]
   y3 <- lag2[2]-lag2[3]

return(c(y1, y2, y3))
})
}

yinit<-c(0.3,1,2)

yout<-dde(yinit,times=seq(0, 150, by=0.02), func=myGrad, parms=parms)
plot(yout$time, yout$y1, type="l", col="red", xlab="t", ylab="stocks y",ylim=c(min(yout$y1, yout$y2, yout$y3), max(yout$y1, yout$y2, yout$y3)))
lines(yout$time, yout$y2, type="l", col="blue")
lines(yout$time, yout$y3, type="l", col="green")
legend("topleft", legend=c("y1", "y2", "y3"), lwd=2, lty=1, xjust=1, yjust=1, col=c("red", "blue", "green"))
})


Cela fait quelques jours maintenant que je travaille dessus mais voici mon problème: Quand je le teste il n'a pas l'air de comprendre ce que sont lag1[2], lag2[2] et lag2[3]... il applique toujours le delay à la fonction concernée par la dérivation.
Ainsi, si je le teste avec
y1<- 3
y2<-lag1[1] (pour lui dire y1(t-taui))
y3<-t

L'allure de y1 et y2 est la bonne, mais celle de y2 ne varie pas lorsque je change l'expression de d(y1)/dt...
De plus, mettre "lag1" dans l'expression à la place de "lag1[1]" modifie toutes les courbes en créant un delay alors qu'a priori seule celle de y2 devrait être changée (même si je ne sais pas comment)..

J'espère que ce n'est pas trop confus, et si quelqu'un a une petite idée de comment régler ce problème, ou simplement une explication de comment fonctionne la fonction lag, je suis preneuse!! :)
(Par exemple, est ce que lag va calculer la valeur de y1 en t-taui puis la réinjecter dans l'expression de d(y2)/dt et donner un résultat faux, ou remplacer t par t-taui dans l'expression de y1 et l'injecter dans d(y2)/ft, ce que je veux a priori?..)

Merci beaucoup d'avance!

Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité