Boucles for

Une boucle est une structure qui permet d'exécuter un certain nombre de fois un même bloc d'instructions.

Dans le cas d'une boucle for, l'ensemble des valeurs pour lesquelles le bloc est effectué est un ensemble fini, déclaré en début de structure.

Syntaxe

for variable = ensemble de valeurs

    instructions

end

Exemple

1
2
3
4
5
6
7
8
9
clear all
 
x=-pi:2*pi/100:pi;
ligne = 1;
for n = [1,2,3,5,7]
    y(ligne,:) = exp(-n*x.^2);
    ligne = ligne + 1;
end
plot(x,y,'-.o')
Tracé d'un réseau de courbes avec une boucle for
Tracé d'un réseau de courbes avec une boucle for

Très souvent, l'ensemble des valeurs pour lesquelles la boucle for est exécutée est défini sous la forme d'une liste :

Syntaxe

for variable = valeur début:pas:valeur fin

    instructions

end

Exemple

1
2
3
4
5
6
7
8
clear all
 
n=100;
for ligne = 1:n
    for colonne = 1:n
        A(ligne,colonne) = 1/(ligne+colonne-1);
    end
end

ou

1
2
3
4
5
6
7
8
clear all
 
n=1:100;
for ligne = n
    for colonne = n
        A(ligne,colonne) = 1/(ligne+colonne-1);
    end
end

Remarque

En MATLAB, la boucle for peut s'effectuer sur une variable réelle, et pas seulement sur des entiers, comme dans tous les exemples précédents.

1
2
3
4
5
6
7
8
9
>> for s = 1.0: -0.25: 0.0
    disp(s)
end
  
    1
    0.7500
    0.5000
    0.2500
    0

Complément

Dans la plupart des langages, le parcours d'un vecteur ou d'un tableau nécessite une ou deux boucles for.

En MATLAB, on peut souvent se passer de boucles pour le parcours d'un tableau, sauf dans le cas où l'expression définissant les valeurs de ce tableau fait intervenir l'indice de ligne ou de colonne (comme c'est justement le cas dans l'exemple précédent !).

Dans le cas de tableau de grandes dimensions, si l'on peut éviter l'utilisation des boucles, il peut être judicieux de s'en passer, pour des raisons de performances.

Exemple

L'écriture classique de la boucle suivante

1
2
3
4
5
6
7
8
9
10
clear all
clc
 
n=1:1e6;
 
tic
for colonne=n
    C(colonne)=colonne^3 * sin(colonne);
end
temps1=toc

peut être avantageusement remplacée par :

1
2
3
4
5
6
7
8
clear all
clc
 
n=1:1e6;
 
tic
C=n.^3.*sin(n);
temps2=toc

Remarque

La seconde écriture, sous forme matricielle, est d'autant plus avantageuse par rapport à l'écriture avec une boucle for que le nombre n est grand.

Remarque

L'instruction tic lance le chronomètre, toc l'arrête et donne le temps écoulé !

Ce temps dépend évidemment de l'ordinateur qui exécute le code, c'est pourquoi on ne vous donne pas de valeurs de sortie dans les exemples précédents : à vous de tester !