TP1
TP1
TP1
L’objectif de ce TP est de vous familiariser avec le logiciel Matlab, contraction de Matrix Laboratory.
Matlab n’est pas à la base un langage de calcul formel comme Mathematica ou Maple. Il s’agit d’un
interpréteur de commandes écrites en langage Matlab. Ce logiciel a été conçu pour faciliter les opérations
sur les vecteurs, matrices et tableaux.
Matlab est constitué d’un noyau relativement réduit, capable d’interpréter puis d’évaluer les expres-
sions numériques matricielles qui lui sont adressées :
– soit directement au clavier depuis une fenêtre de commande ;
– soit sous forme de séquences d’expressions ou scripts enregistrées dans des fichiers-texte d’extension
.m et exécutées depuis la fenêtre de commande ;
– soit plus rarement sous forme de fichiers binaires d’extension .mex générés à partir d’un compilateur
C ou fortran.
Ce noyau est complété par une bibliothèque de fonctions prédéfinies, très souvent sous forme de fichiers
.m, et regroupés en paquetages ou toolboxes. À côté des toolboxes requises local et matlab, il est possible
d’ajouter des toolboxes spécifiques à tel ou tel problème mathématique, Optimization Toolbox, Signal
Processing Toolbox par exemple ou encore des toolboxes crées par l’utilisateur lui-même.
1 Avant de commencer
Avant la première utilisation de Matlab, il est vivement recommandé (c’est même indispensable dans
le cas d’une installation en réseau) à chaque utilisateur de créer un répertoire de travail, myMatlab par
exemple, où il pourra enregistrer ses fichiers. Lors de la première session, le chemin d’accès à ce répertoire
sera ajouté aux chemins d’accès connus de Matlab, soit en utilisant l’item Set Path du menu File, soit en
tapant la commande addpath suivie du chemin d’accès au répertoire de travail.
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚1.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚2.
– delete : efface le fichier spécifié (peut être utilisée sous forme de fonction sous la forme : de-
lete(’nomDeFichier’)) ;
– mkdir path : crée le répertoire de chemin d’accès path ;
– rmpath path : supprime le chemin d’accès (path) du (Matlabpath) ;
– isdir (path) : fonction booléenne qui retourne 1 si le chemin d’accès (path) est celui d’un répertoire,
0 sinon ;
2 Notions de base
Créations et manipulations de variables
a=4 ;b=pi ; La valeur 4 est affectée à a et la valeur π à b.
who Liste les variables Matlab utilisées dans la session.
clear b Destruction de la variable b.
who Vérification que la variable b n’existe plus.
sqrt(a) Calcul la racine carrée de la variable a.
A=[1 2 3 ;4 5 6 ; 7 8 9] Création «à la main» de la matrice A.
b=A(2, :) b est le vecteur ligne contenant la deuxième ligne de A.
c=A( :,3) c est le vecteur colonne contenant la troisième colonne de A.
B=A(1 :2,1 :2) B est la première sous-matrice carrée d’ordre 2 de A.
X=[1 :20] ; X est le vecteur ligne contenant les entiers de 1 à 20.
Y=[1 :2 :20] ; Y est le vecteur ligne contenant les entiers 1, 3, . . . , 19.
C=A’ C est la matrice transposée de A.
A+C ;A*C Addition et multiplication matricielles classiques.
n=4 ;A=eye(n) Création de la matrice identité d’ordre 4.
B=zeros(n) B est la matrice nulle d’ordre 4.
C=ones(n) C est la matrice carrée d’ordre 4 ne contenant que des 1.
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚2.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚3.
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚3.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚4.
Les opérateurs logiques court-circuités sont des opérateurs pour lesquels le résultat est acquis dès que
l’évaluation du premier opérande permet d’affirmer le résultat global sans évaluer le second opérande. Si
a et b sont des variables booléennes :
– a && b vaut false dès que a vaut false
– a k b vaut true dès que a vaut true.
On peut également utiliser les fonctions or, not, and, eq,ne,gt,lt,ge,le. Il y en a d’autres, faites
donc un help ops. La commande any(V) renvoie 1 si au moins l’un des éléments du vecteur V est non
nul, 0 sinon. La function all(V) renvoie 1 si tous les éléments du vecteur V sont non nuls, 0 sinon.
Enfin la fonction find(V) renvoie les indices correspondant aux éléments non nuls du vecteur V. Ainsi
V(find(V>2)) renvoie les valeurs supérieures à 2 du vecteur V.
Les commandes Matlab isreal,ischar,issparse,isnan,isinf,isfinite permettent de tester la
nature des variables. Ainsi isreal(a) renverra 1 si la variable a est un réel et 0 sinon.
V = [1 ,0 , −3 ,3 ,4];
b o o l e a n (V) % Un vecteur de données
˜V %qu ’ est - ce que cela donne ?
i s c h a r (V)
i s r e a l (V)
i s f i n i t e (V)
i s i n f ( 1 . /V)
isnan ( cos ( 1 . /V) )
V > 0.5
(V>−10 \& V <=3)
(V>−10 | V <= 3 )
find (V>0.5)
V( find (V> 0 . 5 ) ) . ˆ 2
any (V)
a l l (V)
Exercice 3.1. Que donne find(M) pour une matrice M ? Même question pour les commandes [I,J]=find(M)
et [I,J,K]=find(M).
Scripts et m-files
Un script est une séquence d’expressions ou de commandes. Un script peut se développer sur une
ou plusieurs lignes. Les différentes expressions ou commandes doivent être séparées par une virgule, un
point-virgule ou par le symbole de saut de ligne constitué de trois points . . . suivis de <entrer> (le
rôle des trois points est d’inhiber le mécanisme d’évaluation lors d’un passage à la ligne). Comme pour
une expression unique, la frappe de <entrer> déclenche le processus d’évaluation. Les expressions sont
évaluées dans leur ordre d’écriture. Seule la valeur des expression suivie d’une virgule ou d’un saut de
ligne est affichée, celle des expressions suivies d’un point-virgule, ne l’est pas. Par exemple
>> a =.5 , 2∗ a , save a , b=pi ; 2 ∗ b , c=a ∗b
Écrire un script est assez fastidieux, aussi Matlab permet d’enregistrer le texte d’un script sous forme
de fichier de texte d’extension .m, en raison de leur extension. Les fichiers d’extension .mat que nous avons
évoqués dans le chapitre précédant sont des fichiers binaires qui permettent d’enregistrer des valeurs. Les
fichiers .m permettent d’enregistrer les scripts sous forme de fichiers-texte et servent en particulier à
définir de nouvelles fonctions (une grande partie des fonctions prédéfinies de Matlab sont stockées sous
forme de fichiers .m dans la toolbox matlab. Les fichiers .m peuvent être crées par n’importe quel éditeur.
Dans les versions récentes de Matlab, il existe un petit éditeur intégré que l’on peut appeler à partir du
menu file ou à partir de la barre de menu de la fenêtre de commande.
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚4.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚5.
Structures algorithmiques
Le langage Matlab comprend les boucles du type for et while ainsi que les structures d’exécutions
conditionnelles du type if. L’argument d’un if et d’un while est de type logique, ce qui n’est pas le cas
de celui d’un for, qui est de type matriciel. La commande break permet de sortir de la boucle while ou
for la plus interne.
N=10;
% Boucles FOR
f o r n=1:N
f o r m=1:N
A( n ,m)=1/(n+m+1);
end
end
% Boucle WHILE
n=1;
r=−Inf ;
while (A( n , n)> 0 . 2 )
r=A( n , n ) ;
n=n+1;
end
% Execution conditionnelle IF
i f n=m
A( n ,m)=1;
e l s e i f abs ( n−m)==1
A( n ,m)=−1;
else
A( n ,m)=0;
end
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚5.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚6.
4 Fonctions et fichiers .m
On a vu qu’un ensemble de commandes Matlab est un script qui peut être sauvé (et exécuté) dans un
fichier .m. Ces fichiers sont aussi le moyen pour l’utilisateur de Matlab de définir ses propres fonctions.
On peut voir une fonction comme un sous-programme Matlab dont les paramètres éventuels sont les
arguments de la fonction et dont les résultats sont les images de cette fonction. Beaucoup de fonctions
Matlab, comme par exemple mean, sont déjà écrites en Matlab et le code Matlab correspondant est stocké
dans un fichier dont le nom se termine par .m. Pour mean, il s’agit donc de mean.m. Ajouter de nouvelles
fonctions à Matlab revient donc à écrire de nouveaux fichiers de ce type.
La commande Matlab type permet de lister le contenu d’un fichier. Ainsi, type mean vous montrera
le code source Matlab de la fonction mean. Le commentaire ajouté à partir de la seconde ligne constituera
l’aide affiché lorsque l’utilisateur tapera help mean. La commande which donne le chemin du fichier .m
associé à une fonction de Matlab, lorsqu’il existe.
Règles importantes
Le nom de la fonction et celui du fichier .m qui en contient la définition doivent impéra-
tivement être identiques. Ce fichier est le fichier .m associé à la fonction.
Dans la suite on verra qu’une partie importante d’une fonction est constitu’ee d’un script. Donc il est
d’usage et vivement recommandé d’écrire d’abord le script, de l’exécuter, puis, si le script
est fonctionnne correctement, alors il peut être transformé en fonction.
Syntaxe
Une fonction est constituée par :
– un en-tête :
function résultat = nom de la fonction (liste de paramètres)
– une section de commentaires dont chaque ligne commence par le symbole % ;
– le corps de la fonction défini par un script.
L’exécution d’une fonction s’achève lorsque la fin du script définissant la fonction a été atteint ; lorsque
une commande return ou un appel de la fonction error a été rencontré. return termine immédiatement
l’exécution de la fonction sans que la fin du script définissant celle-ci ait été atteint. error(’message’)
procède de même, mais en plus, affiche le contenu de ’message’. Le contrôle est alors renvoyé au point
d’appel de la fonction, fenêtre de commande ou autre fonction.
Chaque fonction possède son propre espace de travail et toute variable apparaissant dans le corps d’une
fonction est locale à celle-ci, à moins qu’elle ait été déclarée comme globale au moyen du qualificateur
global précédant le nom de la variable dans tous les espaces de travail où cette variable est utilisée.
Exemples
function m = moyenne ( x )
% MOYENNE (X) : moyenne des elements d ’ une liste ou d ’ un vecteur
% un argument autre qu ’ une liste ou un vecteur conduit a une erreur
[ K, l ] = s i z e ( x ) ;
i f ( ( k˜=1) & ( l ˜=1) )
error ( ’ l ”argument d o i t e t r e une l i s t e ou un v e c t e u r ’ )
end
m = sum( x ) / length ( x ) ;
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚6.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚7.
Un fichier .m associé à une fonction (i.e. qui porte le nom d’une fonction et contient sa définition)
peut contenir d’autres définitions de fonctions. La fonction qui partage son nom avec le fichier ou fonction
principale doit apparaı̂tre en premier. Les autres fonctions ou fonctions internes peuvent être appelées
par la fonction principale, mais pas par d’autres fonctions ou depuis la fenêtre de commande.
function [m, v ] = myStat ( x )
% MYSTAT (X) : moyenne et variance des elements d ’ une liste ou d ’ un vecteur
% un argument autre qu ’ une liste ou un vecteur conduit a une erreur
[ k , l ] = size (x) ;
i f ( ( k˜=1) & ( l ˜=1) )
error ( ’ l ”argument d o i t ˆ e t r e une l i s t e ou un v e c t e u r ’ )
end
m = moyenne ( x ) ;
v = variance (x ) ;
function a = moyenne ( u )
% Calcul de la moyenne
a = sum( u ) / length ( u ) ;
function b = v a r i a n c e ( u )
% Calcul de la variance
c = sum( u ) / length ( u ) ;
u2 = ( u − c ) . ˆ 2 ;
b = sum( u2 ) / length ( u ) ;
Optimisation
Il est parfois commode d’écrire des fonctions qui prennent un nombre variable d’arguments. Ceci peut
être fait en Matlab grâce à la commande nargin qui renvoie le nombre d’arguments passés à la fonction
lors de son appel. Voici un exemple à commenter :
function f d= f i r s t d i g i t ( x , b , c o n v e r t )
i f ( nargin==1), b=10;
end
i f ˜ ( c e i l ( b)==b & b > 1 & b <37)
error ( ’ b n ’ ’ e s t pas un e n t i e r e n t r e 2 e t 36 ’ ) ;
end
i f ˜ ( x>0)
warning ( ’ x n ’ ’ e s t pas p o s i t i f , i l e s t r e m p l a c e par −x ’ ) ;
x=−x ;
end
x=reshape ( x , [ 1 , length ( x ) ] ) ;
y=x . ∗ b . ˆ c e i l (−log ( x ) / log ( b ) ) ;
i f i s i n f ( y ) | isnan ( y ) | ˜ i s r e a l ( y ) ,
error ( ’ x t r o p p e t i t ou t r o p grand par r a p p o r t à b ’ ) ;
end
c=f l o o r ( y ) ;
s=d e c 2 b a s e ( c , b ) ;
i f nargin==3,
i f convert ,
f d=b a s e 2 d e c ( s ( : , 1 ) , b ) ;
end
else
f d=s ( : , 1 ) ;
end
return ;
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚7.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚8.
De la même manière on peut définir grâce à nargout des fonctions qui renvoient un nombre variable
de valeurs de retour, un peu comme le fait la fonction eig. Voici un exemple à commenter :
function [ e c d f , mi , ma, dt , r g ]= empcdf ( e , n )
i f ( nargin==1), n=10; end
i f ( nargout >= 2 ) , mi=min( e ) ; end
i f ( nargout >= 3 ) , ma=max( e ) ; end
i f ( nargout >= 4 ) , dt=(ma−mi ) / n ; end
i f ( nargout >= 5 ) , r g=ma−mi ; end
[ f r e q u e n c e s , c l a s s e s ]= h i s t ( e , [ min( e ) : ( max( e)−min( e ) ) / n :max( e ) ] ) ;
e c d f=cumsum( f r e q u e n c e s ) / length ( e ) ;
figure ;
plot ( [ min( e ) : ( max( e)−min( e ) ) / n :max( e ) ] , e c d f ) ;
Les calculs sont accélérés de façon spectaculaire en utilisant des opérations vectorielles en lieu et place
de boucles. Comparons les deux fonctions suivantes (la commande tic déclenche un chronomètre ; toc
arrête le chronomètre et retourne le temps écoulé depuis tic) :
function [ t , b ] = t e s t 1 ( n )
% determine le temps mis pour creer la liste
% des racines carrees des entiers compris entre 1 et n
m = 0 ;
tic ;
for k = 1 : 1 : n
b ( k ) = m+sqrt ( k ) ;
end
t = toc ;
function [ t , b ] = t e s t 2 ( n )
% determine le temps mis pour creer la liste
% des racines carrees des entiers compris entre 1 et n
tic ;
a = 1:1:n;
b = sqrt ( a ) ;
t = toc ;
Exercice 4.1. Vérifier que test2 est plus efficace que test1.
Matlab dispose d’un utilitaire appelé profiler qui est précieux pour étudier les performances d’une ou
plusieurs fonctions. Les modalités d’utilisation du profiler ont évolué en fonction des versions de Matlab.
On les trouvera dans l’aide en ligne help profile.
Exercice 4.2. 1. Créez à l’aide d’un éditeur un fichier que vous appellerez sigma2a.m qui contiendra
le texte suivant :
function s=sigma2a ( n )
% calcule la somme des carres des n premiers entiers
s=0 ; k=1 ;
for k = 1 : n
s=s +(k∗k ) ;
end
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚8.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚9.
2. Dans la fenêtre matlab taper s=0 ; s = sigma2a(100) puis s=1000 ; s = sigma2a(100). Conclu-
sion ?
3. Créez de même le fichier sigma2b.m contenant le texte :
function s=sigma2b ( n )
% somme des carres a partir de la liste des n premiers entiers
s=0 ; k=1 ;
while ( k<=n )
s=s +(k∗k ) ;
k=k +1;
end
4. Enfin créez le fichier sigma2c.m contenant le texte :
function s=sigma2c ( n )
% somme des carres a partir de la liste des n premiers entiers
l =(1 : n ) . ˆ 2 ;
s=sum( l ) ;
5. Testez les fonctions sigma2a, sigma2b et sigma2c. Pour comparer leurs performances utilisez la
commande profile que vous chercherez dans l’aide. Concluez.
5 Représentations graphiques
Le principe général des représentations graphiques est de se ramener à des calculs sur des matrices ou
des vecteurs. Ainsi la représentation d’une fonction de R dans R commencera par la création d’un vecteur
abcisses, en général réguli
‘erement espacées, auquel on applique la fonction pour créer le vecteur des ordonnées.
La commande plot permet de représenter des listes de points.
clear ;
x = −pi : 0 . 1 : 3 ∗ pi ; y = x . ∗ sin ( x ) ;
% Création d ’ une nouvelle fen^ e tre graphique .
figure ;
plot ( x , y )
% Axes
axis ([ − pi , 3 ∗ pi , − 6 , 9 ] )
% Titres de la figure , des abscisses , et des ordonnées
title ( ’x sin (x) ’ )
xlabel ( ’ a b s c i s s e s x ’ )
ylabel ( ’ o r d o n né e s y ’ )
% Garde la fen^ e tre graphique
hold on
plot ( x , 2 ∗ y , ’ g−− ’ )
% Légende
legend ( ’ B l a b l a ’ , ’ b l a b l a ’ )
hold o f f
Les commandes fplot et polar permettent de représenter des fonctions et les coordonnées po-
laires. quiver, bar et hist donnent le champ de vecteurs, un diagramme en bâtons, et un histo-
gramme. Les options -,- -, :,-.,.,+,*,o,x sont différents types de courbes, tandis que les couleurs
sont y,m,c,r,g,b,w,k.
Pour la dimension 3, on utilisera les commandes
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚9.
Université de Maine – Master 1-E.D.P. – 2007-2008. Page n˚10.
clear ;
t = 0 : 0 . 1 : 2 ∗ pi ;
x=sin ( t ) ; y=sin ( 2 ∗ t ) ; z=sin ( 3 ∗ t ) ;
plot3 ( x , y , z )
u=0:0.1:1;
x=u ’ ∗ x ; y = u ’ ∗ y ; z=u ’ ∗ z ;
figure ;
surf ( x , y , z )
Septembre 2007. Copyright c A. Popier [email protected]. GNU FDL Copyleft. Page n˚10.