Bonjour,
Je dois utiliser matlab pour comparer des graphes obtenus selon différentes méthodes décrivant un même problème.
Ma version du programme est la 8.1.0.604 (R2013a).
Je vous rapporte ici seulement l'une des méthodes, il s'agit de l'avancée d'une distance y en fonction du temps t.
J'ai construit une boucle (c'est comme ça que ça s'appelle?) for, dans laquelle chaque avancée dans le temps doit se faire en ajoutant une valeur de temps dt/2 au temps initial ou précédent. Dans le code que je vous joins, y(t+1) doit être la valeur de y au temps t+dt/2 et y(t+2) sa valeur au temps t+2*(dt/2), donc t+dt.
dt reste fixe tout le temps. Il est égal à 6/20, c'est juste pour mettre en évidence son lien avec les extrémités de t qu'il est écrit comme ça.
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 dt = (6-0) / 20 ; y = 5 ; ydot = -2 ; ydotnew = 0 ; %The proposed method for t = 0:dt/2:6 ; ydot = sin(5*t) - 0.4*y ; y(t+2) = y(t) + dt * ydot(t) ; ydot(t+2) = sin(5*(t+2)) - 0.4 * y(t+2) ; ydotnew(t+2) = ( ydot(t) + ydot(t+2) ) / 2 ; y(t+1) = y(t) + dt/2 * ydotnew(t+2) ; end y1 = y ; plot(t,y1)
y=5 et ydot=-2 sont les conditions initiales. Je ne sais pas s'il y a besoin de ydotnew=0.
La formule de ydot est donnée.
L'avancée de la fonction comme décrite plus haut.
ydotnew(t+2) est la moyenne de ydot au temps t et de ydot au temps t+2.
Le graphe à obtenir est celui de y selon le temps t, selon la dernière ligne du code avant end.
Lorsque j'essaie de faire marcher tout cela, voilà la réponse de matlab:
Selon le problème sur lequel je me base, y(0) doit être égal à 5, c'est la condition initiale.Attempted to access y(0); index must be a positive integer or logical. Error in Pb01proposed (line 11) y(t+2) = y(t) + dt * ydot(t) ;
Ma question est double:
Est-ce que mon code est bien construit? Si oui, où est l'erreur?
Et comment faire savoir à matlab que y(0)=5 ?
(Et si déjà, est-ce qu'il y a réellement besoin de ydotnew=0 au début du code? Il n'y a pas réellement de condition initiale pour ce paramètre)
Je n'étudie pas en français et espère m'être bien exprimée =)
Merci d'avance,
Partager