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' ) |
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[1] !).
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 !