Introduction à Matlab
11 mars 2002

Introduction

Matlab est un langage de programmation de haut niveau pour le calcul numérique. Il est particulièrement performant pour le calcul matriciel, car sa structure de données est basée sur les matrices, et il dispose de possibilités d'affichage très riches. Il s'agit d'un langage à interpréter, ce qui permet un développement très rapide, mais qui a l'inconvénient de ne pas avoir un langage d'exécution aussi rapide qu'un langage comme C.

Lancer Matlab

Créez un répertoire nommé matlab pour stocker vos futurs fichiers. Pour lancer Matlab, selectionner MATLAB dans LOGICIELS COMMUNS|MATHEMATIQUES. Pour quitter Matlab, tapez quit ou choisissez FILE|EXIT.

Ouvrez un nouveau fichier et sauvegardez-le sous tp1 (par exemple). Ecrivez toutes vos commandes dans ce fichier et pour les executer, utilisez soit la commande File|Execute Script, soit copier-coller dans la fenêtre principale. Ainsi, vous pouvez modifier des commandes erronées ou les reutiliser ultérieurement.
On peut aussi essayer quelques commandes dans la fenêtre principale avant de les mettre dans le fichier tp1.m.

Pour obtenir de l'aide, tapez

 help "commande"
par exemple:
 help help
ou encore :
 help whos
Essayez toutes le commandes qui vous sont expliquées dans ce qui suit en choisissant d'autres valeurs.

Commandes de base

Pour créer et/ou lui attribuer une valeur, tapez variable = valeur, par exemple :
>>a=3

a =

     3

>>
Pour supprimer l'affichage du résultat, terminez la commande avec un ; (point virgule), par exemple:
>>b=a+1;
>>
Pour afficher la valeur attribuée à une variable, tapez le nom de celle-ci:
>>b

b =

     4
>>
Pour écrire plusieurs commandes, séparez-les par un , ou un ;
>>c=0.5;d=c*a,c

d =

    1.5000


c =

    0.5000

>>
Si aucune variable n'est associée à une expression, le résultat est stocké d'office dans une variable nommée ans :
>>c+5

ans =

    5.5000

>>

Certaines variables sont prédéfinies:
>>pi

ans =

    3.1416

>>
Matlab fait la distinction entre majuscules et minuscules l'état interne de votre session Matlab est donné par un ensemble de variables que vous créez et modifiez au cours de la session. Vous pouvez afficher cet ensemble à l'aide des commandes
who, whos
ou par le bouton correspondant dans le menu. Pour effacer une variable, utilisez la commande
clear "variable" ou clear all .

Vecteurs et matrices

Vecteurs
La structure de données principale de Matlab est le tableau à une ou plusieurs dimensions. Pour créer un vecteur ligne, on utilise les crochets, et on sépare les composantes par des espaces ou des virgules:
>>A=[1 2 3 4 5]

A =

     1     2     3     4     5

>>B =[6,7,8]

     6     7     8

>>
Une commande de la forme C=[a:h:b] crée un vecteur ligne dont les composantes sont
a a+h a+2h..a+nha+nh<=b mais a+(n+1)h>b:
>>C=[0:1:10]

C =

     0     1     2     3     4     5     6     7     8     9    10

>>D=[1:0.3:2]

D =

    1.0000    1.3000    1.6000    1.9000

>>
On peut calculer avec les vecteurs comme avec les scalaires:
>>2*A

ans =

     2     4     6     8    10

>>A+2

ans =

     3     4     5     6     7

>>D=[-1 3 4 -2 0]

D =

    -1     3     4    -2     0

>>A-2*D

ans =

     3    -4    -5     8     5

>>
Notez le comportement particulier de la somme d'un scalaire et un vecteur: cela revient à ajouter le scalaire à chaque composante du vecteur. Par contre, on n'a pas le droit d'ajouter des vecteurs de dimensions différentes:
>>A+B
??? Error using ==> +
Matrix dimensions must agree.
>>
Pour accéder à un ou plusieurs éléments d'un vecteur, utilisez les paranthèses:
>>B(1),A(1:3)

ans =

     6


ans =

     1     2     3

>>C

C =

     0     1     2     3     4     5     6     7     8     9    10

>>C(2*[2:4])

ans =

     3     5     7

>>
Notez que dans la dernière commande [2:4] équivaut à 2 3 4 et 2*[2:4] équivaut à 4 6 8. Notez aussi que les indices d'un tableau commencent toujours avec un 1.
Pour modifier un sous-ensemble d'éléments d'un vecteur on utilise:
>>A(1)=0

A =

     0     2     3     4     5

>>A(2:5)=[4 3 2 1]

A =

     0     4     3     2     1

>>A([1 3 5])=2

A =

     2     4     2     2     2

>>
Matrices
Une matrice peut être créée en donnant la liste de ses lignes, séparées par ;. Dans chaque ligne, on peut séparer les coefficients par des espaces ou par des virgules:
>>F1=[1 2 3;4 5 6]

F1 =

     1     2     3
     4     5     6

>>F2=F1+2

F2 =

     3     4     5
     6     7     8

>>F3=[1,2;3,4]

F3 =

     1     2
     3     4

>>3*F3

ans =

     3     6
     9    12

>>
Notez ici aussi que d'ajouter un scalaire à une matrice revient à ajouter le scalaire à chaque coefficient de la matrice. On peut multiplier les matrices, à condition que le produit soit défini (nombre des colonnes de la première=nombre de lignes de la deuxième):
>>F3*F1

ans =

     9    12    15
    19    26    33

>>F1*F2
??? Error using ==> *
Inner matrix dimensions must agree.

>>
L'apostrophe dénote la transposée d'une matrice:
>>F2'

ans =

     3     6
     4     7
     5     8

>>F1*F2'

ans =

    26    44
    62   107

>>
On peut aussi faire le produit de matrices de même taille élément par élément par l'opération dénotée par .* (produit de Hadamard):
>>F1

F1 =

     1     2     3
     4     5     6

>>F2

F2 =

     3     4     5
     6     7     8

>>F1.*F2

ans =

     3     8    15
    24    35    48

>>
On peut ajouter des colonnes ou des lignes à une matrice:
>>[F1;7 8 9]

ans =

     1     2     3
     4     5     6
     7     8     9

>>[F1,[7;8]]

ans =

     1     2     3     7
     4     5     6     8

>>

Exercice 1

Calculez le produit scalaire des vecteurs
A=[1 2 3 4 5 6 7] et B=[6 7 8]; B doit être considéré comme un vecteur à 7 composantes en lui ajoutant le nombre qu'il faut de coordonnées égales à zéro.

On accède aux éléments d'une matrice par:

>>F1(1,2)

ans =

     2

>>F1(2:4)

ans =

     4     2     5
Pour voir la 3-ème colonne et la deuxième ligne:
>>F1(:,3)

ans =

     3
     6

>>F1(2,:)

ans =

     4     5     6

>>
F(i) est le i-ème coefficient de la matrice F, où ces coefficients sont numérotés colonne par colonne, de haut en bas et de gauche à droite. Par exemple:
>>F4=[1 2 3 4;5 6 7 8; 9 10 11 12]

F4 =

     1     2     3     4
     5     6     7     8
     9    10    11    12
>>F4(5)

ans =

     6

>>F4(2*[1:6])

ans =

     5     2    10     7     4    12

>>
Ci-dessus on a demndé les coefficients numérotés 2*[1:6], c'est-à-dire 2 4 6 8 10 12.

Les 3 premières colonnes, puis les 2 premières lignes:

>>F4(:,1:3)

ans =

     1     2     3
     5     6     7
     9    10    11
>>F4(1:2,:)

ans =

     1     2     3     4
     5     6     7     8

>>

Il existe des fonctions pour créér des matrices particulières:

 
>>eye(3)

ans =

     1     0     0
     0     1     0
     0     0     1

>>ones(3,2)

ans =

     1     1
     1     1
     1     1

>>zeros(2,3)

ans =

     0     0     0
     0     0     0

>>
Pour modifier les éléments d'une matrice, on utilise:
>>F4(2,3)=0

F4 =

     1     2     3     4
     5     6     0     8
     9    10    11    12

>>F4(3)=0

F4 =

     1     2     3     4
     5     6     0     8
     0    10    11    12

>>F4(2*[1:6])=0

F4 =

     1     0     3     0
     0     6     0     8
     0     0    11     0

>>

Exercice 2

Créez une matrice de taille 9x9 représentant un (faux) échiquier (0 pour noir, 1 pour blanc). Commencez par créer une matrice n'ayant que des 1. Modifiez ensuite un sous-ensemble d'éléments (par une seule commande).
Ensuite, crééz un vrai échiquier 8x8 à partir de la matrice précédente.

Les tableaux multi-dimensionnels sont créés , modifiés et on y accède de la même manière; par exemple:

>>K=ones(2,2,2)

K(:,:,1) =

     1     1
     1     1


K(:,:,2) =

     1     1
     1     1

>>
Les fonctions
 sin, cos, tan, exp, tanh, . . .
peuvent être directement appliquées à tous les éléments d'un tableau; le résultat est un tableau contenant les valeurs prises par ces fonctions sur le coefficient du tableau de départ.
>>F3

F3 =

     1     2
     3     0

>>exp(F3)

ans =

    2.7183    7.3891
   20.0855       1

>>

Exercice 3

Calculez la liste des valeurs prises par la fonction
x^2+sin(x)-x/exp(x)
en donnant à x toutes les valeurs de -2 à 2 espacées de 0.1.

Graphiques

Une nouvelle figure est créée par la commande
figure
Si A et B sont des vecteurs de même dimension=n, la commande
plot(A,B)
dessine les segments de droite joignant les points de coordonnées (A(i),B(i)), pour i=1,...,n-1. Par exemple:
>>A=[1 2 3 4]

A =

     1     2     3     4

>>B=[1 0 1 -1]

B =

     1     0     1    -1

>>plot(A,B)
donne comme résultat: image pas trouvée

On peut spécifier le style d'affichage:

>>plot(A,B,'g*')
dessine des * verts (g=green) aux points (A(i),B(i)), sans les joindre par des segments. Tapez help plot pour voir d'autres styles.

Pour avoir plusieurs graphiques sur une même figure:

hold on 
plot(C,D)
hold off
Pour effacer une figure:
clf
Pour la fermer:
close
Pour tracer le graphe de la fonction sin(x), on peut par exemple écrire:
>>A=[0:0.01:2*pi];plot(A,sin(A))
>>

Exercice 4

Dessiner le graphe des fonctions sin(x) et cos(x), pour x entre -2*pi et 2*pi sur une même figure.
La commande
A=[0:2*pi/3:2*pi];plot(sin(A),cos(A)),axis equal off
dessine un triangle équilatéral; pourquoi?. Notez que l'option
axis equal off
demande que les deux axes soient à la même échelle, et qu'elles ne soient pas dessinées.

Exercice 5

  • Dessinez un hexagone régulier.
  • Trouvez deux vecteurs A et B tels que la commande plot(A,B), axis equal off dessine le polygone suivant:
    pas d'image
  • Dessinez un "cercle".

    La commande

    imagesc(A)
    
    où A est une matrice de taille mxn , dessine un rectangle partagée en mxn rectangles, et la couleur du rectangle (i,j) dependra de la valeur de A(i,j).
    Essayez par exemple :
    >>close
    >>A=[1 2 3;4 5 6; 7 8 9]
    
    A =
    
         1     2     3
         4     5     6
         7     8     9
    
    >>imagesc(A)
    
    Si on choisit l'option
    colormap(cool)
    
    les couleurs varient entre bleu, pour la plus petite valeur des coefficients, et vert, pour la plus grande valeurs. Par exemple
    X=[-1:0.05:1];
    Y=[-1:0.05:1];
    colormap(winter);
    imagesc(X'*Y)
    axis equal off
    
    donne pour résultat:

    pas d'image

    Expliquez pourquoi!


    Exercice 6

    Afficher l'échiquier de l'exercice 2 en noir et blanc.


    Pour sauvegarder les variables de votre session Matlab tapez
    >>save tp1
    
    dans la fenêtre de commandes. Pour les retrouver pendant une autre session, tapez:
    load tp1