Vous êtes sur la page 1sur 10

TP 1 : Prise en Main de Matlab

BUT DE TP

Ce TP a pour but d'apprendre à utiliser le logiciel Matlab, et de manipuler les


variables dans l'environnement de travail. Les différents types de visualisation des
données en 2D et 3D sont aussi abordés. Enfin l'utilisation de scripts et de fonctions
est présentée au travers d'exemples simples.

Génération - Manipulation
Cette partie fait un tour d'horizon des utilisations courantes des vecteurs et matrices,
de la génération à l'indexation.
On travaille dans cette partie à partir du prompt de l'espace de travail. Le prompt,
dénoté par >>, signifie que vous avez la main et qu'une commande est attendue.
Quelques commandes sont utiles, lorsque vous avez oublié quelles sont vos
variables ou une commande ...
 Les commandes who et whos vous indiquent les tailles et types de vos
variables.
 La commande help utilisée seule donne une liste et un bref descriptif des
sujets contenant une aide,
 La commande help nom_fonction donne un descriptif de la fonction sur les
arguments nécessaires en entrée ainsi que les résultats donnés.

Manipulations des vecteurs et scalaires

Scalaires

Dans un premier temps on génère trois variables scalaires a,b et c sur lesquelles on
va par la suite effectuer quelques opérations.
>> a = 2
a=
2
>> b = 3
b=
3
>> c = 4;
>>
Le caractère `;' sert à supprimer l'écho d'une ligne de commande, c'est-à-dire
l'affichage des valeurs prises par les variables dans la ligne de commande. Pour
connaître la valeur d'une variable, il suffit donc de taper son nom :
>> c
c=
4
Il est aussi possible de séparer 2 commandes sur la même ligne à l'aide d'une virgule
`,' sans supprimer l'écho ou d'un point virgule `;'. Essayez :
NASR KHOIDJA Med Ali 1/12
>> a = 3; b = 2, c = 4;
Enfin, si une ligne de commande est trop longue, vous pouvez passer à la ligne
suivante en tapant `...' puis ENTREE :
>> a = ...
4
a=
4
Vous pouvez alors effectuer des opérations sur vos variables en respectant les
règles classiques de priorités : * et / prioritaires devant + et -
>> a+b * c
ans =
16
>> (a+b) * c
ans =
28
>> d = a/b*c, e = (a/b)*c
d=
6
e=
6
Comparez alors l'effet des commandes who et whos.

Vecteurs

Les vecteurs peuvent être générés de manière manuelle ou automatique. Pour la


génération manuelle, les délimiteurs sont :
 `[' et `]' délimitent le début et la fin du vecteur,
 un espace sépare 2 colonnes,
 un point virgule `;' à l'intérieur de [ ] sépare 2 lignes.

Générez ainsi un vecteur ligne et un vecteur colonne


>> vect1 = [ a b c+b/2 ]
???
>> vect2 = [ c; b; a+b+c]
???
La transposition s'effectue à l'aide de l'apostrophe '. Attention, car elle effectue aussi
l'opération de conjugaison si le nombre est complexe (c'est la transconjugaison), et la
transposition réelle est en fait l'opérateur .'. Essayer
>> vect1 + vect2
???
>> vect1 + vect2'
???
>> (vect2 + i)'
???
>> (vect2 + i).'
???
La génération automatique d'un vecteur se fait de manière linéaire ou logarithmique.
De manière linéaire, en définissant une valeur de début, un pas et une valeur de fin,
chacun séparé par 2 points ` :'. Par défaut, c'est à dire s'il n'est pas spécifié, le pas
vaut 1. Essayez :
>> vect3 = 1:10
???
>> vect4 = 1:-0.5:-1
???
>> debut = 0; fin = 2*pi; pas = .1; vect5 = debut:pas:fin

NASR KHOIDJA Med Ali 2/12


Essayez alors les fonctions linspace et logspace pour générer des vecteurs
linéaires ou logarithmique (regardez l'aide sur ces fonctions pour savoir comment les
utiliser).
Les opérations +,-,*,^ sur les vecteurs se font alors comme pour les matrices et il est
en plus possible de faire des opérations terme à terme en ajoutant un point devant
l'opérateur (.* , ./ ,.^ , ...). Les principales règles sont rappelées
 L'addition/soustraction de matrices est possible si et seulement si les
matrices sont de même taille.
 La multiplication de deux matrices est possible si et seulement si ces
matrices ont une taille en commun. A (N1 ,M1 ) * B (N 2 ,M 2 ) existe si M 1  N 2 . Le
produit est alors effectué dans l'ordre classique ligne - colonne
 La puissance n'a de sens que pour les matrices carrées.
 Les opérations terme à terme ne sont possibles qu'entre des matrices de
même taille.
 La puissance et l'inverse terme à terme sont possibles sur toutes les
matrices (pour l'inverse, il ne doit pas y avoir d'éléments nuls).

L'utilisation des fonctions mathématiques courantes se fait comme dans une


calculatrice scientifique. Une liste des fonctions les plus courantes est disponible
dans l'aide en ligne par
>>help elfun
Essayez et commentez les opérations suivantes
>> vect1 * vect2
>> vect2 * vect1
>> vect1 .* vect2'

>> x = 0:pi/4:pi;
>> sin(x),cos(x), 1/x
???

Manipulations des matrices

Les matrices sont des tableaux à deux dimensions qui se génèrent comme les
vecteurs. À l'intérieur des délimiteurs [ ], deux colonnes sont séparées par un espace
et deux lignes par un point virgule `;'.
Surveillez bien que toutes vos lignes aient toujours le même nombre de colonnes !
Un certain nombre de matrices prédéfinies existent (diagonales, nulles, remplies de
1, ...), et fonctions réalisent les opérations courantes sur les matrices (déterminant,
trace, somme des lignes ou des colonnes, valeurs propres, ...). La liste est disponible
dans l'aide :
>> help elmat
Générez la matrice A( 3, 3) donnée ci-dessous, recherchez son déterminant, son
1
inverse, son carré, son inverse terme à terme. Vérifiez que A * A  I (3,3) .

Exemple de résolution de système linéaire


NASR KHOIDJA Med Ali 3/12
Il est facile de résoudre un système linéaire sous Matlab, grâce aux fonctions
divisions \ et /, respectivement dites à gauche et à droite. Il faut pour comprendre
cela, rappeler un résultat essentiel de la multiplication de 2 matrices :

Pour vous en convaincre, générez une matrice et comparez les résultats des
multiplications et .

L'écriture sous forme de produit matriciel d'un système d'équations linéaire respecte
un certain ordre dans la multiplication. Ainsi le système :

(1.1)
 
 x  1 
   
 s'écrit : A * X  Y    , où X   y 
 z 
   et Y   0 
  1
   

Dans ce cas là on a recours à la division à gauche car la matrice est située à


gauche de l'inconnu. La solution du système sera donnée par X  A \Y, comme pour
signifier que divise par la gauche. La division à droite est utilisée dans un
système du type :
A * X = Y.
Résolvez le système proposé sous Matlab.

Indexation des matrices

Les manipulations fréquentes sur les matrices nécessitent souvent de ne récupérer


qu'une partie d'une matrice (ligne ou colonne, sous matrice). L'indexation, ou appel
des éléments se fait par rapport à leurs indices, numérotés de 1 au nombre total de
ligne puis de 1 au nombre total de colonnes. L'ordre d'indexation est toujours ligne -
colonne.
Pour récupérer l'élément situé à la ligne, colonne de la matrice A, on appelle
A(2,3). Récupérer ainsi l'élément 0 dans la matrice A.
>> A(2,3)
ans =
2
Afin de récupérer un sous bloc d'une matrice, il faut donner en indice non plus une
valeur mais un vecteur de valeur. La récupération d'une ligne ou d'une colonne se
fait en indiquant `:' comme indice. Le dernier élément d'une ligne ou d'une colonne
peut être indexé par la variable end.
Essayez et commentez
>> A (1:2,1)
>> A (1,:)
>> A (:,1:3)

NASR KHOIDJA Med Ali 4/12


>> A (1:2,2:3)
>> A(end,end-1)
Dans le cas où l'on ne veut récupérer que quelques éléments de la matrice, il faut
avoir recours à un autre type d'indexation. Matlab indexe en effet les éléments de
deux façons : soit en ligne - colonne, soit comme un vecteur, en comptant les
éléments dans l'ordre ligne colonne.
Pour la matrice , les éléments sont donc soit indexés de A(1,1) à A(3,3), soit de
A(1) à A(9) dans l'ordre :
(1,1) (1,2) (1,3) 1 4 7
( lignes,colonnes )= ( 2,1) ( 2,2) ( 2,3)    , soit (indices) = 2 5 8 (1.2)
(3,1) (3,2) (3,3) 3 6 9

La conversion (ligne,colonne) vers (indice) se fait alors, pour une matrice ayant
lignes et colonnes :
   Indice = N*(colonne – 1)+ligne
Essayez avec les 2 types d'indexations de récupérer en une seule fois les éléments
A(2,1), A(1,3) et A(3,2). Concluez.

Suppression d'éléments, taille des matrices

Il est parfois utile de devoir supprimer, ou ajouter, des éléments d'un vecteur ou
d'une matrice. L'ajout d'éléments se fait simplement en assignant une valeur à
l'indice désiré. Matlab met à jour la taille des matrices pour y inclure le nouvel
élément.
La taille des matrices est donnée par la fonction size pour les matrices ou les
tableaux de dimensions > 2 et par length pour les vecteurs. Une option intéressante
de la fonction size est la possibilité de ne récupérer que le nombre de lignes ou de
colonnes d'une matrice.
Regardez dans l'aide de la fonction size.
Essayez et commentez les ajouts suivants. Vérifiez aussi la taille de votre matrice
avant et après chacune des opérations.
>>A (5,2) = 5
>> A (4,:) = 5
>> A (1:4,7) = A(1,3)
L'opération de concaténation consiste à mettre bout à bout des matrices, ou
vecteur. Il n'est possible de concaténer les matrices en ligne ou en colonne que si
elles ont une dimension en commun.
Expliquez les concaténations suivantes :
>> A A1 = [ A A ]
>> A A2 = [ A ; A ]
>> A A3 = [A(1,:) ; A (:,2)' ]
>> A A4 = [A(1,1:2) , A(1:2,4) ’ ]
Il est aussi nécessaire, pour certaines opérations terme à terme entre 2 matrices de
répliquer un vecteur ou une matrice pour le mettre au format d'une autre. La
commande repmat permet de répliquer une matrice en la concaténant.
Expliquez chaque terme des commandes suivantes :
>> c = repmat(1:size(A,2),size(A,1),1)
>> d = A.^c
Enfin, pour supprimer des éléments d'une matrice, il faut en fait leur assigner une
matrice vide (>> [ ]).

NASR KHOIDJA Med Ali 5/12


Est-il possible de ne supprimer qu'un élément d'une matrice ?
Commentez les opérations suivantes, en vérifiant la taille de votre matrice :
>> A(4,:) = [ ]
>> A(5,:) = [ ]
>> A(:,4:6) = [ ]

Utilisation de fichiers scripts

Plutôt que de retaper toute une série de commandes au clavier, le travail sur une
application précise en Maltab se fera en créant dans l'éditeur de texte des fichiers
textes stockés avec l'extension `` .m''. Tous les fichiers ayant l'extension .m sont
exécutables directement depuis le prompt, en tapant le nom du fichier, sans
l'extension. Il faut toutefois s'assurer que le chemin du répertoire dans lequel se
trouve vos fichiers est bien connu par Matlab. C'est la commande path qui vous
indique quels sont les chemins connus. Cette commande permet aussi d'ajouter un
chemin à la liste. Les versions récentes de Matlab sont équipées d'un path browser
(explorateur de chemin) qui vous permet d'ajouter facilement les chemins des
répertoires contenant vos fichiers. Il existe 2 types de fichiers .m, les fichiers de
commandes et les fichiers de fonctions. Les fonctions seront vues plus tard et nous
ne présentons ici que les fichiers de commandes.
Les fichiers de commandes sont des fichiers textes, éditables avec n'importe quel
éditeur (Notepad, ...). Les versions récentes de Matlab proposent un éditeur de
fichiers ``.m'' présentant quelques avantages : couleurs spécifiques pour les
fonctions connus, outils de debbugage intégrés, ajout de points d'arrêts, ...
Pour ouvrir un fichier ``.m'' dans l'éditeur, tapez >> edit nom_fichier.
Vous travaillerez désormais uniquement dans des fichiers scripts, afin de garder une
trace de vos travaux, et de pouvoir apporter facilement des modifications.
Il est utile de commenter abondamment ces programmes, pour les comprendre
facilement même longtemps après leur création. Une ligne de commentaires est
délimitée sous Matlab par le caractère ``%''.

À titre d'exemple, créez un fichier ``.m'' qui génère un signal sinusoïdal de 128
points, puis qui l'affiche à l'écran, à l'aide de la commande plot.
Éxecutez votre programme depuis l'espace de travail (vérifiez que le chemin d'accès
au programme existe).
Un autre avantage des scripts est la possibilité de demander une valeur à l'utilisateur
pendant l'éxecution du programme. Ceci se fait par la commande input.
>> valeur = input('Entrez une valeur')
Modifiez votre programme pour demander la fréquence du sinus à l'utilisateur.

Affichage

Matlab possède de nombreuses fonctions permettant de visualiser les données que


ce soit en 2D, 3D ou même 4D puisqu'il est possible de réaliser des animations (pour
voir les vibrations d'une plaque par exemple). Avant tout, il est souvent nécessaire
d'afficher du texte, pour demander des valeurs à l'utilisateur ou simplement pour
afficher des résultats.

Texte

NASR KHOIDJA Med Ali 6/12


Il existe 2 grands types de variables : les nombres, souvent réels (double), et les
caractères. Dans les 2 cas, Matlab traite les données sous forme matricielle, c'est à
dire soit comme un tableau de nombres, soit comme un tableau de caractères. Par
exemple, une phrase sans saut de ligne sera un vecteur de caractères.
Les chaînes de caractères sont délimitées par des apostrophes '.
>> txt1 = 'Bonjour les amis'
txt1 =
Bonjour les amis
>> txt1(1:8)
ans =
Bonjour
Pour récupérer une chaîne entrée par l'utilisateur, on utilise la fonction input avec
l'argument 's' signifiant string. La concaténation de texte s'effectue comme pour les
matrices et vecteurs.
Essayez :
>> txt2 = input('Tapez votre texte','s')
>> txt3 = [ txt2; reverse(txt2) ]
L'affichage du texte est possible par les commandes disp et sprintf.
 disp permet d'afficher une variable ou une chaîne de caractère, ou toute
combinaison licite des 2. Le mélange de variables numériques et de
caractères se fait grace à la fonction num2str qui convertit un nombre en
chaîne (littéralement : number to string). Il arrive cependant qu'une variable
numérique soit sur plusieurs lignes, comme c'est le cas pour les matrices.
Aussi, la fonction strvcat permet de mettre en forme des variables de texte
n'ayant pas le même nombre de lignes ou de colonnes.
Les différents exemples proposés ci-dessous montrent les différents cas
possibles ou non:
 >> disp(A);
 >> disp(pi);
 >> disp('du texte, blabla');
 >> disp('du texte'),disp('blabla')
 >> disp( [ 'l''élément A(3,3) vaut : ' num2str(A(3,3)) ] )
 >> disp( [ 'La matrice A vaut :' num2str(A) ] )
 >> disp( strvcat('La matrice A vaut :', num2str(A)) )
 >> disp('La matrice A vaut : '), disp(A)
 sprintf est la fonction similaire à la fonction printf du langage C. Par rapport à
la fonction disp, elle permet d'inclure plus facilement des résultats numériques
au milieu de texte, et de choisir la précision d'affichage.
Regardez l'aide de cette fonction et commentez les différents exemples
suivanst :
 >> sprintf('%.25f',pi)
 >> sprintf('%.3f',pi);
 >> disp(sprintf('%.3f',pi));
 >> sprintf('%d ',a)
 >> sprintf('A est une \nmatrice %dx%d',size(A,1),size(A,2))

Graphiques 2D

Un graphique sert à représenter dans une grande majorité des cas une grandeur
physique. Il est donc primordial de gérer les unités des axes que l'on utilise. De
nombreuses fonctions servent à personnaliser les axes en ajoutant vos propres
labels, légendes et titres. Différents types de représentations sont aussi possibles,
suivant le type de données que l'on désire représenter. Nous ne présentons ici que

NASR KHOIDJA Med Ali 7/12


les graphiques de type courbes, mais il existe aussi des fonctions réalisant des
histogrammes, des barres ou des camemberts pour les données de types
statistiques ou proportionnelles (help specgraph pour plus de détails).
Les représentations se font en coordonnées cartésiennes mais aussi polaires ou
cylindriques. Les principales fonctions d'affichage sont :
 plot relie deux points successifs par une ligne, ce qui donne une courbe.
 stem les différents points ne sont pas reliés entre eux, mais apparaissent
comme des échantillons.
 stair les valeurs des points restent identiques jusqu'au point suivant. Similaire
à un bloqueur d'ordre 0 pour un échantillonneur (capacité très grande).
 comet trace la courbe de manière continue, comme une comète qui passe.
 semilogx, semilogy, loglog idem que plot sur une courbe, semi
logarithmique en x ou y ou sur une courbe logarithmique.

La première utilisation d'une de ces fonctions entraîne la création d'une fenêtre


appelée figure. Les suivantes se tracent par défaut dans la même figure, en effaçant
la courbe précédente. Il est donc nécessaire de créer une nouvelle figure pour
afficher 2 graphiques différents. La commande figure crée une nouvelle fenêtre et la
commande close ferme la fenêtre en cours d'utilisation. Toute les figures sont
repérées par un numéro qui peut être utilisé comme argument de figure ou close
pour rappeler une ancienne figure.
La syntaxe est la même pour toutes ces fonctions. Elle permet notamment de tracer
plusieurs courbes en même temps : plot(x1,y1,'couleur1',x2,y2,'couleur2',... ).
L'argument couleur est 1 caractère, correspondant à une couleur dont la liste est
donnée dans l'aide de la fonction plot. Quand on ne désire tracer qu'une seule
courbe, les arguments x1 et 'couleur' sont optionnels. Attention, car on perd dans ce
cas là l'information sur l'axe des abscisses, et donc sur une unité (souvent le temps
ou la fréquence) de la grandeur représentée.
Il est aussi possible de superposer les courbes à l'aide de la commande hold on, qui
maintient l'affichage. De la même manière hold off supprime le maintient de
l'affichage. Ainsi :
>> x = 0:0.1:2*pi;
>> y1 = sin(x);
>> y2 = cos(x);
>> plot(x,y1,'r',x,y2,'b')
Équivaut à
>> plot(x,y1,'r')
>> hold on;
>> plot(x,y2)
Créez un fichier ``.m'' permettant de comparer les différents types de visualisations
sur le signal sinusoïdal généré précédemment.
La fonction polar permet de représenter des fonctions en coordonnées polaires. Ceci
présente un grand intérêt pour les diagrammes de directivité. Par exemple, ici un
diagramme de directivité de type cardioïde.
>> theta = 0:.1:2*pi;
>> r = 1 + cos(theta);
>> polar(theta,r)
Rq : il peut être nécessaire de faire un hold off avant !

Gestion des axes

NASR KHOIDJA Med Ali 8/12


Les différentes fonctions suivantes permettent de gérer les labels des axes et
commentaires sur les figures, ainsi que diverses fonctions pour manipuler les
graphiques.
 title : title('Texte du titre') Ajoute un titre à la figure.
 xlabel : xlabel('Unité des x')
 ylabel : ylabel('Unité des y')
 legend : legend('Nom de la courbe 1','nom courbe 2', ...)
 grid : grid on, grid off, quadrille ou non le graphique.
 zoom : permet de zoomer dans la figure a l'aide de la souris (clic gauche =
zoom +, clic droite = zoom -, double clic droite = retour à l'affichage de départ,
bouton gauche appuyé dessin de la zone à zoomer).
 clf : efface la figure en cours d'utilisation.
 ginput : ginput(n) récupère les coordonnées de n points cliqués à la souris
dans la figure en cours.

Images et graphiques 3D

Les fonctions de représentation en 3D s'utilisent de la même manière que les


fonctions 2D. La seule différence vient de la taille des données à représenter.
Typiquement, on va représenter en 3D des données contenues dans une matrice, en
considérant par exemple les lignes et les colonnes comme un quadrillage de
l'espace, et les valeurs en chaque point de la matrice représentent une amplitude
(pression, tension, ...).
Il est alors possible de représenter les amplitudes soit sous forme d'une image ou
chaque couleur représente une valeur d'amplitude soit sous forme d'un graphique en
3 dimensions où en plus de la couleur, l'axe des z (hauteur) représente l'amplitude.
Les principales fonctions d'affichage 3D sont :
 surf : surf(x,y,z), courbe 3D où x et y sont les axes et z la matrice des
amplitudes
 mesh : mesh(x,y,z). Idem que surf
 image, imagesc : imagesc(x,y,z). Visualisation d'une image, les couleurs sont
proportionnelles aux amplitudes.
 shading : shading interp améliore le rendu d'une courbe 3D, en la lissant.
 colormap : colormap(cool) différentes plages de couleur.
 view : view(azimut, élévation) permet de régler l'angle de vue de la courbe
(azimut, rotation par rapport à un axe vertical, élévation par rapport à un axe
horizontal )
 rotate : Permet de faire tourner la figure à l'aide de la souris

Par exemple, pour représenter le mode (1,1) de vibration d'une plaque, on génère la
matrice , et
>> y = 0:0.1:pi;
>> x = 0:0.1:pi;
>> n = 1; m = 1;
>> z = sin(n*x)'*sin(m*y);
>> figure(1); clf;
>> surf(x,y,z);
>> shading interp
>> figure(2), clf, imagesc(x,y,z)

Division d'une figure en sous-figures


NASR KHOIDJA Med Ali 9/12
La commande subplot permet de séparer une figure en une matrice de sous-figures.
Elle s'utilise avant une commande de dessin pour signifier que la courbe devra être
dessinée dans une sous-figure.
La syntaxe est subplot(n_ligne,n_col,num_fig) et la figure est séparée en n_lignes
* n_col sous figures, réparties sur n_lignes lignes et n_col colonnes. num_fig
correspond au numéro de la sous figure dans laquelle on désire tracer la courbe, les
sous-figures étant numérotées de gauche à droite puis de haut en bas.
>> subplot(2,2,2), plot(x,sin(x))
>> subplot(2,2,3), plot(x,sin(x))
À titre d'exercice, réaliser un script permettant de voir en 3D les modes (1,1), (1,2),
(1,3), (2,2), (3,2) et (3,3) de la plaque définie ci-dessus dans une même figure.

Les fonctions

Les fonctions sont le deuxième type de fichiers ``.m''. Comme les scripts, il s'agit de
fichiers texte, mais elles implémentent une fonction, de manière interne au fichier.
Ainsi, on lui passe des paramètres d'entrée et la fonction rend des résultats. Les
variables utilisées dans les fonctions sont invisibles depuis l'espace de travail. Seuls
les résultats seront visibles.
Un fichier fonction débute par le mot function, suivi du nom de la fonction, et des
paramètres d'entrée sortie. La déclaration est de la forme :
function [ resultat1, resultat2, ... ] = mafonction(paramètre1,paramètre2,... )

% Les commentaires situés juste après la déclaration de la fonction


% constituent l'aide obtenue par la commande
% >> help mafonction
Le nom du fichier .m et de la fonction doivent impérativement être identiques. Dans
l'exemple ci-dessus, le fichier doit s'appeler mafonction.m. Elle sera appelé depuis
Matlab, un script ou une fonction de la manière suivante :
>> [ y, z ] = mafonction(a,b)
Un des avantages de Maltab est qu'il est possible de récupérer les sources de tous
les fichiers ``.m'' par la commande type nom_fonction. Vous pouvez ainsi vous
inspirer de tous les programmes déjà existants pour créer vos propres fonctions. Par
exemple, regardez la source de la fonction moyenne (mean). Notez au passage
l'importance des commentaires et de l'aide par rapport au programme lui-même.
>> type mean

NASR KHOIDJA Med Ali 10/12

Vous aimerez peut-être aussi