4.10 Optimisation

Matlab est un langage matriciel interprété! Pour utiliser efficacement Matlab, il faut donc utiliser en priorité les notations matricielles et remplacer les boucles par des produits tensoriels. Cela évite l'interprétation des boucles (qui peut être très lent sous Matlab).

Dans l'exemple suivant, on se propose de calculer la matrice de Vandermonde $A$:


\begin{displaymath}
A^{t}=\left[\begin{array}{ccccc}
1 & t_{1} & t_{2} & .. & t_...
...\
1 & t_{1}^{m} & t_{2}^{m} & .. & t_{n}^{m}\end{array}\right]\end{displaymath}

L'approche classique (identique à la programmation en C) est donnée dans le programme ci-dessous:


programme matlab 3.10: calcul de la matrice de Vandermonde

% premiere version
t=[0:1:200]; n=100;
cpu0=cputime;
m=size(t,2);
for i=1:m
  for j=1:n+1
    A(i,j)=t(i)^(j-1);
  end
end;
cputime-cpu0

Cette version s'exécute en 1.7 s CPU sur un ordinateur de bureau:

>>vandermonde1


\begin{displaymath}
ans\,=\,1.7000\end{displaymath}

La version optimisée utilise les produits tensoriels pour éliminer les boucles explicites.


programme matlab 3.10: calcul de la matrice de Vandermonde: version optimisée

% version matricielle optimisée
t=[0:1:200]; n=100;
cpu0=cputime;
m=size(t,2);
A=ones(m,n+1);
for i=1:n
  A(:,i+1)=A(:,i).*t';
end;
cputime-cpu0

Cette nouvelle version est 56 fois plus rapide !

>>vandermonde2


\begin{displaymath}
ans\,=\,0.03\end{displaymath}


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