next up previous
suivant: À propos de ce monter: Cours de Matlab/Octave précédent: boucles while

Vectorisations basiques

[Cette partie est partiellement reprise de la documentation Octave]

L'objectif de la vectorisation consiste à éviter d'avoir des boucles dans le programme en les remlaçant par des opérations matricielles. Comme premier exemple, la vectorisation consistera à remplacer

for i = 1:n
    for j = 1:m
         c(i,j) = a(i,j) + b(i,j);
    end
end
par
 c = a + b;
L'avantage n'est pas seulement de simplifier les lignes de commandes mais surtout de les optimiser.

Un autre exemple de vectorisation consiste à écrire

a = b(2:n) - b(1:n-1);
plutôt que
for i = 1:n-1
    a(i) = b(i+1) - b(i);
end
Cet exemple illustre un principe général de programmation en matlab/octave qui est d'utiliser les indices des variables plutôt que des boucles.

De manière analogue, lorsqu'une condition est testée pour chaque indice d'une matrice, on aura recours à une matrice de booléens plutôt qu'à des boucles sur les indices de la matrice. Par exemple, on remplacera

for i = 1:n
    if a(i) > 5
       a(i) -= 20
     end
end
par
     a(a>5) -= 20;
qui s'appuie sur la matrice booléenne a>5.

L'utilisation d'opérations pointées .*, .^ permet aussi d'éviter les boucles et accélère les temps de calcul.

Les fonctions précompilées matlab sont très rapides et les fonctions .m de toolboxes sont en général optimisées ou en cours de le devenir. Il est donc préférable d'utiliser cette fonction lorsqu'elle propose une alternative à une boucle, comme dans l'exemple suivant :

Plutôt que

a = b(2:n) - b(1:n-1);
on peut utiliser
a = diff (b);


next up previous
suivant: À propos de ce monter: Cours de Matlab/Octave précédent: boucles while
Frédéric Richard, Aix-Marseille Université 2012-12-03