Bonjour.

Je viens sur ce forum parce que j'ai un problème pour rajouter un event à une équation différentielle, et qu'après avoir lu et relu la documentation matlab, je ne sais toujours pas comment faire.
Je dois modéliser le mouvement d'une voiture sur un trajet défini. Pour cela je divise la route en plusieurs troncon pour lesquels je connais la longueur du tronçon, la pente de la route et la vitesse maximale autorisée. J'ai aussi une fonction qui calcule la position et la vitesse du véhicule en fonction de la vitesse initiale du véhicule, de la position initiale, du rapport de transmission i sur ce troncon et de la pente de la route. C'est de la forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
[T,Y]=ode45(@odefunction1,[ti tf], [Xi Vi i theta],options);
 
On connait toutes le variables en entrées de cette fonction. Ce que je voudrais, c'est que la fonction odefunction1 s'arrête soit lorsque la vitesse atteint ( à une tolérance près ) la vitesse vref connue qui est la vitesse maximale autorisée sur ce tronçon, soit lorsque le véhicule a parcouru une distance d qui est la longueur du tronçon. J'ai vainement essayé de créé un event qui stopperais odefunction1 quand la vitesse est égale à  la vitesse de référence
 
function [value,isterminal,direction] = events(t,y)
if y(2) - vref< tolerance %y(1) = position et y(2) = vitesse au cours du temps
  value = 0
  isterminal = 1; 
  direction = 0
end
end
Je le mets donc en options avec options = odeset('Event',@events)Si maintenant je fais un script qui appelle odefunction1 à chaque portion de route, est-ce que odefunction1 prendra en compte mon event? Pour rajouter un event qui stopperais le solveur lorsque le véhicule a atteint la fin du tronçon, est-ce que je dois recréer une nouvelle fonction distanceEvent ? Parce que je suis un peu perdu sur l'utilisation de ces Event ...

Merci d'avance de vos réponses