Vous êtes sur la page 1sur 26

5) Programmation sous Matlab

5.1) Structures de contrôle


 Les structures de contrôle sous Matlab sont très proches de celles
existant dans d’autres langages de programmation tels que le
langage C.
 Elles sont utiles pour écrire des programmes Matlab.

5.1.1) Structure conditionnelle


 Une structure conditionnelle permet d’exécuter une séquence
d’instructions seulement dans le cas où une condition donnée est
vérifiée.
 Différentes formes de structures conditionnelles existent sous
Matlab.
98
Structure conditionnelle
1) Forme simple
 Syntaxe:  Exemple: (calculer la racine carrée
if expression d’une variable scalaire x seulement si
instructions x n’est pas négative).
if (x >= 0)
end racine = sqrt(x);
end;

 expression est une expression logique dont le résultat peut être


vrai (true) ou faux (false).
 instructions est une suite d'instructions.
 si le résultat de l’évaluation de expression est vraie, on exécute
instructions, puis l'instruction qui suit le mot clé end.
si le résultat de l’évaluation de expression est faux on passe
directement à l'instruction qui suit le mot clé end.
99
Structure conditionnelle
2) Forme alternative
 Syntaxe:  Exemple:
if expression if (x ~= 0)
instructions_1 y = 1/x
else
else disp('Division par zero')
instructions_2 end;
end

 si le résultat de l’évaluation de expression est vraie, on exécute


instructions_1, puis l'instruction qui suit le mot clé end.
 si le résultat de l’évaluation de expression est faux, on exécute
instructions_2, puis l'instruction qui suit le mot clé end.

100
Structure conditionnelle
2) Forme imbriquée
 Il est possible d'imbriquer des instructions conditionnelles les
unes dans les autres.
 Utilisée lorsqu’il y a plus de deux alternatives.
 Snytaxe:  Exemple:
if exp_1 if (moyenne >= 16)
instructions_1 disp('T.Bien');
elseif exp_2 elseif (moyenne >= 14)
instructions_2 disp('Bien');
elseif exp_3 elseif (moyenne >= 12)
instructions_3 disp('A.Bien');
... elseif (moyenne >= 10)
else disp('Passable');
instructions_n else disp('Non admis');
end end
101
Structure conditionnelle-forme imbriquée
 exp_i est une expression logique
 instructions_i est une suite d'instructions.
 si le résultat de l’évaluation de exp_i est vraie, on exécute
instructions_i, puis l'instruction qui suit le mot clé end.
 si aucune des expressions exp_1, exp_2,…,n'est vraie, on
exécute l'instruction instructions_n (suite d'instructions par
défaut), puis l'instruction qui suit le mot clé end.
 Il n’est pas nécessaire de prévoir un cas par défaut (bien que
cela soit préférable).
 S’il n’y a pas de cas par défaut, et si aucune des expressions
exp_1, exp_2,…, n'est vraie, alors on continue à la première
instruction suivant le mot clé end.

102
5.1.2) Choix multiple – instruction switch
 Syntaxe:  Exemple: (on initialise une matrice
switch var A en fonction de la valeur d’une
case const_1, variable num)
instructions_1 switch num
case const_2, case 1,
instructions_2 A = ones(3)
... case 2,
otherwise A = magic(3);
instructions_n case {3,4},
end A = rand(n);
otherwise
disp('Erreur, numero
d''exemple non prevu');
end;
103
Choix multiple -instruction switch
 var est une variable numérique ou une variable chaîne de
caractères.
 const_i est une constante de même type que var.
 instructions_i est une suite d'instructions.
 si la variable var est égale à la constante const_i, on exécute la
suite d'instructions correspondante (c'est-à-dire instructions_i, puis
l'instruction qui suit le mot clé end.
 si var n'est égale à aucune des constantes const_1, const_2,…, on
exécute l'instruction instructions_n (suite d'instructions par défaut),
puis l'instruction qui suit le mot clé end.
 Il n’est pas nécessaire de prévoir un cas par défaut (bien que cela
soit préférable).
 S’il n’y a pas de cas par défaut, et si var n’est égale à aucune des
constantes, alors on continue à la première instruction suivant le mot
clé end.
 Si la séquence d’instructions à exécuter est la même pour plusieurs
cas, il est possible de les regrouper. La syntaxe est alors: case { cst_k ,
cst_l, ...}
104
5.1.3) Les boucles
 permettent d'exécuter une séquence d’instructions de manière
répétée.
 Le nombre d'itérations (répétitions) est soit connu d’avance
(boucle for), soit déterminé au cours de l’exécution (boucle while).

1) La boucle for
 Syntaxe: Exemple: (calcul du factoriel).
for indice = inf:sup >>n = 4;
instructions >>fact = 1;
end >>for k = 1:n
fact = fact*k;
end;
>>fact
fact =
24 105
Les boucles-La boucle for
 indice est une variable appelée l’indice de la boucle.
 inf (borne inférieure) et sup (borne supérieure) sont deux constantes
réelles.
 instructions est la suite d'instructions à répéter (On parle du corps de la
boucle).
 Si inf ≤ sup, instructions est exécutée (sup − inf + 1) fois, pour les valeurs
de la variable indice égales à inf, inf + 1,…,sup, puis en passe à l’instruction
qui suit immédiatement l’instruction de fin de boucle (end).
 Si inf > sup, on passe directement à l’instruction qui suit immédiatement
l’instruction de fin de boucle (end).
 L’indice de boucle ne prend pas nécessairement des valeurs entières.
 On peut naturellement imbriquer des boucles for les unes dans les autres.
 Il est possible d'utiliser un incrément (pas) autre que 1 (valeur par défaut).
La syntaxe est alors:
for indice = inf:pas:sup
instructions
end
– Le pas peut être négatif.

106
Les boucles

2) La boucle while
 permet de répéter une suite d'instruction tandis qu’une
expression logique est vraie.

 Syntaxe: Exemple: (calcul du factoriel).


while expression >>n = 4;
instructions >>fact = 1;
end >> k = 1;
>>while k <= n
fact = fact*k;
k = k+1;
end;
>>fact
fact =
24
107
Les boucles -La boucle while

 expression est une expression logique.


 instructions est une suite d'instructions qui se répète tant que
expression a la valeur vrai (true).
 Lorsque la valeur de expression devient faux (false), on passe
à l’instruction qui suit immédiatement l’instruction de fin de
boucle (end).
 expression est en général le résultat d’un test (par exemple i
< 10) ou le résultat d’une fonction logique (par exemple
~empty(x)). Il est impératif que le traitement de la séquence
d’instructions agisse sur le résultat de expression logique sans
quoi on boucle indéfiniment.

108
Les boucles

3) Interruption d’une boucle


 L’instruction break permet de sortir d’une boucle for ou
d’une boucle while.
 L’exécution se poursuit alors séquentiellement à partir de
l’instruction suivant le mot clé end fermant la boucle.
 En cas de boucles imbriquées, on interrompt seulement
l’exécution de la boucle intérieure contenant l’instruction
break.

109
5.2) Fonctions
 En plus des fonctions prédéfinies, Matlab permet à l’utilisateur
de définir ses propres fonctions.
 Trois méthodes sont possibles :
1) les m-fonctions qui sont associées à des m-files,
2) les fonctions anonymes
3) les fonctions Inline.
 Les deux derniers types de fonctions peuvent être définis
directement dans l’espace de travail où ces fonctions vont être
utilisées.

110
5.2.1) Les m-fonctions
 Ces fonctions sont associées à un m-file auxiliaire, ce qui apporte
deux avantages :
1) la fonction possède son propre espace de travail
2) il n’y a pas de limite à la complexité de la séquence de
commandes qui définit la fonction.
 Afin d'utiliser une fonction appelée MyFunction, on saisie son
code puis on l'enregistre sous le nom MyFunction.m.
 Il ne faut pas oublier de mettre le fichier MyFunction.m dans le
répertoire courant.

111
Les m-fonctions
Exemple 1 : La fonction produit permettant de calculer le
produit de deux valeurs réelles.
function res = produit(x, y)
%produit de deux valeurs scalaires, un argument
%autre qu’un scalaire conduit a une erreur
[a1, b1] = size(x);
[a2, b2] = size(y);
if ( (a1==1) & (b1==1) & (a2==1) & (b2==1) )
res = x*y;
else
disp('erreur, les arguments doivent être
des scalaires')
end
return

112
Les m-fonctions
 Cette fonction est appelée depuis la fenêtre de commande
comme suit :
>>a = 3; b = 5; C = [1 2; 3 4];
>> produit(a,b)
ans =
15
>> produit(a,b)
erreur, les arguments doivent être des
scalaires
 Matlab utilise la section de commentaires des lignes 2 et 3 en
conjonction avec la commande help pour fournir des
informations sur la fonction:
>> help moyenne
produit de deux valeurs scalaires, un argument
autre qu’un scalaire conduit a une erreur

113
Les m-fonctions
Exemple 2 : La fonction moyenne permettant de calculer
la moyenne des éléments d’un vecteur.
function m = moyenne(x)
%moyenne des éléments d’un vecteur, un argument
%autre qu’un vecteur conduit a une erreur
[a,b] = size(x) ;
if ( (a~=1) & (b~=1) )
error('l''argument doit être un vecteur')
end
m = sum(x)/length(x);
return

114
Les m-fonctions
 La fonction moyenne est appelée depuis la fenêtre de commande
comme suit :
>> a = 3; A = [1 2 3]; B = A'; C = [1 2; 3 4];
>> moyenne(A)
ans =
2
>> moyenne(B)
ans =
2
>> moyenne(C)
??? Error using ==> moyenne at 6
l'argument doit être un vecteur
>> moyenne(a)
ans =
3
 Le traitement de l’erreur sur la nature de l’argument a été réalisé
aux lignes 5 à 7 et par la commande error. 115
Les m-fonctions
Syntaxe de fonction
 Une fonction est constituée par :
1) un en-tête qui a la forme suivante :
 function résult = nom_de_fonction (liste de paramètres
séparés par des virgules), si la fonction renvoie une
seule valeur.
 function [résult1, result2, ...] = nom_de_fonction (liste
de paramètres séparés par des virgules), si la fonction
renvoie plusieurs valeurs. (Exemple, fct Stat diapo 119)

2) une section de commentaires (9 lignes au plus, débutant par


le symbole %) utilisée par les commande help ou lookfor.
3) le corps de la fonction défini par un script.
4) le mot return qui n’est pas obligatoire, mais il est conseillé.

116
Les m-fonctions
Règles et propriétés
1) Le nom de la fonction nom_de_fonction est un identificateur
construit conformément aux règles définies précédemment.
2) Le nom de la fonction et celui du fichier m-file qui contient sa
définition doivent être identiques.
3) Chaque fonction possède son propre espace de travail et toute
variable apparaissant dans le corps d’une fonction est locale à
celle-ci, à moins qu’elle ait été déclarée comme globale au
moyen du qualificateur global précédant le nom de la variable
dans tous les espaces de travail où cette variable est utilisée.
4) L’exécution d’une fonction s’achève :
 lorsque la fin du script définissant la fonction a été atteinte.
 lorsque une commande return ou un appel de la fonction
error a été rencontré.

117
Les m-fonctions-Règles et propriétés

 return termine immédiatement l’exécution de la fonction


sans que la fin du script définissant celle-ci ait été atteinte.
 error('message' ) procède de même, mais en plus, affiche le
contenu de message.
 Le contrôle est alors renvoyé au point d’appel de la
fonction, fenêtre de commande ou autre fonction.
5) Le fichier m-file associé à une fonction peut contenir d’autres
définitions de fonctions.
 La fonction qui partage son nom avec le fichier ou fonction
principale doit apparaître en premier.
 Les autres fonctions ou fonctions internes peuvent être
appelées par la fonction principale, mais pas par d’autres
fonctions ou depuis la fenêtre de commande.

118
Les m-fonctions-Règles et propriétés
Exemple 3: L’ensemble des trois fonctions est enregistré
dans un seul fichier m-file portant le nom de la fonction
principale Stat.m).
function [m, v] = Stat(x)
%Stat : moyenne et variance des elements d'un
%vecteur, un argument autre qu'un vecteur
%conduit a une erreur
[a,b] = size(x) ;
if ( (a~=1) & (b~=1) )
error('l''argument doit être un vecteur')
end
m = moyenne(x);
v = variance(x);
return
function a = moyenne(u)
%Calcul de la moyenne
a = sum(u)/length(u); 119
Les m-fonctions-Règles et propriétés- Exemple 3
function b = variance(u)
% Calcul de la variance
c = sum(u)/length(u);
u2 = (u - c).^2;
b = sum(u2)/length(u);
Ces fonctions sont appelées comme suit:
>> A = [2 4 8 3 6];
>> [moy, var] = Stat(A)
moy =
4.6000
var =
4.6400
>> moyenne(A)
??? Undefined function or method 'moyenne' for input
arguments of type 'double'.
>> variance(A)
??? Undefined function or method 'variance' for
input arguments of type 'double'.
120
5.2.2) Les fonctions Inline
 Lorsque le corps de la fonction se résume à une expression
relativement simple, on peut créer la fonction directement dans
l’espace de travail courant, sans utiliser un m-file auxiliaire.
 Syntaxe: La syntaxe des fonctions Inline est simple:
nom_de_fonction = inline (’expression ’, ’var1’, ’var2’, ...)
 L’expression mathématique qui constitue le corps de la
fonction ainsi que les variables sont considérées par Matlab
comme des chaines de caractères et doivent donc être tapées
entre apostrophes.
 La déclaration des variables peut être optionnelle dans la
définition des fonctions Inline,
 Matlab effectuant une déclaration implicite de celles-ci.
 Cette facilité, source d’ambiguïtés dans le cas de fonctions
de plusieurs variables (n’est pas à recommander dans ce cas).
121
Les fonctions Inline
Exemple 1:
>> f = inline('x.^2 + x.*y', 'x', 'y')
f =
Inline function :
f(x, y) = x.^2 + x.*y
>> f(1, 2)
ans =
3
>> f([1 2], [3 4])
ans =
4 12
Exemple 2: (mécanisme de déclaration implicite).
>> f = inline('x.^2')
f =
Inline function :
f(x) = x.^2
est équivalente à :
>> f = inline('x.^2', 'x')
122
5.2.3) Les fonctions anonymes
 Ce mode de définition de fonctions utilise comme pour les
fonctions Inline l’espace de travail courant.
 Syntaxe: nom_de_ fonction = @ (var1, var2, ...) expression
 Contrairement aux fonctions Inline l’expression
mathématique qui constitue le corps de la fonction ainsi que les
variables ne doivent pas être tapées entre apostrophes.
Exemple:
>> g = @(x, y) x.^2 + x.*y
g =
@(x, y) x.^2 + x.*y
>> g(1, 2)
ans =
3
>> g([1 2], [3 4])
ans =
4 12
123

Vous aimerez peut-être aussi