Vous êtes sur la page 1sur 18

PETITE INTRODUCTION A

MATLAB
Avertissement
1. Ce document est en cours de rédaction.
2. Il ne vise pas à se substituer à la documentation Matlab ou à un cours. Notamment il n’est fait
mention que de certaines des possibilités des différentes commandes Matlab (pour obtenir toutes
les possibilités offertes par une commande Matlab, on tapera help nom_commande dans la
fenêtre Matlab).
3. Merci de me signaler toute erreur ou imprécision et plus généralement tout commentaire :

Stéphane Balac
Institut Mathématique de Rennes
Université de Rennes 1
Campus de Beaulieu
35042 RENNES cedex
balac@maths.univ-rennes1.fr

Plan du document
Présentation
Calcul matriciel
Matrices
Opérations matricielles
Matrices spéciales
Fonctions matricielle
Manipulation de matrices
Systèmes d’équations
Programmer sous Matlab
Scripts et fonctions
Boucles de contrôle
Graphisme
Quelques fonctions utiles
Plus d’informations
Index
Présentation - généralités

Choisissez la fenêtre de commande où vous voulez lancer Matlab. Pour lancer Matlab taper matlab dans
cette fenêtre.

Un exemple
Voici un exemple de session Matlab. Le texte en caractères gras figure les commandes matlab. Notez
le prompt Matlab " >> ".
% matlab

>> A = [ 1 2; 2 1 ]

A =
1 2
2 1

>> A*A

ans =

5 4
4 5

>> quit

16 flops.

Dans cette session on a défini la matrice


1 2
2 1

et l’on a calculé son carré.

La comande pour quitter Matlab est quit. On veuillera dans la mesure du possible à ne pas lancer
simultanément plusieurs sessions Matlab.

Généralités
Dans une session Matlab, il est possible d’obtenir une aide en ligne sur une commande en tapant help
nom_commande. Par exemple
>> help quit

QUIT Terminate MATLAB.


QUIT terminates MATLAB.

On peut aussi utiliser la commande doc qui donne accès à la documentation en ligne par l’intermédiaire
d’une fenêtre MOSAIC. Pour quitter cette documentation, cliquer sur Exit Program dans le menu File
de la fenêtre MOSAIC.

Si une instruction Matlab est suivie d’un point virgule, le résultat de cette instruction n’est pas affiché.
>> A = [ 1 2; 2 1 ];

Pour réafficher le résultat contenu dans une variable, il suffit de de taper le nom de la variable
>> A

A =
1 2
2 1

Si le résultat n’est pas contenu dans une variable, il peut être rappeler par la commande ans:
>> A*A;

>> ans
ans =

5 4
4 5

Plusieurs instructions Matlab peuvent figurer sur une même ligne. Il faut alors les séparer par une
virgule ou par un point virgule.

Matlab dispose de plusieurs formats d’affichage des réels. Par défaut le format est le format court à 5
chiffres. Les autres formats sont:
format long : format long a 15 chiffres.
format short e : format court à 5 chiffres avec notation en virgule flottante.
format long e : format long à 5 chiffres avec notation en virgule flottante.

>> pi

ans =

3.1416

>> format long

>> pi

ans =

3.14159265358979

>> format short e


>> pi^3

ans =

3.1006e+01

Calcul matriciel

Matrices
Matlab est essentiellement un outil matriciel: les variables sont des tableaux.
Pour Matlab, un nombre réel est un tableau 1 x 1.

- Pour définir la matrice


1 2
3 4

et la stocker dans la variable a, on peut écrire


>> a = [ 1 2; 3 4 ]

Les éléments d’une ligne de la matrice peuvent être séparés par des blancs ou bien par une virgule ",".
Les lignes quant à elles peuvent être séparées par le point-virgule ";" ou par un retour chariot. Essayez :
>> a = [1,2;1,3]

>> a = [1 2

3 4]

- Un élément d’une matrice est référencé par ses numéros de ligne et de colonne. Ainsi a(2,1) désigne le
1er élément de la 2eme ligne de la matrice a.
>> a(2,1)

ans =

Opérations matricielles
L’objet de base sous Matlab étant la matrice, les opérations + (addition), - (soustraction), *
(multiplication), ^ (puissance) , sont les opérations matricielles usuelles. Ainsi A*B désigne le produit
de la matrice A par la matrice B, A + B désigne la somme de ces deux matrices et A^2 = A * A.
>> A=[1 2 3; 4 5 6]
A =

1 2 3

4 5 6

>> B = [1 1; 2 2; 3 3]

B =

1 1

2 2

3 3

>> A*B

ans =

14 14

32 32

Si les dimensions des matrices A et B sont incompatibles avec l’opération matricielle, Matlab renvoi un
message d’erreur:
>> A+B

??? Error using ==> + Matrix dimensions must agree.

Pour obtenir la transposée de la matrice B tapez B’ .


>> B’

ans =

1 2 3

1 2 3

En plus des opérations matricielles usuelles, il est possible d’effectuer des opérations entre matrices
"élément par élément". Pour cela, il faut faire précéder l’opérateur d’un point ".". Ainsi A.*B est la
matrice dont le terme générique est a_ij * b_ij et A.^2 est la matrice dont le terme générique est a_ij *
a_ij .
>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

>> B=B’

B =
1 2 3

1 2 3

>> A.*B

ans =

1 4 9

4 10 18

Matrices spéciales
Il existe un certain nombre de matrices prédéfinies sous Matlab. Les plus courantes sont

eye (n) : la matrice identité n x n

ones (m,n) : la matrice m x n dont tous les éléments valent 1

zeros(m,n) : la matrice m x n dont tous les éléments valent 0

rand(m,n) : une matrice m x n dont les éléments sont générés de manière aléatoire

Notez que si m=n, il suffit de spécifier une seule valeur de dimension: ones(n) est la matrice carrée n x n
dont tous les éléments valent 1.

Pour les matrices magiques et les matrices de Hilbert consulter l’aide en ligne.

Fonctions matricielles
Il existe de nombreuses fonctions matricielles utilisables sous Matlab. Nous nous contentons d’en
donner les plus courantes:

det(A) : renvoie le déterminant de la matrice carrée A.

eig(A) : renvoie les valeurs propres (eigenvalues) de la matrice carrée A.


[V,D] = EIG(A) renvoie une matrice diagonale D formée des valeurs propres de A et une
matrice V dont les vecteurs colonnes sont les vecteurs propres correspondant.

poly(A) : renvoie les coefficients du polynôme caractéristique associé à la matrice carrée A.


Attention à l’ordre dans lequel sont rangés les coefficients: le premier élément du vecteur est le
coefficient du monome de plus haut degré.
>> A = [1 2 3 ; 4 5 6 ; 7 8 0];

>> p = poly(A)
p =

1 -6 -72 -27

inv(A) : renvoie l’inverse de la matrice carrée A.

rank(A) : renvoie le rang de la matrice carrée A.

norm(A) : renvoie la norme 2 de la matrice A.


norm(A,2) : même chose que norm(A) .
norm(A,1) : norme 1 de la matrice A = max(sum(abs((A)))).
norm(A,inf) : norme infini de la matrice A = max(sum(abs((A’)))).
norm(A,’fro’) : norme de Frobenius de la matrice A = sqrt(sum(diag(A’*A))).

trace(A) : renvoie la trace de la matrice A.

Manipulation de matrices
Il existe des commandes Matlab permettant de manipuler facilement des matrices:

La commande diag

- permet de créer une matrice de diagonale fixée: si v est un vecteur de dimension n, A=diag(v) est
la matrice diagonale dont la diagonale est v

- permet d’extraire la diagonale d’une matrice: si A est une matrice, v=diag(A) est le vecteur
composé des éléments diagonaux de A.
>> A=eye(3)

A =

1 0 0

0 1 0

0 0 1

>> diag(A)

ans =

>> v=[1:3]

v =

1 2 3
>> diag(v)

ans =

1 0 0

0 2 0

0 0 3

La commande tril

- permet d’obtenir la partie triangulaire inférieure (l pour lower) d’une matrice.

La commande triu

- permet d’obtenir la partie triangulaire supérieure (u pour upper) d’une matrice.


>> A = [ 2 1 1 ; -1 2 1 ; -1 -1 2]

A =

2 1 1

-1 2 1

-1 -1 2

>> triu(A)

ans =

2 1 1

0 2 1

0 0 2

>> tril(A)

ans =

2 0 0

-1 2 0

-1 -1 2

Systèmes d’équations
Pour résoudre un système linéaire A x = b par la méthode de Gauss, il existe la commande Matlab \
(Backslash).

>> A=[1 2 ;3 4]; b=[1 1]’;

>> x= A\b
x =

-1

>> A*x

ans =

1
1

Programmer sous Matlab

Scripts et fonctions
Il est possible d’enregistrer une suite d’instructions dans un fichier (appelé un "M-file") et de les faire
exécuter par Matlab. Un tel fichier doit avoir une extension de la forme ".m" (d’où le nom M-file).

On distingue 2 type de M-file, les fichiers de scripts et les fichiers de fonctions.

Script

Un script est formé d’une suite d’instructions Matlab. Il est souvent utilisé comme "programme
principal" ou comme pour construire des données.

Si le script est écrit dans un fichier ayant pour nom nom.m on l’execute dans une session Matlab en
tapant
>> nom

Fonction

Outre les fonctions Matlab prédéfinies, l’utilisateur peut définir ses propres fonctions. Pour définir une
fonction Racines(N,z) qui calcule les racines N-ièmes du nombre complexe z, on créé un fichier
Racines.m qui contiendra les lignes suivantes:

function r = Racines(N,z)

% Calcule les racines N-ièmes du nombre complexe z


%
% Programmeur: S. Balac - octobre 1997
r=exp((log(z) + 2*pi*i *[1:N])/N);

Il es important de noter que la fonction s’appelant Racines doit être stockée dans un fichier s’appelant
Racines.m.

Le fichier doit impérativement commencer par le mot-clé function. Suit l’argument de sortie de la
fonction (ici le tableau r contenant les racines) , le symbole = , le nom de la fonction et enfin les
arguments d’entrée entre parenthèses.

Il peut y avoir plusieurs arguments de sortie. Pour avoir 2 arguments de sortie r et s, on écrit :

function [r,s] = Racines(N,z)

Les lignes précédées du symbole % sont des lignes de commentaire. Les lignes de commentaire situées
entre la ligne function ... et la 1ere ligne d’instructions seront affichées si l’on demande de l’aide
sur cette fonction:
>> help Racines

Calcule les racines N-ièmes du nombre complexe z

Programmeur: S. Balac - octobre 1997

Remarque: si le fichier ne commence par la ligne function .... , on a tout simplement écrit un script!

Toutes les variables définies à l’intérieur de la fonction sont des variables locales à cette fonction. La
communication avec des variables du programme principal (ou du "work-space") ou avec des variables
d’autres fonctions se fait uniquement par les variables d’entrée et sortie de la fonction.
Une alternative existe toutefois: il est possible de déclarer certaines variables comme des variables
globales. Une variable globale peut être partagée entre un programme principal et plusieurs fonctions
sans qu’il soit besoin de la spécifier parmi les variables d’entrée / sortie des différentes fonctions. On
déclare une variable globale grace au mot clé global. Par exemple pour déclarer une variable globale
numex on écrit

global numex

Cette déclaration doit ètre reprise dans les différentes fonctions utilisant numex comme variable globale.

L’appel d’une fonction utilisateur s’effectue de la même façon que l’appel de n’importe quelle fonction
Matlab:
>> z = 1;N=4;
>> r=Racines(N,z)

r =

0.0000 + 1.0000i -1.0000 + 0.0000i -0.0000 - 1.0000i 1.0000 - 0.0000i

On peut bien entendu écrire aussi r=Racines(4,1).


Boucles de contrôle
Les boucles de contrôle sous Matlab sont très proches de celles existant dans d’autres langages de
programmation.

Boucle FOR : parcours d’un intervalle

syntaxe

for variable = borne_inf : borne_sup


instructions
..........
instructions
end

exemple: créer le vecteur [1 2 4 8 .... 2^10]


>> x=[];

>> for n=0:10


x=[x 2^n];
end

On peut utiliser un incrément (pas) autre que 1 (valeur par défaut). La syntaxe est : borne_inf : pas :
borne_sup.
Les bornes ne sont pas nécessairement des entiers. Le pas peut être négatif. Attention a bien gérer la
borne supérieure!

Voici un exemple (idiot) venant illustrer ces possibilités:


>> for r=1.1:-0.1:0.75
r
end

r =

1.1000

r =

r =

0.9000

r =

0.8000
Boucle WHILE : tant que . . . faire

syntaxe

while expression
instructions
..........
instructions
end

exemple: calculer le plus petit entier n tel que 2^n soit supérieur à un réel a donné.
>> a=1998;n=1;
>> while 2^n < a
n=n+1;
end
>> n

L’instruction conditionnée IF:

Il en existe plusieurs formes dont la plus simple est:

syntaxe

if expression logique
instructions
.........
instructions
end

La séquence d’instructions intérieure n’est executée que si expression logique est vrai (=1).
Noter que l’instruction if se termine par end et non pas endif et qu’il n’y a pas de mot clé then.

Il existe bien entendu également une séquence conditionnée sous forme d’alternatives:

syntaxe

if expression logique
instructions
else
instructions
end

Enfin, il est possible d’effectuer un choix en cascade

syntaxe
if expression logique
instructions
elseif expression logique
instructions
elseif expression logique
instructions
...........
elseif expression logique
instructions
end

Interruption d’une boucle de contrôle

Il est possible de provoquer une sortie prématurée d’une boucle de contrôle.

L’instruction break permet de sortir d’une boucle FOR ou d’une boucle WHILE. L’exécution se
poursuit alors séquentiellement à partir de l’instruction suivant le "end" fermant la boucle.
Attention: en cas de boucles imbriquées, on interompt seulement l’execution de la boucle
intérieure contenant l’instruction break.
L’instruction return provoque un retour au programme appelant (ou au clavier).

Graphisme

Les possibilités graphiques de Matlab sont nombreuses.

Une instruction graphique ouvre une fenêtre dans laquelle est affiché le résultat de cette commande.
Par défaut, une nouvelle instruction graphique sera affichée dans la même fenêtre et écrasera la figure
précédente.
Pour avoir une nouvelle fenêtre l’instruction est:
>> figure

Chaque fenêtre se voit affecter un numéro. Pour fermer la 15 eme fenêtre, on executera
>> close(15)

On peut souhaiter afficher deux courbes sur une même figure. Pour cela, après la première instruction
graphique on tapera
>> hold on

puis on executera la seconde instruction graphique.

Il est possible de décomposer une fenêtre en sous-fenêtre et d’afficher une figure différente sur chacune
de ces sous-fenêtre.
La commande le permettant est subplot(m,n,i) où m est le nombre de sous-fenêtres verticalement et n
est le nombre de sous-fenêtres horizontalement. Le troisième paramètre i sert à spécifier dans quelle
sous-fenêtre doit s’effectuer l’affichage. Les fenêtres sont numérotées de gauche à droite et de haut en
bas.

>> subplot(1,2,1), fplot(’cos’,[0 2*pi])


>> subplot(1,2,2), fplot(’sin’,[0 2*pi])

Graphisme 2D
Tracer le graphe d’une fonction

La commande fplot permet de tracer une fonction prédéfinie ou une fonction utilisateur.

La syntaxe est:

fplot(’nom_f’, [x_min , x_max])

où nom_f est le nom de la fonction et [x_min , x_max] est l’intervalle en abscisses.

>> fplot(’sin’,[0 4*pi])

Pour tracer la fonction f1 définie dans le fichier f1.m:


function y=f1(x)

y=sin(x);

la commande est
>> fplot(’f1’,[0 4*pi])

La commande plot

La commande plot(X,Y) permet de tracer le vecteur X en abscisse contre le vecteur Y en ordonnées.


Les vecteurs X et Y doivent impérativement être de même dimension.

Un exemple :
>> x=[0:0.1:4*pi]; y = sin(x);
>> plot(x,y)

Un autre exemple:
>> ind=0;
>> for n=10:5:100
A=rand(n); b=rand(n,1);
ind=ind+1; flops(0), A\b; cout(ind)=flops;
end
>> plot([10:5:100],cout)

On voit apparaitre la courbe donnant le nombre d’opérations élémentaires (flops) nécessaire pour
résoudre un système linéaire par la méthode de Gauss en fonction de la dimension du système.
Ce coût se comporte en O(n^3). Pour le vérifier aisément, la commande loglog est utile.
La commande loglog

La commande loglog(X,Y) affiche le vecteur log(X) en abscisse contre le vecteur log(Y) en ordonnées.
Elle s’utilise de la même manière que la commande plot.

>> loglog([10:5:100],cout)

Il ne reste plus qu’à vérifier que la pente vaut bien 3.

Les options

Une alternative à la commande hold on permettant de superposer plusieurs courbes sur une même figure
consiste à spécifier plusieurs tableaux X1, Y1, X2, Y2 ... dans la commande plot (ou loglog; on peut
aussi spécifier plusieurs fonctions lors de l’appel à fplot).
La syntaxe est :

plot(X1, Y1, X2, Y2)

Il est bien entendu possible de spécifier de quelle couleur on veut que soit tracé une courbe! On peut
aussi spécifier quel doit être le style de trait.
La syntaxe est :

plot(X1, Y1,opt)

où opt est une chaine de 2 caractères : opt = ’cs’ avec c désignant la couleur du trait et s le style de trait.
Les possibilités sont les suivantes:
couleur c =
style s=
La commande grid permet d’obtenir quadrillage de la figure.

Graphisme 3D

Voir la cocumentation !!!

Légender une figure


Il est possible (et recommandé) de mettre une légende à une figure.
La commade xlabel(’ légende ’) permet de mettre le texte légende sous l’axe des abscisses. Les
commandes ylabel et zlabel font de même pour l’axe des ordonnées et l’axe z.
La commande title(’ légende ’) permet de donner le titre légende à la figure.
On peut aussi écrire un texte donné à une position précise sur la figure grace à la commande
text(posx,posy,’ légende ’) où posx et posy donnent les coordonnées du point (dans le système associé
aux axes) où doit débuter le texte.

Quelques fonctions utiles


Nombre d’opérations

La commande flops permet de connaitre le nombre d’opérations effectuées par Matlab. La commande
flops(0) remet le compteur à zero. En général, s’utilise de la manière suivante: flops(0), ... (commandes)
...; flops . On obtient alors le nombre d’oprérations qui ont été nécessaire pour effectuer les instructions
mises entre flops(0) et flops.

>> n=100; A=rand(n); b=rand(n,1); flops(0), A\b ; flops

ans =

731026

Temps de calcul

Les commandes tic et toc servent à chronométrer une commande. Avec tic, ... (commandes) ..., toc , on
obtient le temp écoulé entre les commandes tic et toc.
Exemple: comparaison des temps de calcul du produit pour n allant de 2 à 10000 de (1 - 1/n) en utilisant
(1 - une boucle ; (2 - la commande vectorielle équivalente.

>> tic, p=1; for n=2:10000; p=p*(1-1/n); end, toc


elapsed_time =

0.3710
>> tic, pv=prod(1-1./[2:10000]); toc
elapsed_time =

0.0155

Remarque: si l’on répète ces commandes pluiseurs fois, on n’obtient pas nécessairement des résultats
identiques car tic et toc mesurent le temps total qui dépend du chargement de la machine. Si l’on veut
calculer le temps de calcul effectif, on utilise la commande cputime qui rend le temps de calcul depuis
le lancement de Matlab. La syntaxe est: t = cputime; ... (commandes) ..., cputime - t .

Plus d’informations

On peut utiliser la commande doc qui donne accès à la documentation en ligne par l’intermédiaire d’une
fenêtre MOSAIC.

Documentation Matlab sur le Web:


Matlab Tutorial (University of Florida)

Dernière modification : 24 avril 1998

(c) Copyright 1998 Stéphane Balac - IRMAR - Université de Rennes 1