Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
108
Les boucles
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)
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
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