Mat Lab 2
Mat Lab 2
Mat Lab 2
Introduction à MATLAB
0.5
8
-0.5
6
10
4
5 2
0
0 -2
-4
-5
-6
-10 -8
André Casadevall
oct 2002
p. 2 AJ.C - oct 2002
Table des matières
1 MATLAB 7
1.1 Qu’est ce que MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Une session MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.1 Lancer, quitter MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.2 Fonctions et commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Aide en ligne - help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Interaction avec le système d’exploitation . . . . . . . . . . . . . . . . . . . . 9
5 Courbes et surfaces 51
5.1 Fenêtres graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.1 Création d’une fenêtre - fonctions figure et gcf . . . . . . . . . . . . . . . . 51
5.1.2 Attributs d’une fenêtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2 Courbes du plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.1 La fonction plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.2 Tracer dans une ou plusieurs fenêtres . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.3 La commande print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.2.4 Courbes paramétriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2.5 Personnalisation des axes et de la plotting-box . . . . . . . . . . . . . . . . . 57
5.2.6 Autres fonctions de tracé de courbes planes . . . . . . . . . . . . . . . . . . . 60
5.3 Courbes de l’espace - Fonction plot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4 Surfaces de l’espace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4.1 Modélisation du domaine [x0 , x1 ] × [y0 , y1 ] - fonction meshgrid . . . . . . . . 61
5.4.2 Tracé de la surface - fonctions mesh et surf . . . . . . . . . . . . . . . . . . 61
5.4.3 Surfaces et courbes de niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
MATLAB
tpMatlab 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 (MATLABPATH), soit en
utilisant l’item Set Path du menu File, soit en tapant la commande addpath suivie du chemin
d’accès au repertoire de travail.
1.2.1 Lancer, quitter MATLAB
Dans l’environnement unix, on tape la commande matlab sur la ligne de commande active ;
dans les environnements Windows ou MacOs, il suffit de cliquer sur l’icône de l’application.
La fenêtre de commande de MATLAB s’ouvre et on entre alors les commandes ou les expressions
à évaluer à droite du prompt >>. Le processus d’évaluation est déclenché par la frappe de la touche
<enter>.
A chaque début session, l’utilisateur indiquera à MATLAB que le répertoire tpMatlab défini
précédemment est le répertoire de travail de la session en tapant la commande cd suivie du chemin
d’accès au répertoire tpMatlab.
On quitte MATLAB en tapant quit dans la fenêtre de commande ou en sélectionnant quit dans
le menu File de la barre de menu pour les versions Windows ou MacOs.
1.2.2 Fonctions et commandes
Certaines fonctions de MATLAB ne calculent pas de valeur numérique ou vectorielle, mais ef-
fectuent une action sur l’environnement de la session en cours. Ces fonctions sont alors appelées
commandes. Elles sont caractérisées par le fait que leurs arguments (lorsqu’ils existent) ne sont
pas placés entre parenthèses. Les autres fonctions se comportent de façon assez semblable aux fonc-
tions mathématiques et la valeur qu’elles calculent peut être affectée à une variable.
Dans de nombreux cas, fonctions ou commandes peuvent être appelées avec des arguments différents
soit par leur nombre, soit par leur nature (nombre, vecteur, matrice, . . . ). Le traitement effectué
dépend alors du nombre et de la nature des arguments. Par exemple, nous verrons plus loin que la
fonction diag appelée avec une matrice pour argument retourne le vecteur constitué par sa diag-
onale principale ou vecteur diagonal. Lorsque cette même fonction est appelée avec un vecteur
pour argument, elle retourne la matrice diagonale dont le vecteur-diagonal est le vecteur donné.
Aussi une fonction ou une commande n’est pas caractérisée par son seul nom, mais par sa signature
c’est à dire l’ensemble constitué de son nom et de la liste de ses paramètres.
1.2.3 Aide en ligne - help
MATLAB comporte un très grand nombre d’opérateurs, de commandes et de fonctions. Tous ne
seront pas décrits dans ce document d’autant qu’une aide en ligne efficace peut être utilisée. On
peut taper les commandes suivantes :
– help permet d’obtenir l’aide de l’aide et donne une liste thématique ;
– help nom de fonction donne la définition de la fonction désignée et des exemples d’utilisation ;
– lookfor sujet donne une liste des rubriques de l’aide en ligne en relation avec le sujet indiqué.
Exemple 1.2.1 :
>>lookfor min
minus.m: %- Minus.
uminus.m: %- Unary minus.
REALMIN Smallest positive floating point number.
FLOOR Round towards minus infinity.
MIN Smallest component.
FMIN Minimize function of one variable.
FMINS Minimize function of several variables.
Examples
fmin(’cos’,3,4) computes pi to a few decimal places.
fmin(’cos’,3,4,[1,1.e-12]) displays the steps taken
to compute pi to about 12 decimal places.
un objet possède en plus un certain comportement : un tableau Excel bien que structuré en lignes
et colonnes comme une matrice, n’est pas une matrice, ou encore un polynôme de degré trois, n’est
pas un vecteur de R4
La famille des objets caractérisés par le même type de structure et les même fonctionnalités con-
stitue une classe.
La classe fondamentale de MATLAB est la classe double qui modélise les tableaux (double array)
de dimension un ou deux de nombres réels ou complexes (conformes à la norme IEEE), Les nom-
bres réels ou complexes étant considérés eux-mêmes comme des tableaux 1 × 1. Cette
classe permet également de travailler mais de façon moins naturelle avec des tableaux de dimension
supérieure à deux.
Les classes suivantes, sont moins fréquemment utilisées :
– La classe char modélise les chaı̂nes de caractères (char array), un caractère unique étant
une chaı̂ne de longueur un.
– La classe sparse modélise les matrices creuses (i.e. dont la plupart des éléments sont nuls)
réelles ou complexes.
A partir de la version 5, MATLAB a proposé des structures complémentaires souvent utilisées dans
les objets prédéfinis de MATLAB.
– La classe cell modélise les tableaux de “cellules” ou cell array qui sont des sortes de
tableaux dont les éléments ou cellules (cells) peuvent être de nature différente, nombres,
tableaux, chaı̂nes de caractères de longueurs différentes, . . . .
– La classe struct modélise les tableaux de “structures”. Ces “structures” sont des structure de
données assez semblables aux struct du C, dont les composants ou champs, sont accessibles
non pas par un ou plusieurs indices comme dans le cas des tableaux, mais par une notation
pointée comme dans client.name, permettant au programmeur de définir ces propres objets
et ses propres classes.
!!! Remarque :
MATLAB ne propose ni valeurs prédéfinies true ou false ni classe pour modéliser
les booléens ; false est représenté par la valeur 0, true est représentée par 1 ou par
extension, par toute valeur non nulle.
Exemple 2.2.1 :
Les tableaux :
1
1 2 0 0
2
1 2 3 4 0 2 3 1
3
0 0 2 2
4
s’écrivent sous la forme [1 2 3 4 ] [1; 2; 3; 4 ] [1 2 0 0 ; 0 2 3 1 ; 0 0 2 2 ] :
>> [1 2 3 4 ]
ans =
1 2 3 4
>> [1; 2; 3; 4 ]
ans =
1
2
3
4
>> [1 2 0 0 ; 0 2 3 1 ; 0 0 2 2 ]
ans =
1 2 0 0
0 2 3 1
0 0 2 2
Toutes les lignes doivent contenir le même nombre d’éléments :
>> [1 2 ; 1 2 3]
??? Number of elements in each row must be the same.
Dans la suite, on appelera :
– vecteur un tableau de format (n, 1) i.e. ne comportant qu’une seule colonne ;
– liste ou vecteur-ligne un tableau de format (1, n) i.e. ne comportant qu’une seule ligne.
2.2.2 Caractères et chaı̂nes de caractères
On écrit les caractères et les chaı̂nes de caractères, entre apostrophes : ’a’, ’toto’. ml
considère les caractères comme des chaı̂nes de caractères de longueur un et identifie chaı̂nes de
caractères et liste de caractères.
Exemple 2.2.2 :
Le tableau de caractères [’a’ ’b’ ’c’ ’d’ ’e’] est identique à la chaı̂nes de caractères
[’abcde’] :
>>[’a’ ’b’ ’c’ ’d’ ’e’]
ans =
abcde
Mieux ’abcde’ ; [’abc’ ’de’] est identique à ’abcde’ :
>>[’abc’ ’de’]
ans =
abcde
Cet exemple donne un idée du rôle des crochets [ ]. Les crochets sont le symbole de l’opérateur
de concaténation :
– concaténation ”en ligne” lorsque le séparateur est un espace ou une virgule ;
– concaténation ”en colonne” lorsque le séparateur est un point-virgule comme dans les tableaux
de nombres (il est alors nécessaire que les listes de nombres ou de caractères ainsi concaténées
possèdent le même nombre d’éléments).
Exemple 2.2.3 :
Le tableau de caractères [’a’ ’b’ ’c’ ’d’ ’e’] est identique à la chaı̂nes de caractères
[’abcde’] :
>>[’abc’ ; ’abcd’]
??? All rows in the bracketed expression must have the same
number of columns.
La manipulation des ces objets (sauf lorsqu’on on se limite à des composants qui sont des nombres
ou des chaı̂nes de caractères) est un peu plus délicate que celle des tableaux usuels et sera examinée
dans un prochain chapitre.
2.3 Variables
Une caractéristique de MATLAB est que les variables n’ont pas à être déclarées, leur nature se
déduisant automatiquement de l’objet qui leur est affecté (cf. exemple 2.3.6 - section 2.3.3). Par
abus de langage on dira “valeur d’une variable” alors qu’il faudrait parler de l’objet associé à la
variable.
2.3.1 Identificateurs
Les règles de dénomination des variables sont très classiques :
– un identificateur débute par une lettre, suivie de lettres, de chiffres ou du caractère souligné
;
– sa longueur est inférieure ou égale à 31 caractères ;
– les majuscules sont distinctes des minuscules.
Voici quelques identificateurs prédéfinis :
– ans : Résultat de la dernière évaluation
– pi : 3,416..
– eps : inf{ ≥ 0 tels que 1 < 1 + }
>> a = ’abc’
a =
abc
L’exemple ci-dessus montre bien que dans MATLAB les variables ne sont ni déclarées ni typées.
2.3.3 Espace de travail
L’ensemble des variables et les objets qui leur sont associées constitue l’espace de travail ou
workspace de la session en cours. Le contenu de cet espace de travail va se modifier tout au long
du déroulement de la session et plusieurs commandes ou fonctions permettent de le gérer de façon
efficace.
Les commande who et whos
Ces commandes (le nom d’une commande est contrairement aux fonctions, suivi par la liste non
parenthèsée du ou des paramètres) donnent la liste des variables composant l’espace de travail. La
commande who donne la liste des variables présentes dans l’espace de travail. La commande whos
retourne une information plus complète comportant pour chaque variable, la dimension du tableau
qui lui est associé, la quantité de mémoire utilisée et la classe à laquelle il appartient.
Exemple 2.3.2 :
On définit les variables a, b et c :
>> a = 2 ; b = ’azerty’; c = [1 2 3 ; 5 3 4] ;
% la partie de la ligne qui suit le symbole % est un commentaire
% les points-virgules inhibent l’affichage de la valeur des variables
>> who
Your variables are :
a b c
La commande whos donne l’information plus complète suivante :
>> whos
Name Size Bytes Class
a 1x1 8 double array
b 1x6 12 char array
c 2x3 48 double array
Grand total is 13 elements using 68 bytes
leaving 14918672 bytes of memory free
On peut également appliquer whos avec pour argument une ou plusieurs variables :
>> whos b c
Name Size Bytes Class
b 1x6 12 char array Grand total is 12 elements using 60 bytes
c 2x3 48 double array
leaving 14918960 bytes of memory free.
La fonction size
La fonction size retourne le couple (nl,nc) formé du nombre de lignes nl et du nombre de
colonnes nc du tableau associé à la variable donnée comme comme argument.
Exemple 2.3.3 :
On suppose que l’environnement de travail est constitué des trois variables a, b et c de l’exemple
précédent. La fonction size produit l’affichage suivant :
>> size(a)
ans =
1 1
>> size(b)
ans =
1 6
Pour accéder plus facilement au nombre de lignes et au nombre de colonnes, on peut affecter la
valeur retournée par size à un tableau à deux éléments [nl, nc] :
>> size(c)
>> [nl, nc] = size(c)
nl =
2
nc =
3
Enfin size( ,1) et size( ,2) permettent l’accès direct au nombre de lignes et au nombre de
colonnes :
>> size(c,1)
ans =
2
>> size(c,2)
ans =
3
La fonction class
La fonction class retourne le nom de la classe à laquelle appartient la variable donné comme
comme argument.
Exemple 2.3.4 :
Avec le même espace de travail que dans l’exemple précédent, la fonction class produit l’affichage
suivant :
>> ca = class(a)
ca =
double
>> cb = class(b)
cb =
char
Exemple 2.3.5 :
Cet exemple illustre les effets de save, load et clear. Tout d’abord on définit trois variables a, b
et t ; la fonction eye(n) crée la matrice identité d’ordre n.
>> a = 1 ; b = 2.5 ; t = eye(3)
t =
1 0 0
0 1 0
0 0 1
>> save a b
>> clear a b
L’espace de travail est enregistré dans le fichier toto.mat, puis toutes les variables de l’espace de
travail sont supprimées :
Exemple 2.4.2 :
>> l2 = 1 : 4
l2 =
1 2 3 4
(le pas par défaut vaut 1)
>> l3 = 1 : 5.6
l3 =
1 2 3 4 5
(puisque 5.0000 + 1 est strictement supérieur à 5.6)
3
>> v3 = (1.5 : 0.3 : 2.5)’
v3 =
1.5000
1.8000
2.1000
2.4000
On remarquera que les parenthèses sont nécessaires pour délimiter le constructeur de liste.
2.4.3 Nombre d’éléments d’une liste ou d’un vecteur - length
La fonction size avec pour argument une liste ou un vecteur retourne (comme pour tous les
tableaux) le nombre de lignes et le nombre de colonnes de la liste ou du vecteur. Le nombre de
ligne d’une liste est bien évidemment un. La même remarque vaut pour le nombre de colonnes d’un
vecteur. Aussi, pour les listes et les vecteurs on utilise de préférence la fonction length qui retourne
le nombre d’éléments ou longueur de la liste ou du vecteur.
Exemple 2.4.6 :
>> l = [1 2 3 4] ; length(l)
ans =
4
>> v = [5 6 7 8 9]’ ; length(v)
ans =
5
!!! Remarque :
L’exemple précédent montre que l’on peut écrire sur la même ligne plusieurs expressions à la
condition de les séparer par une virgule ou un point-virgule. La différence entre ces deux séparateurs
est que le résultat de l’évaluation d’une expression suivie d’un point-virgule n’est pas
affiché.
Cette notion de longueur synonyme de nombre d’éléments ne doit pas être confondue avec la notion
mathématique de norme vectorielle. Les fonctions suivantes permettent de calculer les normes
usuelles d’un vecteur (ou d’un vecteur-ligne) de Rn :
p
– norm(v,p) = |vk |1/p .
k=1
– norm(v) = norm(v,2)
– norm(v,inf) = max |vk |.
k
Exemple 2.4.7 :
>> l = [1 1 1 1] ; v =l’ ; norm(v)
ans =
2
>> norm(l)
ans =
2
Exemple 2.4.8 :
>> s = [1 3 5] ; s(1)
ans =
1
>> s(3)
ans =
5
L’accès en lecture à un élément d’indice négatif ou dont la valeur est strictement
supérieure à la longueur de la liste (ou du vecteur), conduit à une erreur :
Exemple 2.4.9 :
Pour la même liste s qu’à l’exemple précédent :
>> s(4)
??? Index exceeds matrix dimensions.
Par contre, il est possible d’affecter une valeur à un élément d’une liste ou d’un vecteur
dont l’indice dépasse la longueur de la liste ou du vecteur. Comme le montre l’exemple
suivant, les éléments dont l’indice est compris entre la longueur de la la liste (ou du vecteur) et
l’indice donné sont affectés de la valeur 0. La longueur de la liste (ou du vecteur) est alors modifiée
en conséquence.
Exemple 2.4.10 :
Toujours avec la liste s de l’exemple précédent :
>> s = [1 3 5] ; length(s)
ans =
3
>>s(6) = 6 ; s
s =
1 3 5 0 0 6
>> length(s)
ans =
6
2.4.5 Extraction de sous-listes ou de sous-vecteurs
Soient s une liste (ou un vecteur) non-vide et l une liste d’entiers dont la valeur est
comprise entre 1 et la longueur length(s) de la liste (ou du vecteur). Alors s(l) est la
liste (ou le vecteur) formé par les éléments de s dont l’indice appartient à l.
Exemple 2.4.11 :
>>s = [1 3 5 0 0 6] ; l = [1 3 5] ; s1 = s(l)
s1 =
1 5 0
2.5 Tableaux
2.5.1 Construction de tableaux
Valeurs littérales de type tableau
On a déjà vu que pour définir la valeur d’un tableau (sauf pour les tableaux d’ordre 1), il suffit
de concaténer “en colonne” (séparateur ;) des listes de nombres de même longueur :
Exemple 2.5.1 :
Le tableau
1 2 0 0
0 2 3 1
0 0 2 1
est défini par :
>>t = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 1]
t =
1 2 0 0
0 2 3 1
0 0 2 1
Concatenation de tableaux - [ ]
L’opérateur [ ] permet la concaténation de tableaux :
– Si les tableaux tk possèdent le même nombre de lignes l’expression [t1 , t2 , · · · , tp ] crée un
tableau :
– qui a le même nombre de lignes que les tableaux composants ;
– dont le nombre de colonnes est la somme des nombres de colonnes de chacun des tableaux
composants ;
– qui est obtenu en concaténant “à droite” les tableaux composants.
On peut dans l’expression ci-dessus remplacer les virgules par des espaces.
– Si les tableaux tk ont le même nombre de colonnes l’expression [t1 ; t2 ; · · · ; tp ] crée un
tableau :
– qui a le même nombre de colonnes que les tableaux composants ;
– dont le nombre de lignes est la somme des nombres de lignes de chacun des tableaux
composants ;
– qui est obtenu en concaténant “les uns sous les autres” les tableaux composant .
Exemple 2.5.2 :
>>t1 = [1 2 ; 2 3]
t1 =
1 2
2 3
>>t2 = [3 4 ; 6 7]
t2 =
3 4
6 7
>> t = [t1 , t2] % ou [t1 t2]
ts =
1 2 3 4
2 3 6 7
>> t = [t1 ; t2]
t =
1 2
2 3
3 4
6 7
On peut remarquer que l’écriture d’une valeur littérale tableau suit en fait ce type de syntaxe.
2.5.2 Accès aux éléments d’un tableau
Soit t un tableau, soit l un entier compris respectivement entre 1 et le nombre de lignes de
t (size(t,1)), et soit k d’un entier compris entre 1 et le nombre de colonnes de t (size(t,1)),
t(l,k) désigne alors l’élément de la ligne l et de la colonne k du tableau t :
Exemple 2.5.3 :
>>t = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 1]
t =
1 2 0 0
0 2 3 1
0 0 2 1
>> x = t(2, 3)
x =
3
L’accès en lecture à un élément dont les indices seraient négatifs ou dont la valeur serait strictement
supérieure au nombre de lignes ou au nombre de colonnes, conduit à une erreur :
Exemple 2.5.4 :
>>x = t(1,5)
??? Index exceeds matrix dimensions
Par contre, il est possible d’affecter une valeur à un élément d’un tableau dont les indice
dépassent le nombre de ligne pour le premier indice, le nombre de colonnes pour le second. Comme
le montre l’exemple suivant, les éléments du dont les indices sont compris entre le nombre de lignes
ou le nombre de colonnes et ceux spécifié, prennent la valeur 0.
Exemple 2.5.5 :
>> t = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 1]
t =
1 2 0 0
0 2 3 1
0 0 2 1
>> t(1,5) = 2
t =
1 2 0 0 2
0 2 3 1 0
0 0 2 1 0
2.5.3 Lignes et colonnes d’un tableau
Soient t un tableau non-vide et l un entier compris entre 1 et la nombre de lignes du tableau
t. Alors t(l, :) désigne la ligne l de t. De même, si k est un entier compris entre 1 et le nombre
de colonnes de t, t( :, k) désigne la colonne k de t.
Exemple 2.5.6 :
>> t
1 2 0 0 2
0 2 3 1 0
0 0 2 1 0
>> x = t(2, :)
x =
0 2 3 1 0
>> y = t(:, 3)
y =
0
3
2
2.5.4 Éléments diagonaux d’un tableau - diag
Soit t un tableau non-vide, diag(t) retourne le vecteur formé des éléments de la diagonale
principale de t (les éléments de la forme t(k, k)). v = diag(t, k) où k est un entier compris
entre-size(1, t) et size(2, t), retourne le vecteur formé des élément de la k ieme diagonale de
t, la diagonale d’indice zéro étant la diagonale principale, les valeurs positives correspondant aux
sur-diagonales, les valeurs négatives aux sous-diagonales.
Exemple 2.5.7 :
Avec le même tableau t que dans l’exemple précédent :
>> t
1 2 0 0 2
0 2 3 1 0
0 0 2 1 0
>> v = diag(t)
v =
1
2
2
>> v = diag(t,1)
v =
2
3
1
>> v = diag(t,-1)
v =
0
0
2.5.5 Sous-tableaux ou blocs - fonctions tril et triu
Soient t un tableau non-vide, l une liste d’entiers compris entre 1 et le nombre de lignes de t,
et k une liste d’entiers compris entre 1 et le nombre de colonnes de t. Alors t(l, k) est le tableau
formé par les éléments de t dont l’indice de ligne appartient à l et l’indice de colonne appartient
à k.
Exemple 2.5.8 :
>> t
1 2 3 4 5
2 2 3 1 0
3 0 2 1 0
>> l = [1 2]; k = [1 3 5];
>> t(l, k)
ans =
1 3 5
2 3 0
Les fonctions tril et triu extraient respectivement les termes situés sur et au-dessous de la k ieme
diagonale, et les termes situés sur et au-dessus de la k ieme diagonale.
Exemple 2.5.9 :
Avec le même tableau que dans l’exemple ci-dessus :
>> tril(t,1)
ans =
1 2 0 0 0
2 2 3 0 0
3 0 2 1 0
>> triu(t,-1)
ans =
1 2 3 4 5
2 2 3 1 0
0 0 2 1 0
tril(t,0) s’écrit aussi tril(t), de même, triu(t,0) s’écrit aussi triu(t).
2.5.6 Tableaux particuliers
Les fonction ci-dessous permettent de construire des tableaux correspondant aux matrices
usuelles : identité, matrice nulle, ainsi qu’à des matrices-test très utiles pour valider des algorithmes
d’analyse matricielle (voir aussi la fonction gallery.
Fonction Argument Résultat
diag un vecteur ou une liste s matrice diagonale dont la diagonale est
la liste ou le vecteur s
vander un vecteur ou une liste s matrice de Vandermonde d’ordre
n = length(s) engendrée par s
eye un entier n matrice identité d’ordre n
hilb un entier n matrice de Hilbert d’ordre n : hi,j = 1/(i + j − 1)
invhilb un entiers n inverse de la matrice de Hilbert d’ordre n
magic un entier n carré magique d’ordre n
ones un entier n matrice A carrée d’ordre n telle que ai,j = 1
pascal un entier n matrice depascal d’ordre n
rand un entier n matrice aléatoire carrée d’ordre n
zeros un entier n matrice nulle d’ordre n
wilkinson un entier n matrice de Wilkinson d’ordre n
Les fonctions eye, ones et zeros peuvent être appelées avec deux arguments entiers n et m. Le
résultat est alors une matrice de format n × m formée des n premières lignes et des m premières
colonnes de la matrice carrée du même type d’ordre max(n, m).
Exemple 2.6.1 :
>> s = [5 2 3 1 7] ; p = prod(s) , s = sum(s)
p =
210
s =
18
Exemple 2.6.2 :
>> s = [5 2 3 1 7] ; [ma, ind] = max(s)
ma =
7
ind =
5
Exemple 2.6.3 :
>> s = [5 2 3 1 7] ; m = mean(s)
m =
3.6000
– Appliquée à un tableau où chaque ligne représente une observation et où chaque colonne
correspond à une variable, la fonction cov retourne la matrice de covariance des éléments du
tableau.
Exemple 2.6.4 :
Avec le mêmes objets que dans l’exemple précédent :
>> c = cov(s)
c =
5.8000
>>c = cov(t)
c =
0 0 0
0 1.0000 2.5000
0 2.5000 6.3333
Pour obtenir la variance de chaque colonne sous forme de vecteur-ligne :
>> c = diag(cov(t))’
c =
0 1.0000 6.3333
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Opérations de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1 Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Opérations sur les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.3 Opérations booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.4 Évaluation des expressions - variable ans . . . . . . . . . . . . . . . . . . . 33
3.3 Scripts et m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.2 Création de m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.3 Exécution d’un m-file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.4 Éléments d’écriture de m-files . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 Structures algorithmiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4.1 Sélection - if . . . end et if . . . else . . . end . . . . . . . . . . . . . . . 36
3.4.2 Répétition - for . . . end . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4.3 Itération conditionnelle - while . . . end . . . . . . . . . . . . . . . . . . . . 39
3.4.4 Construction switch . . . case . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5 Fonctions et m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.5.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5.2 Règles et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5.3 Traitement des erreurs - try . . . catch . . . . . . . . . . . . . . . . . . . . 42
3.5.4 Optimisation des calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1 Introduction
Un des avantages de MATLAB est de proposer une syntaxe très simple pour traduire les calculs
matriciels. Les opérateurs sont représentés par les mêmes symboles (à une ou deux exceptions prés)
que ceux utilisés communément en algèbre linéaire. Mieux, ils opèrent directement sur les tableaux
(par exemple, il n’est pas nécessaire d’écrire des boucles pour effectuer la somme ou ou le produit
de deux matrices).
CHAPITRE 3. EXPRESSIONS, SCRIPTS ET M-FILES
3.2.1 Opérateurs
Classés par ordre de priorité décroissante, les opérateurs utilisés par MATLAB sont les suivants :
– exponentiation et transposition
– l’exponentiation ^ et .^
– la conjugaison ’ et la transposition .’
– opérateurs multiplicatifs
– les produits * et .*,
– les divisions à droite /, ./ et à gauche \, .\
– opérateurs additifs et de négation
– les opérateurs additifs unaire et binaires + et -
– la négation ~
– opérateurs booléens avec par ordre de priorité :
– les opérateurs de comparaison
– <, >, <= et >=
– égalité ==, non égalité ~=
– puis les opérateurs logiques
– et logique &
– ou logique |
A propos des opérateurs booléens, il est rappelé qu’il n’existe pas dans MATLAB de vrai type
booléen, que false est représenté par la valeur 0 et que true est représentée par la valeur 1 et par
extension par toute valeur non nulle, ce qui est confirmé par l’évaluation des expressions suivantes :
Exemple 3.2.1 :
>> 2&3
ans =
1
>> 2&0
ans =
0
>> 2|3
ans =
1
>> ~3
ans =
0
>> 2==3
ans =
0 % l’égalité est bien celle des nombres et non celle des prédicats !
3.2.2 Opérations sur les tableaux
Losqu’ils sont appliqués à des nombres (ou à des expressions booléennes) dont la valeur est
représentée par un tableau de dimensions (1 × 1), le résultat fourni par ces opérateurs est le résultat
usuel. Losqu’ils sont appliqués à des listes, des vecteurs ou plus généralement des tableaux, le
résultat est bien sûr quelque peu différent. Dans le tableau suivant, A et B sont des tableaux et c
est un nombre :
On notera que certains opérateurs sont associés à un opérateur pointé, * et .* par exemple.
De façon générale, l’opérateur pointé correspond à une opération semblable à celle représentée par
l’opérateur non pointé, mais appliquée non pas ”matriciellement” mais “terme à terme” : * est
l’opérateur matriciel alors que .* est l’opérateur du produit “terme à terme”.
Exemple 3.2.2 :
On crée deux matrices a et b. La fonction ones(n) crée une matrice carrée d’ordre 2 dont tous les
termes sont égaux à 1 ; la fonction eye(2) crée la matrice identité d’ordre 2.
>> a = [1 2;1 0]
a =
1 2
1 0
>> b = ones(2)+eye(2)
b =
2 1
1 2
>> c = a*b
c =
4 5
2 1
>> d = a.*b
d =
2 2
1 0
3.2.3 Opérations booléennes
Dans la suite, “tableau booléen” désignera un tableau dont les éléments ont pour valeur 0
ou 1, 0 représentant false et 1( ou par extension par toute valeur non nulle), représentant true. Les
opérateurs booléens sont peut-être ceux dont le comportement peut apparaı̂tre le plus déroutant
parce qu’il fonctionnent “terme à terme ” :
Exemple 3.2.3 :
Avec les variables a et b définies dans l’exemple précédent on obtient :
>> a , b
a =
1 2
1 0
b =
2 1
1 2
>> a == b
ans =
0 0
1 0
Dans l’expression a == b la comparaison porte sur les éléments homologues de a et b :
1 == 3 → f alse → 0, 2 == 1 → f alse → 0
1 == 1 → true → 1, 0 == 2 → f alse → 0
Il en est de même pour a > b:
>> a > b
ans =
0 1
1 0
Dans l’exemple suivant, on évalue a & b, et a | b. Les valeurs des éléments des matrice a et b sont
converties, avant l’évaluation, en valeurs booléennes avec la convention habituelle : 0 vaut false,
toute valeur non-nulle vaut true :
>> a & b
ans =
1 1
1 0
>> a | b
ans =
1 1
1 1
La dernière évaluation n’a pas modifié la valeur de ans puisqu’elle comportait une affectation.
>> ans
ans =
6.2832
Écrire un script est assez fastidieux, aussi MATLAB permet d’enregistrer le texte d’un script sous
forme de fichier de texte appelés m-files, en raison de leur extension.
3.3.2 Création de m-files
Les fichiers .mat que nous avons évoqués dans le chapitre précédant sont des fichiers binaires
qui permettent d’enregistrer des valeurs. Les m-files 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 m-files dans la toolbox matlab.
Les m-files peuvent être crées par n’importe quel éditeur. Dans les versions récentes de MAT-
LAB 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.
Exemple 3.3.2 :
Dans la fenêtre de l’éditeur tapez les lignes suivantes :
% script - essai . m
a = .5;
b = pi;
c = a * b
!!! Remarque :
On peux utiliser les techniques du copier/coller pour transférer des parties de script de la fenêtre
de commande de MATLAB vers l’éditeur et réciproquement. Il faut prendre garde au fait que dans
la fenêtre de commande de MATLAB les sauts de ligne lancent l’évaluation des expressions ; il faut
alors utiliser . . . <entrer> à la place des sauts de ligne.
Exemple 3.3.3 :
Pour exécuter le script précédent, on tape essai et on obtient :
>> essai
c =
1.5708
La présence d’un point-virgule ; à la fin des deux premières lignes du script a neutralisé l’affichage
des valeurs de a et b.
3.3.4 Éléments d’écriture de m-files
Commentaires
Les lignes de commentaires sont précédées du caractère %.
Entrées
– La fonction input permet la saisie d’une valeur depuis le clavier. Plus précisément :
– Pour les valeurs numériques, n = input(’message’) affiche message et affecte à la
variable n la valeur numérique entrée au clavier.
– Pour les chaı̂nes de caractères, str = input(’message’,’s’) affiche message et affecte à
la variable str la valeur entrée au clavier considérée alors comme une chaı̂ne de caractères.
Exemple 3.3.4 :
>> n = input(’Entrez la valeur de n ’)
>> nom = input(’Entrez votre nom ’,’s’)
– La fonction menu génère un menu dans lequel l’utilisateur doit choisir une option :
result = menu(’titre’, ’opt1’, ’opt2’, . . . , ’optn’)
La valeur retournée dans la variable result est égale au numéro de l’option choisie. menu est
souvent utilisé en relation avec la structure algorithmique switch-case.
Exemple 3.3.5 :
result = menu(’Traitement’, ’Gauss’, ’Gauss-Jordan’, ’Quitter’)
Exemple 3.3.6 :
>> message = ’Bozo le clown’ ;
>> message
Bozo le clown
>> disp(message)
Bozo le clown
>> a = [1 2;3 4] ;
>> disp(a)
1 2
3 4
– La commande format permet de choisir entre plusieurs modes d’affichage (sans in-
terférer avec le type des valeurs numériques affichées qui est toujours le type double) :
Commande Affichage Exemple
format short décimal à 5 chiffres 31.416
format short e scientifique à 5 chiffres 31.416e+01
format long décimal à 16 chiffres 31.4159265358979
format long e scientifique à 16 chiffres 314159265358979e+01
format hex hexadécimal
format bank virgule fixe à deux décimales 31.41
format rat fractionnaire 3550/113
format + utilise les symboles +, - et espace pour +
afficher les nombres positifs négatifs et nuls
Pause
La commande pause permet de ménager une pause dans l’exécution d’un m file :
– sans argument pause suspend l’exécution jusqu’à ce que l’utilisateur presse sur une touche.
– pause(n ) suspend l’exécution pendant n secondes.
Interaction avec le système d’exploitation
MATLAB possède des fonctions et des commandes qui permettent d’obtenir la liste des
répertoires accessibles ou matlabpath, la liste des fichiers d’un répertoire donné, les éditer et
éventuellement les effacer :
– addpath path : ajoute path à la liste matlabpath des répertoires accessibles par MATLAB ;
– p = pwd : retourne dans p le chemin d’accès au répertoire de travail actuel ;
– cd path : change le répertoire de travail pour celui spécifié par path ;
– d = dir ou d = ls : retourne dans d la liste des fichiers du répertoire de travail ;
– what : retourne la liste des m-files et des mat-files du répertoire de travail ;
– edit test : édite le m-file test.m, identique à Open dans le menu File ;
– delete test.m : efface le m-file test.m ;
– type test : affiche le le m-file test.m dans la fenêtre de commande.
Exemple 3.4.1 :
>> m = -1;
>> if (m<0) a =-m, end
a =
1
>> f (m<0)
a = -m ;
end
Utilisation de elseif
Lorsqu’il y a plus de deux alternatives, on peut utiliser la structure suivante :
if (exp1)
script1 (évalué si exp 1 est vraie)
elseif (exp2)
script2 (évalué si exp 2 est vraie)
elseif (exp3)
...
else
script (évalué si aucune des expressions exp1, exp2, . . . n’est vraie)
end
3.4.2 Répétition - for . . . end
Syntaxe
for (k = liste) / script / end
Le symbole / représente comme dans le paragraphe précédent un symbole séparateur , ou ; ou
encore un saut de ligne. D’autre part, il est préférable de ne pas utiliser
i et j comme indices ; dans
MATLAB i et j sont des variables prédéfinies dont la valeur est ( − 1).
Exemple 3.4.2 :
>> x = [ ] ;
>> for (k = 1 : 5), x = [x, sqrt(k)], end
x =
1
x =
1.0000 1.4142
x =
1.0000 1.4142 1.7321
x =
1.0000 1.4142 1.7321 2.0000
x =
1.0000 1.4142 1.7321 2.0000 2.2361
>> for (k = 1 : 5)
x = [x, sqrt(k)] ;
end
Exemple 3.4.3 :
>> for (l = 1 : 3)
for ( k = 1 : 3)
A(l,k) = l^2 + k^2 ;
end
end
>> disp(A)
2 5 10
5 8 13
10 13 18
Utilisation de break
Il est possible de sortir directement d’une boucle for ou while en utilisant la commande break :
Exemple 3.4.4 :
>> EPS = 1;
>> for (n = 1 : 100)
EPS = EPS / 2;
If ((EPS + 1) <= 1)
EPS = EPS*2
break
end
end
EPS =
2.2204e-16
>> n
n =
52
ans =
1 3
ans =
3 1
La double boucle se s’est pas arrêté après que le test A(l,k) == 10 ait été validé lorsque l=1 et
k=3.. En effet break provoque la sortie de la boucle la plus proche, ici la boucle for interne.
Une version corrigée du test précédent pourrait être la suivante avec deux break pour pouvoir sortir
des deux boucles for :
Exemple 3.4.5 :
>> sortie = 0;
>> for (l=1:3)
if (sortie)
break
end
for (k = 1:3)
if (A(l,k) == 10)
[l,k]
sortie = 1 ;
break
end
end
end
ans =
1 3
2 modulo 3
1 function m = moyenne(x)
2 % MOYENNE(X) : moyenne des elements d’une liste ou d’un vecteur
3 % un argument autre qu’une liste ou un vecteur conduit a une erreur
4 [K,l] = size(x) ;
5 if ( (k~=1) & (l~=1) )
6 error(’l"argument doit ^
etre une liste ou un vecteur’)
7 end
8 m = sum(x)/length(x) ;
La fonction est enregistrée sous le nom moyenne.m. Elle est ensuite appelée depuis le fenêtre de
commande :
>> x = 1 : 9
x =
1 2 3 4 5 6 7 8 9
>> y = moyenne(x)
y =
5
>> A = [ 1 2 ; 3 4] ;
>> moyenne(A)
??? Error using ==> moyenne
l"argument doit ^
etre une liste ou un vecteur
Le traitement de l’erreur sur le type de l’argument est réalisé aux lignes 5 à 7, plus particulièrement
par la commande error. MATLAB utilise la section de commentaires en conjonction avec la com-
mande help pour fournir la définition de la fonction :
3.5.1 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..
3.5.2 Règles et propriétés
• Le nom de la fonction et celui du fichier m-file qui en contient la définition doivent être
identiques. Ce fichier est le fichier m-file associé à la fonction.
• La commande help affiche les neuf premières lignes de la section de commentaires ; la première
ligne est utilisée par la commande lookfor pour effectuer des recherches parmi les fonctions
, MATLAB accessibles.
• 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.
• Un fichier m-file 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.
Exemple 3.5.2 :
1 function [m, v] = myStat(x)
2 % MYSTAT(X) : moyenne et variance des elements d’une liste ou d’un vecteur
3 % un argument autre qu’une liste ou un vecteur conduit a une erreur
4 [k,l] = size(x) ;
5 if ( (k~=1) & (l~=1) )
6 error(’l"argument doit ^
etre une liste ou un vecteur’)
7 end
8 m = moyenne(x);
9 v = variance(x);
10 function a = moyenne(u)
11 % Calcul de la moyenne
12 a = sum(u)/length(u);
13 function b = variance(u)
14 % Calcul de la variance
15 c = sum(u)/length(u);
16 u2 = (u - c).^2;
17 b = sum(u2)/length(u);
L’ensemble des trois fonctions est enregistré dans un seul fichier m-file portant le nom de la
fonction principale myStat.m.
• 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.
3.5.3 Traitement des erreurs - try . . . catch
La commande try . . . catch a pour but de permettre un traitement qui permette à l’utilisateur
d’intervenir en présence d’erreurs ou de situations inhabituelles. Sa syntaxe est la suivante :
try script1 catch script2 end
Le fonctionnement en est assez simple pour les habitués des langages modernes,java par exemple :
– l’exécution de script1 est lancée ;
– si une erreur survient, alors l’exécution de script1 est arrêtée et script2 est exécuté ;
– sinon, script1 est exécuté jusqu’à son terme, script2 n’est pas exécuté, les exécutions suivantes
se poursuivent après le end final.
On peut utiliser lasterr pour accéder à l’erreur qui provoque l’arrêt de l’exécution de script1.
3.5.4 Optimisation des calculs
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) :
Exemple 3.5.3 :
1 function [t,b] = test1(n)
2 % détermine le temps mis pour créer la liste
3 % des racines carrées des entiers compris entre 1 et n
4 m = 0 ;
5 tic ;
6 for k = 1 : 1 : n
7 b(k) = m+sqrt(k) ;
8 end
9 t = toc ;
Les résultats obtenus montrent que test2 est plus efficace que test1.
>>test1(1000)
ans =
0.1040
>>test2(1000)
ans =
0.0023
MATLAB contient 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 .
Il est impossible dans un seul chapitre de faire le tour de toutes les fonctions de MATLAB liées à
l’analyse numérique. Ce chapitre présente quatre familles de fonctions : les fonctions “numériques”,
les fonctions du calcul polynomial, les fonctions matricielles et les fonctions liées aux fonctions
d’une variable.
Les fonctions numériques sont nombreuses. L’aide en ligne en donne une liste exhaustive. Dans le
tableau ci-dessous, on trouvera les fonctions les plus fréquemment utilisées.
CHAPITRE 4. MATLAB ET L’ANALYSE NUMÉRIQUE
Fonction Résultat
abs valeur absolue ou module (nb. complexes)
angle argument (nb. complexes)
real partie réelle (nb. complexes)
imag partie imaginaire (nb. complexes)
conj complexe conjugué
sqrt racine carrée
cos cosinus (angle en radian)
sin sinus (angle en radian)
tan tangente (angle en radian)
cos arc cosinus (résultat en radian)
sin arc sinus (résultat en radian)
tan arc tangente (résultat en radian)
exp exponentielle
log logarithme népérien
log10 logarithme base 10
round entier le plus proche
fix partie entière mathématique
floor troncature par défaut
ceil troncature par excès
4.2 Polynômes
Pour MATLAB, un polynôme est une liste : la liste des coefficients ordonnés par ordre
décroissant :
Exemple 4.2.1 :
Le polynôme p(x) = 1 − 2x + 4x3 est représenté par le liste :
>> p = [4 0 -2 1]
p =
4 0 -2 1
Exemple 4.3.1 :
>> a = [1 2 ; 3 4]
a =
1 2
3 4
>> vp = eig(a)
vp =
-0.3723
5.3723
>> p = poly(a)
p =
1.0000 -5.0000 -2.0000
% le polyn^
ome caractéristique est p(t) = t^2 - 5t - 2
>> roots(p)
ans =
5.3723
-0.3723
% les racines de p sont bien les valeurs propres
4.4.3 Intégration
MATLAB propose plusieurs fonctions pour calculer numériquement la valeur de l’intégrale d’une
fonction d’une variable, sur un intervalle fermé.
– trapz - La fonction trapz utilise la méthode des trapèzes. les arguments de trapz sont deux
listes, dans l’ordre :
– une liste x qui est une subdivision de l’intervalle d’intégration ;
– une liste y dont les valeurs sont les images des valeurs de de la liste x par la fonction à
intégrer (y(k) = f(x(k))).
Exemple 4.4.3 :
>> x = 0 : pi/100 : pi ; y = sin(x) ;
>> z = trapz(x, y)
z =
1.9998
– quad et quad8 - Ces deux fonctions sont fondées respectivement sur la méthode de Simpson
et sur la méthode de Newton-Cotes. Leur syntaxe est celle de la fonction fmin voir 4.4.1 :
Exemple 4.4.4 :
>> z = quad(’sin’, 0, pi)
z =
2.0000
Courbes et surfaces
Une fenêtre appelée Figure N◦ 1 apparaı̂t.La valeur retournée par le fonction figure est le numéro
de la fenêtre. Un second appel à la fonction figure crée une seconde fenêtre appelée Figure N◦ 2.
>> h = figure
h =
2
CHAPITRE 5. COURBES ET SURFACES
La dernière fenêtre crée est la fenêtre active (située au premier plan). Pour faire passer une fenêtre
au premier plan, on utilise la fonction figure avec pour argument le numéro de la fenêtre que l’on
souhaite activer. Si aucune fenêtre portant ce numero n’existe elle sera créée.
Réciproquement, la fonction gcf (get currant figure) retourne le numéro (ou référence) de la fenêtre
active.
Exemple 5.1.2 :
>> h = gcf
h =
2
>> figure(1)
>> h = gcf
h =
1
La fenêtre active est la Figure N◦ 2, puis on rend active Figure N◦ 1. Elle passe au premier plan (il
est possible de faire la même chose en cliquant dans Figure N◦ 1).
La fonction gcf est utilisée pour obtenir le numéro de la fenêtre active, et get pour obtenir la liste
des attributs de la fenêtre et de leur valeur sous la forme : Nom de l’attribut = Valeur de l’attribut.
On modifie la valeur des attributs d’une fenêtre avec la fonction set :
set(’Nom de l’attribut’, ’Valeur de l’attribut’, . . . , . . . )
On peut créer directement une fenêtre dont les attributs ont une valeur particulière :
figure(’Nom de l’attribut’, ’Valeur de l’attribut’, . . . , . . . )
Exemple 5.1.4 :
La séquence :
Exemple 5.2.1 :
Pour obtenir le graphe de la fonction sin(x) sur l’intervalle [0, 2π] :
>> x=[0:.5:2*pi] ; y=sin(x) ; plot(x,y)
On remarquera que premier tracé a été supprimé de la fenêtre et qu’il a été remplacé par le second.
5.2.2 Tracer dans une ou plusieurs fenêtres
Suivant le contexte, on peut souhaiter que :
– les tracés apparaissent dans des fenêtres différentes : on crée autant de fenêtres que
de tracés en utilisant la fonction figure :
Exemple 5.2.3 :
>> figure(1) ; x=[0:.1:2*pi] ; c=cos(x) ; plot(x,c)
>> figure(2) ; s=sin(x) ; plot(x,s)
Ces deux séquences construisent deux fenêtres, la première contenant le graphe de cos(x), la
seconde le graphe de sin(x).
– tous les tracés apparaissent simultanément dans la fenêtre active : on peut procéder
de deux façons :
– soit en utilisant les commandes hold on et hold off : après hold on tous les tracés
ont lieu dans la fenêtre active ; hold off fait revenir au mode de tracé normal.
Exemple 5.2.4 :
>> x=[0:.1:2*pi] ; c=cos(x) ; s=sin(x) ;
>> hold on
>> plot(x,c)
>> plot(x,s)
>> hold off
Les deux graphes, celui de cos(x) et celui de sin(x), apparaissent dans la même fenêtre
et dans le même système d’axes.
– soit en donnant comme argument à plot la liste de tous les couples de listes (ou de
vecteurs) correspondant aux courbes à tracer : plot(x1 , y1 , x2 , y2 , · · · ) ce qui est exacte-
ment équivalent à
>> hold on
>> plot(x1 , y1 )
>> plot(x2 , y2 )
>> . . . .
>> hold off
Lorsque plusieurs tracés ont lieu dans la même fenêtre, il peut être intéressant d’utiliser un
style différent pour distinguer les différents tracés. Pour cela on ajoute un troisième argument à
la définition de chaque tracé : plot(x1 , y1 , st1 , x2 , y2 , st2 , · · · ) où sti est une chaı̂ne de un à trois
caractères pris dans le tableau ci-dessous :
Couleur Marqueur Style du tracé
y jaune . point - (∗) ligne continue
m magenta o cercle : ligne pointillée
c cyan x x -- tirets
r red + plus -. tiret point
g vert ∗ étoiles
b bleu s carrés
w blanc d losanges
k noir (∗) <, > triangles
Les valeurs notées (∗) sont les valeurs par défaut.
Exemple 5.2.5 :
>> x=[0:.1:2*pi] ; c=cos(x) ; s=sin(x) ;
>> plot(x,c,’o’,x,s,’*’)
Les deux graphes, celui de cos(x) et celui de sin(x), se distinguent par leur tracé.
Exemple 5.2.6 :
La commande print -deps fig-gr6.eps appliquée à la fenêtre ci-dessus donne la figure suivante :
Exemple 5.2.7 :
>> x = linspace(0,5,100) ; y = exp(5*x)-1 ;
>> figure(1) ; plot(x,y)
>> figure(2) ; plot(x,y) ; axis([0,5,0,100])
L’exemple précédent montre que la modification de la zone affichée a une incidence non
négligeable sur le facteur d’échelle utilisé par MATLAB. Le graphe de la fonction exp(5x)−1
qui paraı̂t très “plat” dans la figure de gauche ne l’est pas autant dans la figure de droite.
– axis option modifie l’apparence des axes et de la plotting-box :
– manual fixe les bornes (et le facteur d’échelle) de chaque axe à leur valeur actuelle, de
telle sorte que si hold a la valeur on, les tracés suivants ne pourront les modifier ;
– equal fixe une échelle commune aux deux axes ;
– square donne à la plotting-box une forme carrée ;
– normal rend à la plotting-box sa forme rectangulaire usuelle et restaure les valeurs des
bornes de chaque axe à leur valeur par défaut ;
– auto retour au mode automatique de définition des axes et de la plotting-box.
Consultez l’aide en ligne pour d’autres usages de axis.
Exemple 5.2.8 :
Dans cet exemple, on trace la courbe (un cercle) définie par l’équation paramétrique :
x = cos(t)
pour t ∈ [0, 2π]
y = sin(t)
axis equal est ici nécessaire pour que le cercle n’ait pas la forme d’une ellipse :
les fonctions xlabel, ylabel, title et gtext
Les fonctions xlabel(’x-legend ’) et ylabel(’y-legend ’) permettent d’associer une légende
à l’axe de coordonnée correspondant. La fonction title(’titre ’) ajoute un titre au tracé (pas
à la fenêtre) et gtext(’texte ’) permet de placer avec la souris le texte passé comme argument.
Toutes ces chaı̂nes de caractères peuvent contenir des commandes LATEX.
Exemple 5.2.9 :
>> t = linspace(0,5,100) ;
>> x1 = t.*exp(t) ; x2 = t.*exp(t/2)/4 ; x3 = t.*exp(t/5)/25
>> plot(t,x1,t,x2,t,x3,) ; title(’\beta = 1, 2 et 5’)
>> xlabel(’t’) , ylabel(’\gamma (t,\beta)’)
>> gtext(’\beta = 1’)
>> gtext(’\beta = 2’)
>> gtext(’\beta = 5’)
Exemple 5.2.10 :
>> a = randn(1,500) ; hist(a)
>> [N,X] = hist(a)
N =
12 15 47 79 96 102 69 46 26 8
X =
-2.275 -1.786 -1.297 -0.808 -0.318 0.171 0.660 1.150 1.639 2.128
>> pie(N)
MATLAB donne une vue perspective du graphe de la fonction, inclus dans une plotting-box par-
allélépipédique. Dans les versions récentes de MATLAB, rotate3d on permet de déplacer la plotting-
box avec la souris.
fonction mesh
mesh(xx,yy,z) donne une représentation de la surface par un maillage “fil de fer”.
fonction surf
surf(xx,yy,z) donne une représentation où les mailles sont colorées.
Comme pour les courbes de l’espace, la commande rotate3d on permet de déplacer la plotting-
box à l’aide de la souris.
Exemple 5.4.1 :
>> x = -7.5 : .5 : 7.5 ; y = x ; [xx,yy] = meshgrid(x,y) ;
>> r = sqrt(xx.^2+yy.^2)+eps ; z = sin(r)./r ;
>> figure(1) ; mesh(xx,yy,z) ; title(’mesh’)
>> figure(2) ; surf(xx,yy,z) ; title(’surf’)
Exemple 5.4.2 :
Dans les exemples ci-dessous, on utilisera une fonction-test prédéfinie peaks.
Importation et exportation de
données
Les échanges de données entre applications utilisent généralement des fichiers. MATLAB possède
un grand nombre de fonctions pour les gérer c.f. help iofun. En particulier, la version de MATLAB
possède un assistant d’import de fichier qui permet d’accéder à de nombreux types de fichiers.
Cependant une méthode très simple consiste en l’utilisation de fichiers-text, l’utilisation de fichiers
binaires se révélant parfois plus délicate (on peut en effet contrôler et modifier le contenu d’un
fichier-text à l’aide d’un simple éditeur). C’est donc cette méthode que nous allons développer dans
cette premiere section.
Exemple 6.1.1 :
CHAPITRE 6. IMPORTATION ET EXPORTATION DE DONNÉES
>> a = 1 : 5 , h = hilb(3)
a =
1 2 3 4 5
b =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> save ab.txt a b -ascii
On peut éditer les fichier ainsi créés avec n’importe quel éditeur ou directement dans MATLAB en
utilisant la commande type :
Exemple 6.1.2 :
>> type ab.txt
1.0000000e+00 2.0000000e+00 3.0000000e+00 4.0000000e+00 5.0000000e+00
1.0000000e+00 5.0000000e-01 3.3333333e-01
5.0000000e-01 3.3333333e-01 2.5000000e-01
3.3333333e-01 2.5000000e-01 2.0000000e-01
Les valeurs des éléments des deux tableaux ont été enregistrées en commençant par les valeurs de
a suivies de celles de b. Cependant, on peut remarquer que le nombre d’éléments de chacune des
lignes du fichier-text n’est pas constant : cinq pour la première ligne, trois ensuite.
Il est possible d’enregistrer les valeurs des éléments avec seize chiffres significatifs au lieu de huit,
en faisant suivre -ascii de l’option -double :
Exemple 6.1.3 :
>> c = pi/6 : pi/6: pi/2
c =
0.5236 1.0472 1.5708
>> save c.txt c -ascii -double
>> type c.txt
5.2359877559829882e-01 1.0471975511965976e+00 1.5707963267948966e+00
est valide. Il comporte six chaı̂nes numériques par lignes. Par contre le fichier défini dans l’exemple
6.1.1 ci-dessus n’est pas valide puisque ses lignes ne comportent pas le même nombre de valeurs
numériques.
Si le fichier <fich> est valide,
load <fich> -ascii
ajoute à l’environnement de travail une nouvelle variable dont le nom est celui du fichier privé de
son extension et dont la valeur est le tableau défini par le fichier.
Exemple 6.1.5 :
>> load d.txt -ascii
d =
1 2 3 4 5 6
6 5 1 2 3 4
On notera que le comportement de load dans le cas où son argument est un fichier-text est très
différent du cas où l’argument est un fichier .mat c.f. 2.3.3.