Académique Documents
Professionnel Documents
Culture Documents
107
108 Chapitre 6 Programmation dans MATLAB
Introduction
108
109 Chapitre 6 Programmation dans MATLAB
Opérateurs relationnels :
Les opérateurs relationnels dans MATLAB sont :
<
>
A
Opérateurs relationnels Description
Inférieur à
Supérieur à
LM
<= Inférieur ou égal à
>= Supérieur ou égal à
== Égal à
~= Pas égal à
Notez que l'opérateur relationnel « égal à » se compose de deux signes = (sans espace entre eux
= =), car un signe = est l'opérateur d'affectation. Dans d'autres opérateurs relationnels composés
de deux caractères, il n'y a pas non plus d'espace entre les caractères (<=,>=, ~=).
- Les opérateurs relationnels sont utilisés comme opérateurs arithmétiques dans une
expression mathématique. Le résultat peut être utilisé dans d'autres opérations
mathématiques, dans l'adressage de tableaux, et avec d'autres commandes MATLAB (par
exemple, if) pour contrôler le flux d'un programme.
- Lorsque deux nombres sont comparés, le résultat est 1 (logique vrai) si la comparaison,
selon l'opérateur relationnel, est vrai, et 0 (logique faux) si la comparaison est fausse.
- Si deux scalaires sont comparés, le résultat est un scalaire 1 ou 0. Si deux tableaux sont
comparés (seuls les tableaux de même taille peuvent être comparés), la comparaison est
effectuée élément par élément et le résultat est un tableau logique de même taille avec 1 et
0 selon le résultat de la comparaison à chaque adresse.
109
110 Chapitre 6 Programmation dans MATLAB
- Si un scalaire est comparé à un tableau, le scalaire est comparé à chaque élément du tableau
et le résultat est un tableau logique avec 1 et 0 selon le résultat de la comparaison de chaque
élément.
Quelques exemples sont :
>> d=c>=b
d =
A
>> b=[15 6 9 4 11 7 14];c=[8 20 9 2 19 7 10]; Définir les vecteurs b et c
>> f=b-c>0 Soustrait c de b, puis vérifie quels éléments sont supérieurs à zéro
f =
1×7 logical array
1 0 0 1 0 0 1
110
111 Chapitre 6 Programmation dans MATLAB
Les résultats d'une opération relationnelle avec des vecteurs, qui sont des vecteurs avec 0 et 1,
sont appelés vecteurs logiques et peuvent être utilisés pour adresser des vecteurs. Lorsqu'un
vecteur logique est utilisé pour adresser un autre vecteur, il extrait de ce vecteur les éléments
aux positions où le vecteur logique a des 1. Par exemple :
>> t=r(s) Utilisez s pour les adresses du vecteur r pour créer le vecteur t
t =
8 9 4 10
>> w=r(r<=10) La même procédure peut être effectuée en une seule étape
w = A
8 9 4 10
- Les vecteurs et tableaux numériques avec les nombres 0 et 1 ne sont pas les mêmes que les
vecteurs et tableaux logiques avec 0 et 1. Les vecteurs et tableaux numériques ne peuvent
LM
pas être utilisés pour l'adressage. Les vecteurs et les tableaux logiques, cependant, peuvent
être utilisés dans les opérations arithmétiques. La première fois qu'un vecteur logique ou un
tableau est utilisé dans des opérations arithmétiques, il est changé en un vecteur ou un
tableau numérique.
- Ordre de priorité : dans une expression mathématique qui inclut des opérations
relationnelles et arithmétiques, les opérations arithmétiques (+, -, *, /, \) ont la priorité sur
les opérations relationnelles. Les opérateurs relationnels eux-mêmes ont une priorité égale
et sont évalués de gauche à droite. Les parenthèses peuvent être utilisées pour modifier
l'ordre de priorité. Voici des exemples :
>> 3+(4<16)/2 4 <16 est exécuté en premier et est égal à 1, car il est vrai
ans =
3.5000 3,5 est obtenu à partir de 3 + 1/2
111
112 Chapitre 6 Programmation dans MATLAB
Opérateurs logiques :
- Les opérateurs logiques ont des nombres comme opérandes. Un nombre différent de zéro
est vrai et un nombre nul est faux.
- Les opérateurs logiques (comme les opérateurs relationnels) sont utilisés comme opérateurs
arithmétiques dans une expression mathématique. Le résultat peut être utilisé dans d'autres
-
A
opérations mathématiques, dans l'adressage de tableaux et avec d'autres commandes
MATLAB (par exemple, if) pour contrôler le flux d'un programme.
Les opérateurs logiques (comme les opérateurs relationnels) peuvent être utilisés avec des
LM
scalaires et des tableaux.
- Les opérations logiques AND et OR peuvent avoir les deux opérandes en tant que scalaires,
les deux en tant que tableaux ou l'un en tant que tableau et l'autre en tant que scalaire. Si les
deux sont des scalaires, le résultat est un scalaire 0 ou 1. Si les deux sont des tableaux, ils
doivent être de la même taille et l'opération logique est effectuée élément par élément. Le
résultat est un tableau de la même taille avec 1 et 0 selon le résultat de l'opération à chaque
position. Si un opérande est un scalaire et que l'autre est un tableau, l'opération logique est
effectuée entre le scalaire et chacun des éléments du tableau et le résultat est un tableau de
la même taille avec 1 et 0.
- L'opération logique NOT a un seul opérande. Lorsqu'il est utilisé avec un scalaire, le résultat
est un scalaire 0 ou 1. Lorsqu'il est utilisé avec un tableau, le résultat est un tableau de la
même taille avec 0 dans des positions où le tableau a des nombres non nuls et des uns (1)
dans des positions où le tableau a des zéros (0).
112
113 Chapitre 6 Programmation dans MATLAB
logical
1 3 et 7 sont tous deux vrais (différents de zéro), le résultat est donc 1
Ordre de priorité :
Les opérateurs arithmétiques, relationnels et logiques peuvent être combinés dans des
expressions mathématiques. Lorsqu'une expression a une telle combinaison, le résultat dépend
de l'ordre dans lequel les opérations sont effectuées. Le Tableau 6.1 montre l'ordre de priorité
utilisé par MATLAB :
Priorité Opération
Parenthèses (s'il existe des parenthèses imbriquées, les parenthèses
1 (le plus élevé)
internes ont priorité)
2 Exponentiation
3 NOT : NON logique (~)
4 Multiplication, division
5 Addition, soustraction
6 Opérateurs relationnels (>, <,> =, <=, = =, ~ =)
113
114 Chapitre 6 Programmation dans MATLAB
- Si deux opérations ou plus ont la même priorité, l'expression est exécutée dans l'ordre de
gauche à droite.
- Il convient de noter ici que l'ordre indiqué ci-dessus est celui utilisé depuis MATLAB 6.
Les versions précédentes de MATLAB utilisaient un ordre légèrement différent (& n'avait
pas priorité sur |), donc l'utilisateur doit être prudent. Les problèmes de compatibilité entre
différentes versions de MATLAB peuvent être évités en utilisant des parenthèses même
lorsqu'elles ne sont pas nécessaires.
Voici des exemples d'expressions qui incluent des opérateurs arithmétiques, relationnels et
logiques :
>> -5<x<-1
ans =
A Définir les variables x et y
>> ~(y<7) y <7 est exécuté en premier, il est vrai (1) et ~ 1 est 0
ans =
logical
0
>> ~y<7 ~ y est exécuté en premier, y est vrai (1) (puisque y est
ans = différent de zéro), ~ 1 est 0 et 0 <7 est vrai (1)
logical
1
y> = 8 (faux) et x <–1 (vrai) sont exécutés en premier.
>> ~((y>=8)|(x<-1)) OR est exécuté ensuite (vrai). ~ est exécuté en dernier
ans = et donne faux (0)
logical
0
114
115 Chapitre 6 Programmation dans MATLAB
MATLAB a des fonctions intégrées équivalentes aux opérateurs logiques. Ces fonctions sont:
De plus, MATLAB possède d'autres fonctions logiques intégrées, dont certaines sont décrites
dans le Tableau 6.2 :
Les opérations des quatre opérateurs logiques and, or, xor et not peuvent être résumées dans
une table de vérité (Tableau 6.3) :
115
116 Chapitre 6 Programmation dans MATLAB
ENTRÉE SORTIE
AND OR XOR NOT NOT
A B A&B A|B (A,B) ~A ~B
faux faux faux faux faux vrai vrai
faux vrai faux vrai vrai vrai faux
vrai faux faux vrai vrai faux vrai
vrai vrai vrai vrai faux faux faux
Une instruction conditionnelle est une commande qui permet à MATLAB de décider d'exécuter
un groupe de commandes qui suit l'instruction conditionnelle ou d'ignorer ces commandes.
Dans une instruction conditionnelle, une expression conditionnelle est indiquée. Si l'expression
est vraie, un groupe de commandes qui suivent l'instruction sont exécutées. Si l'expression est
fausse, l'ordinateur ignore le groupe. La forme de base d'une instruction conditionnelle est la
suivante :
>>
A
if expression conditionnelle composée d'opérateurs
relationnels and/or logiques
LM
Exemples :
if a < b
if c >= 5 Toutes les variables doivent avoir des valeurs
if a == b
assignées
if a ~= 0
if (d<h)&(x>7)
if (x~=13)|(y<0)
- Les instructions conditionnelles peuvent faire partie d'un programme écrit dans un
fichier script ou une fonction définie par l'utilisateur.
- Comme indiqué ci-dessous, pour chaque instruction if, il existe une instruction end.
L'instruction if est couramment utilisée dans trois structures, if-end, if-else-end et if-elseif-else-
end, qui sont décrites ci-après
6.2.1 La structure if-end
L'instruction conditionnelle if-end est représentée schématiquement dans la Figure 6.1. La
figure montre comment les commandes sont tapées dans le programme et un organigramme qui
montre symboliquement le flux ou la séquence dans laquelle les commandes sont exécutées.
Lorsque le programme s'exécute, il atteint l'instruction if. Si l'expression conditionnelle dans
116
117 Chapitre 6 Programmation dans MATLAB
l'instruction if est vraie (1), le programme continue d'exécuter les commandes qui suivent
l'instruction if jusqu'à l'instruction de fin end.
Organigramme ........
........ % Programme Matlab
........
if expression conditionnelle
........
Faux
If ........ % Groupes d’instructions
instruction
........
end
Vrai
........
end
A
Figure 6.1 - La structure de l'instruction conditionnelle if-end
Si l'expression conditionnelle est fausse (0), le programme ignore le groupe de commandes
entre if et end et continue avec les commandes qui suivent end.
LM
Les mots if et end apparaissent à l'écran en bleu, et les commandes entre l'instruction if et
l'instruction end sont automatiquement mises en retrait, ce qui facilite la lecture du programme.
Un exemple d'utilisation de l'instruction if-end dans un fichier script est présenté dans l'exemple
suivant :
Exemple : Calcul du salaire du travailleur
Un travailleur est payé selon son volume horaire hebdomadaire de 40 heures, et 50% de plus
pour les heures supplémentaires. Écrivez un programme dans un fichier script qui calcule le
salaire hebdomadaire du travailleur. Le programme demande à l'utilisateur de saisir le nombre
d'heures par semaine et le salaire par heure. Le programme affiche ensuite le salaire
hebdomadaire.
Solution :
Le programme est illustré ci-dessous. Le programme calcule d'abord le salaire en multipliant le
nombre d'heures par le salaire horaire. Ensuite, une instruction if vérifie si le nombre d'heures
est supérieur à 40. Si c'est le cas, la ligne suivante est exécutée et la rémunération
supplémentaire pour les heures supérieures à 40 est ajoutée. Sinon, le programme saute à la fin.
117
118 Chapitre 6 Programmation dans MATLAB
L'application du programme (dans la fenêtre de commande) pour deux cas est illustrée ci-
dessous (le fichier a été enregistré sous le nom de Salaire) :
>> Salaire
Veuillez saisir le nombre d'heures travaillées 40
Veuillez entrer le salaire horaire en DA 200
Le salaire du travailleur est 8000.00 DA
>> Salaire
Veuillez saisir le nombre d'heures travaillées 60
Veuillez entrer le salaire horaire en DA 200
A
Le salaire du travailleur est 14000.00 DA
Organigramme ........
........ % Programme Matlab
........
if expression conditionnelle
.......
faux
If ....... % Groupe 1 d’instructions
instruction
.......
else
Vrai
.......
Commandes Commandes ....... % Groupe 2 d’instructions
Groupe 2 Groupe 1
.......
end
end ........
........ % Programme Matlab
........
118
119 Chapitre 6 Programmation dans MATLAB
La figure montre comment les commandes sont tapées dans le programme et comprend un
organigramme qui illustre le flux ou la séquence, dans laquelle les commandes sont exécutées.
La première ligne est une instruction if avec une expression conditionnelle. Si l'expression
conditionnelle est vraie, le programme exécute le groupe 1 de commandes entre les instructions
if et else, puis passe à la fin. Si l'expression conditionnelle est fausse, le programme passe à
l'autre (else), puis exécute le groupe 2 de commandes entre else et end.
Il convient de noter ici que plusieurs instructions elseif et groupes de commandes associés
peuvent être ajoutés. De cette façon, plus de conditions peuvent être incluses. En outre,
l'instruction else est facultative. Cela signifie que dans le cas de plusieurs instructions elseif et
aucune instruction else, si l'une des instructions conditionnelles est vraie, les commandes
associées sont exécutées; sinon rien n'est exécuté.
L'exemple suivant utilise la structure if-elseif-else-end dans un programme.
L'instruction switch-case est une autre méthode qui peut être utilisée pour diriger le flux d'un
programme. Il fournit un moyen de choisir un groupe de commandes à exécuter parmi plusieurs
groupes possibles. La structure de l'instruction est illustrée à la Figure 6.5. La première ligne
est la commande switch, qui a la forme :
120
121 Chapitre 6 Programmation dans MATLAB
A
Figure 6.5 - La structure d'une instruction switch-case
L'expression switch peut être un scalaire ou une chaîne. Il s'agit généralement d'une variable à
laquelle un scalaire ou une chaîne est affecté. Cependant, il peut également s'agir d'une
LM
expression mathématique qui inclut des variables pré-assignées et peut être évaluées.
- Après la commande switch se trouvent une ou plusieurs commandes case. Chacun a une
valeur (peut être un scalaire ou une chaîne) à côté (valeur1, valeur2, etc.) et un groupe de
commandes associé en dessous.
- Après la dernière commande case, il y a une commande otherwise (sinon) facultative suivie
d'un groupe de commandes.
La dernière ligne doit être l’instruction de fin end.
121
122 Chapitre 6 Programmation dans MATLAB
- Si aucune correspondance n'est trouvée et que l'instruction otherwise n'est pas présente,
aucun des groupes de commandes n'est exécuté.
- L'instruction case ne peut pas inclure d'opérateurs relationnels tels que > ou < pour la
comparaison avec switch-case. Pour tester l'inégalité, utilisez les instructions if-elseif-else-
end.
Exemple :
6.4 Boucles
Une boucle est une autre méthode pour modifier le flux d'un programme informatique. Dans
une boucle, l'exécution d'une commande, ou d'un groupe de commandes, est répétée plusieurs
fois de suite. Chaque ronde d'exécution est appelée passe. Dans chaque passage, au moins une
variable, mais généralement plus d'une, voire toutes les variables définies dans la boucle, se
voient attribuer de nouvelles valeurs. MATLAB a deux types de boucles. Dans les boucles for-
end (Section 6.4.1), le nombre de passes est spécifié au démarrage de la boucle. Dans les
boucles while-end (Section 6.4.2), le nombre de passes n'est pas connu à l'avance et le processus
de bouclage se poursuit jusqu'à ce qu'une condition spécifiée soit satisfaite. Les deux types de
boucles peuvent être interrompus à tout moment avec la commande break (Section 6.6.1).
122
123 Chapitre 6 Programmation dans MATLAB
Dans les boucles for-end, l'exécution d'une commande, ou d'un groupe de commandes, est
répétée un nombre prédéterminé de fois. La forme d'une boucle est illustrée à la Figure 6.6.
123
124 Chapitre 6 Programmation dans MATLAB
- Dans la commande for, k peut également se voir attribuer une valeur spécifique (saisie
comme vecteur). Exemple : pour k = [7 9 –1 3 3 5].
- La valeur de k ne doit pas être redéfinie dans la boucle.
- Chaque commande for dans un programme doit avoir une commande end.
- La valeur de la variable d'index de boucle (k) ne s'affiche pas automatiquement. Il est
possible d'afficher la valeur dans chaque passe (ce qui est parfois utile pour le débogage) en
tapant k comme l'une des commandes de la boucle.
- Lorsque la boucle se termine, la variable d'index de boucle (k) a la dernière valeur qui lui a
été affectée.
for k=1:3:10
x = k^2
end A
Lorsque ce programme est exécuté, la boucle est exécutée quatre fois. La valeur de k dans les
quatre passes est k = 1, 4, 7 et 10, ce qui signifie que les valeurs affectées à x dans les passes
LM
sont x = 1, 16, 49 et 100, respectivement. Puisqu'un point-virgule n'est pas tapé à la fin de la
deuxième ligne, la valeur de x est affichée dans la fenêtre de commande à chaque passage.
Lorsque le fichier script est exécuté, l'affichage dans la fenêtre de commande est :
x=
1
x=
16
x=
49
x=
100
- Note sur les boucles for-end et les opérations élément par élément :
Dans certaines situations, le même résultat final peut être obtenu en utilisant des boucles for-
end ou en utilisant des opérations élément par élément. Les opérations élément par élément avec
les tableaux sont l'une des fonctionnalités supérieures de MATLAB qui fournissent les moyens
de calculer dans des circonstances qui nécessitent autrement des boucles. En général, les
opérations élément par élément sont plus rapides que les boucles et sont recommandées lorsque
l'une ou l'autre méthode peut être utilisée.
124
125 Chapitre 6 Programmation dans MATLAB
Les boucles while-end sont utilisées dans les situations où une boucle est nécessaire mais le
nombre de passes n'est pas connu à l'avance. Dans les boucles while-end, le nombre de passes
n'est pas spécifié lorsque le processus de bouclage démarre. Au lieu de cela, le processus de
bouclage continue tant qu'une condition indiquée est satisfaite. La structure d'une boucle while-
end est illustrée à la Figure 6.7
125
126 Chapitre 6 Programmation dans MATLAB
x =
1 Valeur initiale de x
x =
2
x = Dans chaque passe x double
4
x =
8 Lorsque x = 16, l'expression conditionnelle dans la
x =
16 commande while devient fausse et le bouclage
s'arrête
Note importante :
A
Lors de l'écriture d'une boucle while-end, le programmeur doit être sûr que la variable (ou
les variables) qui se trouvent dans l'expression conditionnelle et auxquelles de nouvelles valeurs
LM
sont affectées pendant le processus de bouclage se verront éventuellement attribuer des valeurs
qui rendent l'expression conditionnelle dans la commande while fausse. Sinon, le bouclage se
poursuivra indéfiniment (boucle indéfinie). Dans l'exemple ci-dessus, si l'expression
conditionnelle est modifiée en x> = 0.5, le bouclage se poursuivra indéfiniment. Une telle
situation peut être évitée en comptant les passes et en arrêtant la boucle si le nombre de passes
dépasse une valeur importante. Cela peut être fait en ajoutant le nombre maximum de passes à
l'expression conditionnelle, ou en utilisant la commande break (Section 6.6).
Une situation de boucle indéfinie peut se produire malgré une programmation minutieuse.
Si cela se produit, l'utilisateur peut arrêter l'exécution d'une boucle indéfinie en appuyant sur
les touches Ctrl + C ou Ctrl + Break (Ctrl+ Pause/Attn : touche de pause ou touche d'attente,
notée en anglais Break).
Les boucles et les instructions conditionnelles peuvent être imbriquées dans d'autres boucles ou
instructions conditionnelles. Cela signifie qu'une boucle et / ou une instruction conditionnelle
peut commencer (et se terminer) dans une autre boucle ou instruction conditionnelle. Il n'y a
pas de limite au nombre de boucles et d'instructions conditionnelles qui peuvent être
126
127 Chapitre 6 Programmation dans MATLAB
imbriquées. Il faut cependant se rappeler que chaque instruction if, switch-case, for et while
doit avoir une instruction end correspondante. La Figure 6.8 montre la structure d'une boucle
for-end imbriquée dans une autre boucle for-end. Dans les boucles illustrées sur cette figure, si,
par exemple, n = 3 et m = 4, alors d'abord k = 1 et la boucle imbriquée s'exécute quatre fois avec
h = 1, 2, 3, 4. Ensuite k = 2 et le la boucle imbriquée s'exécute à nouveau quatre fois avec h =
1, 2, 3, 4. Enfin k = 3 et la boucle imbriquée s'exécute à nouveau quatre fois.
Exemple :
A
L’exécution du programme suivant, donne une matrice v (3x5).
LM
for k=1:3
for m=1:5
a=k*1.2 ; w=m*0.5;
v(k,m)=a*sin(w);
end
end
127
128 Chapitre 6 Programmation dans MATLAB
si le nombre de boucles dépasse une valeur prédéterminée, ou si une erreur dans une
procédure numérique est inférieure à une valeur prédéterminée. Lorsqu'elle est tapée en
dehors d'une boucle, la commande break fournit un moyen de mettre fin à l'exécution d'un
fichier, par exemple lorsque les données transférées dans un fichier fonction (function) ne
correspondent pas à ce qui est attendu.
Le programme suivant permet d’additionnez une séquence de nombres aléatoires jusqu'à ce
que la somme s soit supérieur à une limite supérieure. Ensuite, la boucle est interrompue à
l'aide d'une instruction break.
limit = 2;
s = 0; count = 0;
while 1
tmp = rand;
s = s + tmp ;
count = count + 1 ; % nombre d'itérations
if s > limit
break
end
end
Notes :
-
-
A
L'instruction break quitte complètement une boucle for ou while.
Pour ignorer le reste des instructions dans une boucle for ou while et commencer la
LM
prochaine itération, utilisez l’instruction continue.
128
129 Chapitre 6 Programmation dans MATLAB
Divisible par 3: 3
Divisible par 3: 6
Divisible par 3: 9
Divisible par 3: 12
Divisible par 3: 15
Divisible par 3: 18
Notes
- L'instruction continue ignore le reste des instructions dans une boucle for ou while et
commence l'itération suivante. Pour quitter complètement la boucle, utilisez break.
- L'instruction continue n'est pas défini en dehors d'une boucle for ou while. Pour quitter une
fonction, utilisez return.
A
LM
129