Sous-sections

4.7 Structures de contrôle

4.7.1 Itération ou boucle pour

La boucle classique (répétition d'un nombre fixé d'itérations) s'écrit sous Matlab:

syntaxe:
for i=1:n, inst., end;
qui répète n fois la série d'instructions inst. avec un compteur i variant de 1 à n. Les instructions sont séparées soit par une virgule \fbox{\bf{,}} soit par une fin de ligne \fbox{\P}.

>>X=rand(1,5);

>>S=0; for i=1:length(X), S=S+X(i)^2, end;    calcul de $\sum_{i=1}^{n}X_{i}^{2}$

La notion classique de boucle (répétition d'un nombre fixé d'itérations) a été généralisé sous Matlab pour l'appliquer à des compteurs à base de vecteurs ou matrices, avec la syntaxe suivante:

syntaxe:
for var=exp., inst., end;
cette boucle effectue les itérations sur les colonnes de l'expression exp. en affectant à la variable var successivement la valeur de ces colonnes. L'exemple précédent peut s'écrire:

>>S=0; for K=X, S=S+K^2, end;

Dans beaucoup de cas, on peut éviter l'écriture de ces boucles explicites en utilisant des boucles implicites sur les indices. L'exemple précédent s'écrit alors:

>>S=X(1:5)*X(1:5)';

ou encore plus simplement:

>>S=X*X';

un exemple plus complexe
on veut calculer le résidu partiel des lignes 2 à 4 d'un système linéaire: i.e $R_{i}=\sum_{j=1}^{5}A_{ij}X_{j}-B_{i}$ pour $i=2,3,4$
une programmation classique conduit au programme Matlab suivant:


programme matlab 3.7.1: calcul de résidu partiel

A=rand(5,5); X=rand(5,1); B=rand(5,1); R=zeros(5,1);
for i=2:4
  R(i)=B(i)
  for j=1:5
    R(i)=R(i)-A(i,j)*X(j)
  end
end

que l'on peut écrire avec un style matriciel:

>> for i=2:4, R(i)=B(i)-A(i,1:5)*X(1:5), end;

ou encore sans aucune boucle:

>>R(2:4)=B(2:4)-A(2:4,1:5)*X(1:5);

4.7.2 Test conditionnel

la syntaxe est la suivante:

syntaxe:
if cond, inst1, else inst2, end
cette instruction exécute l'instruction inst1 si la condition cond est vraie, i.e. différente de zéro, ou l'instruction inst2 sinon. Sous Matlab la valeur logique VRAI correspond à une valeur de l'expression cond différente de zéro, et la valeur logique FAUX à une valeur nulle.

Les opérateurs logiques sont notés \fbox{$\&$} pour le “et logique”, \fbox{$\vert$} pour le “ou logique” et \fbox{\textasciitilde} pour la “négation”.

Les opérateurs relationnels utilisent les notations classiques: \fbox{$<$},\fbox{$<=$},\fbox{$>$},\fbox{$>=$} , les opérateurs d'égalité et de différence sont notées \fbox{==} et \fbox{\textasciitilde=} .

Il existe des fonctions logiques pour des tests sur les composantes de matrices:

any(X)
test si au moins une des composantes de X est nulle
>>any(Y==1)        test si au moins une des composantes de Y est égale à 1

all(X)
test si toutes les composantes de X sont nulles

4.7.3 Choix multiple

Cette instruction sert à comparer la valeur d'une variable par rapport à plusieurs valeurs.

syntaxe:
switch var, case val1, exp1; case val2, exp2; ....; otherwise, exp.; end
Attention les différents cas sont terminés par un \fbox{;}.

>> switch num, case 1, A^2; case 2,A.^2; case -1, inv(A); otherwise, disp('Erreur'); end

cette instruction calcule différentes expressions suivant la valeur de la variable num.

4.7.4 Boucle conditionnelle (tant que)

Cette boucle permet l'exécution d'une instruction tant qu'une condition est réalisée (i.e. à une valeur non nulle)

syntaxe:
while cond., inst., end
L'instruction suivante calcule le plus grand entier $n$ tel que $n!<10^{100}$

>>n=1; while prod(1:n)<1.0e100, n=n+1, end;

On peut aussi utiliser les mots clés suivants


Pr. Marc BUFFAT
marc.buffat@univ-lyon1.fr
2007-02-08