[MATLAB] - temps d'exécution d'une variable

Fermé
smo8000 Messages postés 5 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 4 septembre 2008 - 22 août 2008 à 15:33
mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 - 22 août 2008 à 17:30
Bonjour, je désire créer une boucle comme suit :

une variable qui s'exécute durant x temps une fois ce temps dépassé une autre prend le relais pendant ce même x temps et ensuite cela revient sur la première.

Dans mon cas :
j'ai une vitesse par exemple
V1 = 10km/h
qui doit s'exécuter durant 30min ensuite une vitesse
V2 = 5Km/h
qui doit s'exécuter durant les 30 prochaines min puis cela doit revenir à V1 pendant 30 min et ainsi de suite

j'ai pensé a quelques chose dans le genre :

V1 = 10km/h;
while t<30min,
if t>30min, end

v2 = 5km/h;
while t>30min,
if t<30min, end

Déjà je voulais savoir si j'étais partie sur de bonne base ensuite je vois pas comment intégrer le faites que chaques phases dure 30 min puis la 2e prend le relais et ainsi de suite.

Je penses qu'il faudrait mettre le temps au démarrage du programme ensuite mettre un t+k avec k pair ou impair suivant la vitesse que l'on veut exécuter.

Débutant sur matlab je vous avoue que j'ai du mal à tout mettre en commum donc si quelqu'un veut bien m'aider j'apprécierai énormement :)

Merci
A voir également:

2 réponses

mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 6
22 août 2008 à 17:30
Je suis tombé sur cela:

4. Optimisation des calculs
Les calculs sont accélérés de façon spectaculaire en utilisant des opérations vectorielles en
lieu et place de boucles. Comparons les deux fonctions suivantes (la commande tic déclenche
un chronomètre ; toc arrête le chronomètre et retourne le temps écoulé depuis tic) :
function [t,b] = test1(n)
% détermine le temps mis pour créer la liste
% des racines carrées des entiers compris entre 1 et n
m = 0 ;
tic ;
for k = 1 : 1 : n
b(k) = m+sqrt(k) ;
end
t = toc ;
function [t,b] = test2(n)
% détermine le temps mis pour créer la liste
% des racines carrées des entiers compris entre 1 et n
tic ;
a = 1 : 1 : n ;
b = sqrt(a) ;
t = toc ;


Tu peux faire un chrono et ajouter a chaque boucle le temps pour avoir le temps écoulé

V=15;
t=0;
while(<condition d'arrêt>)

   tic 
   
   ton traitement

   t=t+toc
  
   if (t<=30*60)
     t=0
     if(V=15)
         V=5;
     else V=15;
     end
  end
end


Je suis parti du principe que cela retourne des seconde mais à vérifier.

Ce n'est pas précis à la seconde étant donné que des charge seront utilisé hors du compteur mais c'est une diée.

Mich



2
@nGel_974 Messages postés 3163 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 25 avril 2010 157
22 août 2008 à 15:45
Bon vu que tu ne précises pas de langage vais faire un petit algo, ça fait longtemps que je n'en ai pas fait :)

timer = 0
V1 = 10
V2 = 5
Vitesse = 0
tempsDebut = 0

        While (timer < 30) do

        timer = tempsDebut + getTime()

        EndWhile

        timer = 0
        tempsDébut = 0

        While (timer < 30) do

        timer = tempsDebut + getTime()

        EndWhile




Je te laisse le soin d'effectuer la conversion ;)
1
mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 6
22 août 2008 à 16:30
Le language c'est MatLab.
Dsl j'ai pas trouvé comment faire, il y a bien une fonction pause mais elle arrêtera toute exécution au lieu de seulement compté.
Il faut faire une sorte d'interruption si tu veux un comptage du temps parallèle à ton application principale et je vois pas comment faire avec mon peu de connaissance en Matlab.

Bon courage Mich
0