Sous-sections

6.3 Structures de contrôle

6.3.1 boucles

for var=exp, inst., end
boucle sur les colonnes de exp
for var=1:n, inst, end
boucle classique de 1 à n
Un premier exemple

X=rand(1,5);

S=0; for K=X, S=S+K^2, end;
qui peut s'écrire plus classiquement

X=rand(1,5);

S=0; for i=1:length(X), S=S+X(i)^2, end;
En général, on peut éviter les boucles explicites

Exemple
calcul d'un résidu partiel des lignes 2 à 4 d'un système 5*5

\begin{lstlisting}
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
\end{lstlisting}

que l'on peut écrire plus efficacement

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

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

6.3.2 Test si

if cond , inst1 ,else inst2, end
test classique (possibilité de elseif)
if x<0, y=x, else, y=-x, end
valeur logique:
0=faux, 1=vrai
opérateurs logiques:
& (et), | (ou), ~ (négation)
opérateurs relationnels:
<, <= ,> ,>= ,== ,~=
fonctions logiques:
any(Y==1), all(X==0)

6.3.3 Choix multiple

switch var, case val1, exp1; case val2, exp2; ...;otherwise, exp; end
 

\begin{lstlisting}
switch num
case -1
disp('moins un');
case 1
disp('plus un');
case 0
disp('zero');
otherwise
disp('autres valeurs');
end
\end{lstlisting}

6.3.4 Boucle tant que

while cond, inst., end
exécute les instructions tant que la cdt est vrai

\begin{lstlisting}
n=1
while prod(1:n)<1.0e100
n=n+1
end
\end{lstlisting}

continue
passage à l'itération suivante
break
arrêt de la boucle interne

6.3.5 Structures

Equivalence avec la notion de structure en C

geo.nn
nbre de noeud NN
geo.ne
nbre d'elts NE
geo.XY
coordonnées X et Y des noeuds = tableau (2,NN)
geo.TBC
table de connection des elts = tableau (3*NE)


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