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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
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!