Chapitre 2 Chaînes de caractères, dates et heures
Même si MATLAB est un langage de calcul scientifique de haut niveau et orienté Objet, il offre, de plus, des possibilités de traitement des chaînes de caractères, des dates et heures.
Pour plus de renseignements sur les fonctions MATLAB concernant les chaînes de caractères, vous pouvez consulter l'aide en ligne (help strfun).
I. Les chaînes de caractères
I.1. Généralités
Une chaîne de caractères est toute suite de caractères placés entre guillemets.
>> Chaine = 'MATLAB R2009' Chaine =
MATLAB R2009
Comme pour les polynômes, une chaîne de caractères est considérée par MATLAB comme un vecteur ligne dont on peut calculer la taille, la longueur, la transposer, etc.
N. Martaj, M. Mokhtari, MATLAB R2009, SIMULINK et STATEFLOW pour Ingénieurs, Chercheurs et Etudiants, DOI 10.1007/978-3-642-11764-0_2, © Springer-Verlag Berlin Heidelberg 2010
I. Les chaînes de caractères I.1. Généralités
I.2. Fonctions propres aux chaînes de caractères I.2.1. Conversion de chaînes en nombres I.2.2. Conversion de nombres en chaînes I.2.3. Tests sur les chaînes
I.2.4. Concaténation de chaînes de caractères I.2.5. Opérations sur les chaînes
I.3. Fonctions utiles
I.4. Lecture et écriture des chaînes formatées I.5. Des programmes utiles
I.6. Applications
I.6.1. Cryptage et décryptage d’un message I.6.2. Palindrome
II. Gestion des dates et heures
II.1. Différents formats de dates et heures II.2. Autres fonctions utiles de mesure du temps
• Extraction d’une partie de la chaîne
>> SousChaine=Chaine(8:length(Chaine)) SousChaine =
R2009
La longueur d’une chaîne est égale au nombre des caractères, y compris les blancs (espaces) si elle possède.
• Taille
>> size(SousChaine) ans =
1 6
• Transposition
>> SousChaine' ans =
R 2 0 0 9
I.2. Fonctions propres aux chaînes de caractères
I.2.1. Conversion de chaînes en nombres
Comme dans les fonctions, on a la possibilité de tester le type des arguments d’entrée, certaines de celles- ci s’appliquent autant aux vecteurs de numériques qu’aux chaînes de caractères, comme la fonction abs qui retourne le module d’un complexe ou le code ascii d’un caractère.
• abs
>> abs('MATLAB') ans =
77 65 84 76 65 66
• double
Transforme une chaîne en format numérique en double précision.
>> Chaine='MATLAB';
>> Double=double(Chaine) Double =
77 65 84 76 65 66
>> whos
Name Size Bytes Class Attributes Chaine 1x6 12 char
66 Chapitre 2
Double 1x6 48 double La taille mémoire occupée par la variable Double est 4 fois celle de la chaîne Chaine.
• str2double
Transforme le nombre en chaîne sous forme d’un nombre en double précision.
>> Chaine='MATLAB';
>> str2double(Chaine) ans =
NaN
>> Ch1='123';
>> str2double(Ch1) ans =
123
• bin2dec
Convertit un nombre binaire sous forme de chaîne en sa valeur décimale.
>> bin2dec('0111') ans =
7
• hex2num
Cette fonction fournit une conversion d'un nombre écrit sous forme hexadécimale IEEE (chaîne de caractères) en un flottant double précision.
>> hex2num('400921fb54442d18') ans =
3.1416
>> ans==pi ans = 1
Le résultat est égal à π.
• hex2dec
Conversion d'un nombre hexadécimal (écrit sous forme d'une chaîne de caractères) en un nombre entier.
>> hex2dec('F89') ans =
3977
Les chaînes de caractères, dates et heures 67
I.2.2. Conversion de nombres en chaînes
• char
Convertit un tableau d’entiers non négatifs en caractères (les 127 premiers sont les codes ascii de ces caractères).
>> char([77 65 84]) ans =
MAT
>> char([77 65 84 129 206]) ans =
MAT Î
• setstr
Réciproquement, connaissant les codes ASCII des caractères d'une chaîne, on peut obtenir la chaîne de caractères correspondante par la fonction setstr.
>> Code=abs('SIMULINK') Code =
83 73 77 85 76 73 78 75
>> setstr(Code) ans =
SIMULINK
• num2str
Transforme un nombre sous forme d’une chaîne de caractères.
>> ch1 = 'MATLAB';
>> Version = 2009;
>> Chaine = [ch1, ' Version ', 'R', num2str(2009),'a']
Chaine =
MATLAB Version R2009a
• mat2str
Transforme la matrice numérique en chaîne de caractères.
>> MatString=mat2str([5 4 7; 8 4 2; 6 0 8]) MatString =
[5 4 7;8 4 2;6 0 8]
>> isstr(MatString) ans =
1
>> size(MatString) ans =
68 Chapitre 2
1 19
Le résultat est bien une seule chaîne de caractères de 19 caractères.
• str2num
Effet inverse de la commande num2str. Transforme un nombre vu comme une chaîne en nombre.
>> Ch='1+3.14' Ch =
1+3.14
En transformant la chaîne en nombre, l’opération arithmétique est effectuée.
>> str2num(Ch) ans =
4.1400
>> strcat(strvcat('cos(3.14)','exp(log(2.71))')) ans =
cos(3.14) exp(log(2.71))
>> str2num(ans) ans =
-1.0000 2.7100
• int2str
Convertit un entier en chaîne de caractères.
>> int2str([23 56;21 9]) ans =
23 56 21 9
>> isstr(ans) ans =
1
• dec2hex
Conversion d'un nombre entier en un nombre hexadécimal donné sous forme d'une chaîne de caractères.
>> dec2hex(77) ans =
4D
• dec2bin
Convertit en binaire sous forme d’une chaîne l’entier donné en argument.
Les chaînes de caractères, dates et heures 69
>> dec2bin(3) ans =
11
>> isstr(ans) ans =
1
I.2.3. Tests sur les chaînes
Retourne 1 si le caractère est un espace et 0 autrement.
>> isspace('Mat lab')
ans =
0 0 0 1 0 0 0 Le 4ème caractère de la chaîne est un espace.
• isstr, ischar
Ces 2 commandes retournent 1 si l’argument est une chaîne de caractères et 0 autrement.
>> isstr('MATLAB est un langage de programmation de haut niveau') ans =
1
>> isstr('MATLAB')==ischar('SIMULINK') ans =
1
• isletter
Retourne un tableau de 0 et 1 ; 1 pour les lettres de l'alphabet y compris les lettres avec accents, et 0 pour le reste des caractères.
>> Chaine=['è5f87';'çyéfg']
Chaine = è5f87 çyéfg
>> isletter(Chaine) ans =
1 0 1 0 0 1 1 1 1 1
70 Chapitre 2
I.2.4. Concaténation de chaînes de caractères
Pour concaténer horizontalement des chaînes de caractères, il suffit de les mettre comme des éléments d’un vecteur ligne.
>> ChaineConcat=['MATLAB ' 'est un langage ' 'de haut niveau']
ChaineConcat =
MATLAB est un langage de haut niveau
• strcat
Concatène une suite de chaînes données en argument.
>> strcat('MATLAB',' R2009a') ans =
MATLAB R2009a
La concaténation verticale comme éléments d’un vecteur colonne impose que ces chaînes soient de même longueur.
>> strvcat('MATLAB & SIMULINK','R2009a') ans =
MATLAB & SIMULINK R2009a
On doit rajouter des blancs à la chaîne la plus petite.
>> ['MATLAB & SIMULINK';'R2009a ']
ans =
MATLAB & SIMULINK R2009a
>> size(ans) ans =
2 17
• strvcat
Concaténation verticale de chaînes de caractères, indépendamment de leurs longueurs.
>> strvcat('MATLAB & SIMULINK','R2009a') ans =
MATLAB R2009a
MATLAB ajoute automatiquement le nombre de blancs nécessaires à la chaîne la plus courte.
Les chaînes de caractères, dates et heures 71
I.2.5. Opérations sur les chaînes
• strcmp
Compare 2 chaînes de caractères données en arguments.
>> TestEgalite=strcmp('MATLAB','matlab') TestEgalite =
0
Les 2 chaînes de caractères ne sont pas identiques.
• strncmp
Compare les N premiers caractères de chaînes.
>> Chaine1='MATLAB';
>> Chaine2='MATlab';
>> TestIdentN=strncmp(Chaine1, Chaine2,3) TestIdentN =
1
Les 3 premiers caractères des 2 chaînes sont identiques. Les 4 premiers ne le sont pas à cause de la lettre l qui est une fois en majuscule et une autre en minuscule.
>> TestIdentN=strncmp(Chaine1, Chaine2,4) TestIdentN =
0
• strcmpi
Compare les chaînes en ignorant les types majuscule et minuscule.
>> TestIdent=strcmpi('MATLAB','matlab') TestIdent =
1
• findstr.
Recherche d’une chaîne dans une autre.
>> Chaine1='TLAB';
>> Chaine2='MATLAB';
>> findstr(Chaine1, Chaine2) ans =
3
La réponse est que la chaîne Chaine1 est à l’intérieur de Chaine2 et qu’elle commence à la 3ème position.
72 Chapitre 2
On vérifie bien cette chaîne par indexation de la chaîne Chaîne2.
>> Chaine2(1,ans:length(Chaine2)) ans =
TLAB
• strfind
Recherche les indices où se trouve une chaîne dans une autre.
>> findstr(Chaine2,'A') ans =
2 5
La chaîne ‘A’ se trouve bien dans la chaîne ‘MATLAB’ aux positions 2 et 5.
• upper, lower
Transforme respectivement une chaîne en majuscules et en minuscules.
>> Maj=upper('MATlab') Maj =
MATLAB
>> Minus=lower('MATlab') Minus =
matlab
• strrep
Ch = strrep(Ch1,Ch2,Ch3) remplace toutes les occurrences de la chaîne Ch2 dans Ch1 par la chaîne Ch3.
>> Ch=strrep('Ceci est un exemple de niveau moyen','moyen','très bon') Ch =
Ceci est un exemple de niveau très bon
• strtrim
Supprime les blancs avant la chaîne.
>> Chaine=' MATLAB R2009 et SIMULINK' Chaine =
MATLAB R2009 et SIMULINK
>> Chaine2=strtrim(Chaine) Chaine2 =
MATLAB R2009 et SIMULINK
>> length(Chaine)
Les chaînes de caractères, dates et heures 73
ans = 35
>> length(Chaine2) ans =
24
La longueur de la chaîne est passée de 35 à 24 en supprimant les blancs devant la chaîne Chaine.
On se propose, ci-après, de supprimer tous les blancs de la chaîne de caractères. On remplace tous les blancs par un ensemble vide. Malgré le Warning, le résultat est bon.
>> Chaine3= strrep(Chaine,' ',[])
Warning: Inputs must be character arrays or cell arrays of strings.
x =
MATLABetSIMULINK
• strtok
Retourne le 1er mot d'une chaîne, ainsi que le reste. Les champs sont séparés par un délimiteur qui est par défaut l'espace.
>> Chaine = 'MATLAB R2009a';
>> [PremierMot, reste] = strtok(Chaine) PremierMot =
MATLAB reste = R2009a
>> enreg = 'Langage de très haut niveau : MATLAB';
>> delimiteur = ':';
>> [nom, reste] = strtok(enreg,delimiteur) nom =
Langage de très haut niveau reste =
: MATLAB
I.3. Fonctions utiles
• eval
Evaluation d'une chaîne de caractères contenant des commandes MATLAB, des opérations et des noms de variables. Si la chaîne n'est pas valide une erreur est retournée.
>> x = [2*pi pi/3; pi/2 -1]
x =
6.2832 1.0472 1.5708 -1.0000
74 Chapitre 2
>> Chaine = 'exp(-det(sin(x)))' Chaine =
exp(-det(sin(x)))
>> eval(Chaine) ans =
2.3774
• poly2str
Retourne un polynôme sous forme d’une chaîne de caractères.
>> p=poly2str([1 -2 4],'x') p =
x^2 - 2 x + 4
• texlabel
Permet d’afficher les caractères TeX pour des labels dans les graphiques par exemple..
x=-2*pi:pi/10:2*pi;
plot(x, sinc(x))
f1=texlabel('sin(sqrt(lambda^2+gamma^2))/sqrt(lambda^2+gamma^2)');
gtext(f1)
f2=texlabel('angle : -2\pi : 2\pi') xlabel('angle : -2\pi : 2\pi') title('Tracé du sinus cardinal')
-8 -6 -4 -2 0 2 4 6 8
-0.2 0 0.2 0.4 0.6 0.8
1 sin(sqrt(λ2+γ2))/ sqrt(λ2+γ2)
angle : -2π : 2π Tracé du sinus cardinal
Les chaînes de caractères, dates et heures 75
• blanks
Permet de générer une chaîne de caractères formée de blancs. Cette commande est utile dans le cas où l'on a besoin d'un vecteur colonne de chaînes de caractères de même longueur. Les chaînes sont complétées par des blancs jusqu'à ce que la longueur maximale soit atteinte. Nous proposons ci-après un exemple d'application de cette commande.
fichier blancs.m
% chaînes à assembler dans un vecteur colonne Chaine1 = 'MATLAB & SIMULINK';
Chaine2 = 'Version R2009';
n = 2;
% recherche de la longueur maximale for i = 1:n,
LongueurChaine(i) = length(eval(['Chaine', num2str(i)]));
end
% Longueur maximale des chaînes à concaténer LongMax = max(LongueurChaine);
% Concaténation verticale des chaînes équilibrées ConcatChaines = [];
for i = 1:n
Chaine = eval(['Chaine', num2str(i)]); % i-ème chaîne longueurChaine = length(Chaine);
Chaine = [Chaine, blanks(LongMax-longueurChaine)];
ConcatChaines = [ConcatChaines; Chaine];
end
% Affichage des chaînes concaténées ConcatChaines
>> AjoutBlancs ConcatChaines = MATLAB & SIMULINK Version R2009
>> eq(length(ConcatChaines), length('MATLAB & SIMULINK')) ans =
1
MATLAB prévoit la commande str2mat pour effectuer les opérations décrites précédemment.
>> Chaine1=['MATLAB, langage de calcul scientifique de haut niveau'];
>> Chaine2=['& SIMULINK VersionR2009a'];
>> str2mat(Chaine1,Chaine2) ans =
MATLAB, langage de calcul scientifique de haut niveau
& SIMULINK VersionR2009a
76 Chapitre 2
• deblank
Supprime les espaces présents à la fin d'une chaîne de caractères.
>> Chaine = 'MATLAB ' Chaine =
MATLAB
>> size(Chaine) ans =
1 18
I.4. Lecture et écriture de chaînes formatées
• sprintf
Le but de cette fonction est l'envoi de sorties formatées dans une chaîne.
[chaîne, msg_erreur] = sprintf(format, data1, data2, ...) La chaîne retournée "chaîne" contient les données des matrices data1, data2, etc. arrangées sous le contrôle de la chaîne de formatage format (dont les instructions sont analogues à celles du langage C).
Si une erreur se produit, un message msg_erreur est généré, sinon une chaîne vide est retournée.
Cette fonction est semblable à la fonction fprintf ; l'écriture est faite sur une chaîne de caractères MATLAB au lieu d'un fichier.
>> x=exp(1) x =
2.7183
>> [Chaine, msg] = sprintf('la valeur du neper vaut : %5.2f',x) Chaine =
la valeur du neper vaut : 2.72 msg =
''
Si x est une matrice, le résultat serait une concaténation des chaînes obtenues par l'application de la fonction sprintf à chacun des éléments de la matrice x.
>> x=randn(2) x =
0.5377 -2.2588 1.8339 0.8622
>> [Chaine, msg] = sprintf('Matrice aléatoire : %5.2f',x) Chaine =
Matrice aléatoire : 0.54Matrice aléatoire : 1.83Matrice aléatoire : -2.26Matrice aléatoire : 0.86
msg = ''
Les chaînes de caractères, dates et heures 77
La chaîne de format est une chaîne de caractères contenant deux types d'objets : des caractères ordinaires et des spécifications de format. Les caractères ordinaires sont simplement recopiés un à un dans la chaîne résultat.
Chaque spécification de format s'appliquera à l'argument qui lui correspond dans la liste des arguments.
Les spécifications de format ont la forme suivante : d entier décimal signé,
i entier décimal signé, o entier octal non signé, u entier décimal non signé,
x entier hexadécimal non signé (avec a, b, c, d, e et f), X entier hexadécimal non signé (avec A, B, C, D, E et F), f nombre flottant signé de la forme [-] dddd.dddd, e nombre flottant signé de la forme [-] d.dddd e [+/-] ddd,
g nombre flottant signé de type e ou f, suivant la valeur et la précision données. Les zéros et le point décimal ne figurent que s'ils sont nécessaires,
E nombre flottant, comme e, mais l'exposant est la lettre E, G nombre flottant, comme g, mais l'exposant est la lettre E, c caractère simple,
s chaîne de caractères. Affiche les caractères jusqu'à la rencontre d'un caractère nul d'arrêt ou jusqu'à ce que la précision soit atteinte,
% le caractère de pourcentage % est affiché.
• sscanf
Cette fonction, dont la syntaxe est décrite ci-après, permet l'extraction d'informations (sous un format particulier) à partir d'une chaîne de caractères.
[a, compteur, msg] = sscanf(chaîne, format, taille) a matrice de données récupérées,
compteur nombre d'éléments lus correctement,
msg message d'erreur dans le cas où une erreur est rencontrée (chaîne vide autrement), chaîne chaîne dans laquelle la lecture est réalisée,
format instructions de formatage analogues à celles du langage C (voir sscanf), taille argument optionnel, pose une limite au nombre d'éléments lus à partir de la chaîne.
Cette fonction est semblable à fscanf ; la lecture est faite à partir d'une chaîne de caractères MATLAB au lieu d'un fichier.
>> Chaine='5 3.5 10' Chaine =
5 3.5 10
>> x = sscanf(Chaine,'%f') x =
5.0000 3.5000 10.0000
78 Chapitre 2
I.5. Des programmes utiles
Dans cette section, nous proposons au lecteur, des fonctions de traitement de chaînes de caractères qui compléteront celles fournies par MATLAB.
fonction JourDatee.m
function JDate = JourDate(Date)
% extraction des informations jour, mois et Année
% à partir d'une date
% sous forme d'une chaîne de caractères avec les formats
% 'jj-mm-aa' ou 'jj/mm/aa'
% r_date = [Jour Mois Année];
if nargin ~= 1;
error('nombre d''arguments incorrect');
end;
Delim = ['-' '/']; % délimiteurs pour une date [Jour Reste] = strtok(Date,Delim);
[Mois Reste] = strtok(Reste,Delim);
[Annee Reste] = strtok(Reste,Delim);
% conversions chaînes --> nombres Jour = str2num(Jour);
Mois = str2num(Mois);
Annee = str2num(Annee);
% Affichage du jour
[n,j]=weekday(datestr(Date));
JDate = num2str([Jour Mois Annee]);
JDate = [j ' ' JDate];
Quelques exemples d'appel de cette fonction donnent :
>> DateDuRetour=JourDate('31/08/2009') DateDuRetour =
Thu 31 8 2009
>> DateNaissance=JourDate('13/10/1977') DateNaissance =
Thu 13 10 1977
I.6. Applications
I.6.1. Cryptage et décryptage d'un message
On se propose d'écrire un programme permettant de lire un texte, et de l'afficher sous une forme codée, en mettant en œuvre un décalage du jeu de caractères.
Les chaînes de caractères, dates et heures 79
Le principe de cet exercice est de mettre en évidence l'utilisation de la fonction setstr pour passer des codes ASCII aux caractères composant une chaîne, de leur ajouter ou retrancher une valeur fixe et obtenir ainsi une chaîne codée, donc inintelligible.
fichier Crypt.m
function ChaineCodee = Crypt(Chaine, Code)
% Encryptage d'une chaîne de caractères en utilisant
% le décalage du jeu de caractères.
if nargin <2;
disp('nombre d''arguments incorrect');
help Crypt;
return end;
ChaineCodee = setstr((Chaine+Code));
ChaineCodee =
Phvvdjh#lpsruwdqw#=#wx#grlv#uhyhqlu#oh#64#Drþw
Connaissant la façon dont est crypté le message, le fichier suivant, Decrypt.m permet de revenir au message d’origine.
fonction Decrypt.m
function ChaineDeCodee = Decrypt(Chaine, ValeurCode)
% Décryptage d'une chaîne de caractères en utilisant
% le décalage du jeu de caractères.
% function ChCodee = Decrypt(Chaine, ValDec)
if nargin <2;
disp('nombre d''arguments incorrect');
help Decrypt return;
end;
ChaineDeCodee = setstr(abs(Chaine)-ValeurCode);
>> Message='Phvvdjh#lpsruwdqw#=#wx#grlv#uhyhqlu#oh#64#Drþw';
>> Code=3;
>> ChaineDeCodee=Decrypt(Message,Code) ChaineDeCodee =
Message important : tu dois revenir le 31 Août
I.6.2. Palindrome
Un palindrome est un mot, ou une phrase, lisible indifféremment de la gauche vers la droite ou inversement. On se propose d'écrire un programme qui détermine si une chaîne de caractères est un palindrome.
La solution serait d'inverser la chaîne et de la comparer avec la chaîne d'origine.
80 Chapitre 2
fichier palindrome.m
function Palind = palindrome(Chaine)
% Indique si une chaîne est un palindrome if nargin <1;
disp('nombre d''arguments incorrect');
help palindrome return;
end;
ChaineRetournee = fliplr(Chaine);
Palind = strcmp(Chaine,ChaineRetournee);
>> palindrome('atta') ans =
1
II. Gestion des dates et heures II.1. Différents formats de dates et heures MATLAB gère la date sous 3 types de format différents :
chaînes de caractères,
nombres,
vecteurs.
La commande date retourne la date du jour sous forme d’une chaîne de caractères.
• date
>> date ans = 09-Aug-2009
MATLAB gère aussi les dates sous forme de nombres.
• now
>> now ans =
7.3399e+005
La commande now retourne la date et l’heure actuelle sous la forme d’un seul nombre dont l’entier inférieur correspond à la date du jour et le reste à l’heure actuelle.
Le nombre correspond au nombre de jours passés depuis une date de base. Dans MATLAB, cette date de base est le 1er Janvier 2000.
• datestr
Transforme une date en nombre sous forme d’une chaîne de caractères.
Les chaînes de caractères, dates et heures 81
>> datestr(1) ans =
01-Jan-0000
Le nombre correspondant à la date du jour est :
>> floor(now) ans =
733994
>> rem(now,1) ans =
0.5706
Pour avoir les chaînes de caractères, nous utilisons la commande datestr.
>> datestr(floor(now)) ans =
09-Aug-2009
>> datestr(rem(now,1)) ans =
5:25 PM
Appliquée directement à la commande now, datestr donne l’heure exacte.
>> maintenant=datestr(now) maintenant =
09-Aug-2009 13:45:54
On peut spécifier le type de chaîne pour la date uniquement.
>> maintenant=datestr(now,1) maintenant =
09-Aug-2009
On peut spécifier un nombre entre 0 et 14 pour designer la forme de la date.
>> maintenant=datestr(now,2) maintenant =
08/09/09
>> maintenant=datestr(now,14) maintenant =
08:56:53 PM
• datenum
Transforme la date sous forme d’une chaîne en date sous forme de nombre.
>> datenum('31-Aug-2009') ans =
734016
82 Chapitre 2
• datevec
Cette commande permet de transformer une date en nombre sous forme d’une date en vecteur.
>> datevec(now) ans =
1.0e+003 *
2.0090 0.0080 0.0090 0.0230 0.0120 0.0401 Ce vecteur contient les informations suivantes : [Année mois jour heure minute second].
Tout comme pour le format nombre, la commande datestr peut donner le format chaîne de caractères.
• clock
La commande clock retourne la date et l’heure sous forme d’un vecteur.
>> clock ans =
1.0e+003 *
2.0090 0.0080 0.0110 0.0020 0.0220 0.0471
>> fix(clock) ans =
2009 8 11 2 22 47
>> datestr(clock) ans =
09-Aug-2009 13:46:05
II.2. Autres fonctions utiles de mesure du temps
• eomday
Retourne la date du dernier jour d’un mois d’une année. La commande suivante donne la date du dernier jour du mois d’août 2009.
>> D=eomday(2009,08) D =
31
• calendar
Cette commande affiche le calendrier du mois en cours.
>> calendar
Aug 2009
S M Tu W Th F S 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Les chaînes de caractères, dates et heures 83
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0
On peut spécifier le mois et l’année sous forme de scalaires.
>> calendar(1977, 10) Oct 1977
S M Tu W Th F S 0 0 0 0 0 0 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 0 0 0 0 0
• weekday
Cette commande retourne le jour de la semaine en donnant comme argument la date sous forme de chaîne de caractères.
>> [d,w]=weekday(datestr(now)) d =
2 w = Mon
La commande suivante montre que le 13 Octobre 1977 était la 5ème journée de la semaine, un jeudi, comme on avait pu le voir dans le calendrier du mois de cette année.
>> [d,w]=weekday('13-Oct-1977') d =
5 w = Thu
MATLAB dispose de fonctions de gestion du temps CPU, très utiles pour la gestion des programmes.
• cputime
Retourne le temps passé, en secondes, depuis le début de la session MATLAB.
>> cputime ans = 59.6563
On peut se servir de cette commande pour mesurer le temps d’exécution d’une suite d’instructions.
On considère les lignes de commande suivantes qu’on exécute dans l’éditeur.
% Temps passé depuis le début de la session
t1=cputime ; x=randn(1000); moyenne=mean(x(:)); variance=std(x(:))^2;
84 Chapitre 2
disp('Temps mis en secondes :') dt=cputime-t1
Nous affichons le temps t1 depuis le début de la session et la durée dt pour l’exécution de cette suite d’instructions.
t1 = 81.4063
Temps mis en secondes : dt =
0.2031
• etime
La commande etim(t2,t1) retourne, en secondes, la différence des temps t2 et t1 spécifiés sous le format vecteurs.
x = rand(1000000, 1); t = clock; y=exp(log(x.^2));
TempsMis = etime(clock, t) TempsMis =
0.3120
• tic Initialise le timer.
• toc
Stoppe le timer et affiche le temps mis depuis le temps passé en argument.
t1= tic ; x=randn(1000);
TempsMis=toc(t1) TempsMis = 0.0680
L’utilisation de ces commandes est plus recommandée que la commande etim pour des raisons de précision.
• datetick
Permet d’avoir des abscisses sous forme de dates (années ou mois).
t = (1954:2:1962)'; y = [9 8.8 8.2 7.8 7.5];
plot(datenum(t,1,1),y) % Conversion des années en format nombre
datetick('x','yyyy') % Remplace les ticks de l’axe x par des années % à 4 digits
Les chaînes de caractères, dates et heures 85
1954 1955 1956 1957 1958 1959 1960 1961 1962 7.5
8 8.5 9
Chronique des années de braise
Population entre le 1er Novembre 1954 et le 5 Juillet 1962
86 Chapitre 2