Scilab : de la théorie à la pratique

I. Les fondamentaux

4. Les entrées/sorties

3. Dates et temps CPUAfficher/CacherAfficher/Cacher

Pour certaines applications, vous pouvez avoir besoin d'accéder à des informations temporelles. Différentes commandes permettent d'évaluer des durées. Vous pouvez ainsi :

  • calculer le temps CPU (= nombre de cycle du processeur) écoulé entre deux actions avec timer ;

  • calculer le temps réel écoulé en millisecondes entre deux actions avec tic/toc, qui démarre/arrête le chronomètre de Scilab ;

  • mettre en pause Scilab pendant un temps donné avec sleep(temps en millisecondes) ou xpause(temps en microsecondes);

  • réaliser des simulations en temps réel avec realtimeinit (qui permet de fixer l'unité de temps) et realtime. Le premier appel à realtime fixe l'origine des dates, les appels suivants obligent Scilab à attendre qu'une date soit passée pour continuer.

Testez ces différentes commandes avec les exemples suivants :

  1 -->// chronométrage avec tic() et toc()
  2  
    -->tic()
  4  
    -->sleep(1000)    //1000ms=1seconde
  6  
    -->toc()
  8  ans  =
     
 10     1.006  
     
 12  
    -->tic()
 14  
    -->xpause(200000)    //200000micros=0.2 secondes
 16  
    -->toc()
 18  ans  =
     
 20     0.203  
     
 22 -->// temps CPU avec timer
     
 24 -->timer();
     
 26 -->sleep(1000)    //1000ms=1seconde
     
 28 -->timer()
     ans  =
 30  
        0.0780005  
 32  
    -->timer();
 34  
    -->xpause(1000000)    //1000000micros=1 seconde
 36  
    -->timer()
 38  ans  =
     
 40     0.0624004  
     
 42 -->//temps réel
     
 44 -->realtimeinit(1)    // unité de temps 1 seconde 
     
 46 -->realtime(0)    // date fixée à t=0
     
 48 -->tic()
     
 50 -->realtime(2)    //attendre date t=2
     
 52 -->toc()    //le chronomètre affichera 2 secondes
     ans  =
 54  
        2.003  

Vous pouvez effectuer des calculs sur les dates, mais prenez garde qu'il existe plusieurs formats pour gérer les dates et autant de fonctions pour les manipuler.

  • clock récupère la date sous la forme d'une liste à six paramètres [année, mois, jour, heure, minute, seconde] ;

  • datenum récupère la date sous la forme du nombre de jours écoulés depuis le 1er janvier de l'an zéro ;

  • getdate récupère la date sous forme d'un timestamp (nombre de secondes écoulées depuis le 1er janvier 1970) ou d'une liste à dix paramètres [année, mois, semaine, jour Julien, jour de la semaine, jour du mois, heure, minute, seconde, millisecondes] (plus complexe que celle renvoyée par clock !).

Une fois les dates récupérées, vous pouvez les traiter avec d'autres commandes :

  • datevec qui convertit un timestamp en une liste correspondant à la date en question pour Scilab ;

  • weekday qui calcule le jour de la semaine correspondant à un timestamp ;

  • eomday qui calcule le dernier jour du mois d'une année donnée ;

  • etime qui calcule l'écart (en secondes) entre deux dates données par des listes à six paramètres.

Pour finir, les fonctions suivantes affichent des dates ou des calendriers :

  • date récupère la date sous forme de chaîne de caractères ;

  • calendar affiche un calendrier mensuel ou annuel.

Attention > Pour la fonction weekday le premier jour de la semaine est le dimanche, alors que pour la fonction calendar le premier jour de la semaine est le lundi. Sans arguments, ces fonctions renvoient les valeurs correspondant à la date courante, sinon elles renvoient les valeurs correspondant aux dates données en paramètres.

Voici quelques exemples d'utilisation des fonctions précédentes :

  1 -->calendar(1970,1)    //calendrier Jan. 1970
  2  ans  =
     
  4  
           ans(1)
  6  
     Jan. 1970   
  8  
           ans(2)
 10  
        L Ma M Je V Sam Dim   
 12  
           ans(3)
 14  
        0.     0.     0.     1.     2.     3.     4.   
 16     5.     6.     7.     8.     9.     10.    11.  
        12.    13.    14.    15.    16.    17.    18.  
 18     19.    20.    21.    22.    23.    24.    25.  
        26.    27.    28.    29.    30.    31.    0.   
 20     0.     0.     0.     0.     0.     0.     0.   
     
 22 -->eomday(2012,2)    // dernier jour de Février 2012
     ans  =
 24  
        29.  
 26  
    -->d1=[1970 1 1 0 0 0]    // format de date scilab
 28  d1  =
     
 30     1970.    1.    1.    0.    0.    0.  
     
 32 -->t1=datenum(d1)    //numéro de la date d1
     t1  =
 34  
        719529.  
 36  
    -->[N,S]=weekday(t1)    // jour de la semaine de la date d1
 38  S  =
     
 40  Jeu.   
     N  =
 42  
        5.  
 44  
    -->date()    //date actuelle
 46  ans  =
     
 48  25-Août-2014   
     
 50 -->d2=clock()    //liste scilab de la date actuelle
     d2  =
 52  
        2014.    8.    25.    12.    16.    24.999998  
 54  
    -->t2=datenum(d2)    //numéro de la date d2
 56  t2  =
     
 58     735836.51  
     
 60 -->datevec(t2)    // date correspondant à t2
     ans  =
 62  
        2014.    8.    25.    12.    16.    24.999998  
 64  
    -->etime(d1,d2)    //écart entre les dates d1 et d2
 66  ans  =
     
 68   - 1.409D+09  
     
 70 -->d=etime(d2,d1)    //écart entre les dates d2 et d1 
     d  =
 72  
        1.409D+09  
 74  
    -->getdate(d)    // jour situé d secondes après le 1er Jan. 1970
 76  ans  =
     
 78     2014.    8.    35.    237.    2.    25.    13.    16.    24.    0.9999983