You are on page 1of 42

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 1

UNIVERSITE HASSAN II – MOHAMMEDIA- CASABLANCA

FACULTE DES SCIENCES & TECHNIQUES
Département Génie Electrique
Filière d’Ingénieurs d’Etat: Génie Electrique & Télécommunications GET1


Introduction du logiciel

MATLAB est un environnement de programmation pour le développement d'algorithmes,
l'analyse des données, la visualisation et le calcul numérique. Vous pouvez résoudre les problèmes
informatiques techniques plus rapidement qu'avec les langages de programmation traditionnels, tels
que C, C + + et Fortran. Vous pouvez utiliser MATLAB dans une large gamme d'applications, y
compris le traitement du signal et d'image, de communication, la conception du contrôle, de test et
mesure, la modélisation et l’analyse financières et la biologie computationnelle. Pour les ingénieurs et
les universitaires, MATLAB est un langage de l'informatique technique.
MATLAB est un outil puissant et convivial qui vous permet d’effectuer ces tâches. Ce document a
pour but de vous faire découvrir ce logiciel en vous présentant sa philosophie ainsi que ses principales
fonctionnalités.
Le nom de MATLAB est la combinaison de deux mots soit les mots Matrix (contrairement à
Mathematics comme on pourrait le penser!) et Laboratory. À la base, MATLAB a été conçu pour faire
du calcul matriciel puisque chaque élément d’entrée constitue une matrice ou des éléments d’une
matrice. Le logiciel utilise en langage de fond du C++, mais utilise un langage beaucoup plus simplifié
du point de vue de l’utilisateur à l’interface. Par exemple, contrairement aux langages de
programmation comme C++, il n’est plus nécessaire de déclarer des variables avant de les utiliser.
Attention, MATLAB différencie les majuscules des minuscules.
Présentation de l’interface et modes de fonctionnement du logiciel

Il existe deux modes de fonctionnement :
Mode interactif: Exécution des instructions entrées par l‘utilisateur dans la fenêtre de commande de
MATLAB (le Workspace).
Mode exécutif: Exécution de «programmes» ou «scripts» en langage MATLAB, qui sont des fichiers
regroupant une suite d’instructions (fichiers .m).



L'interface principale se décompose comme suit :
1. Command window : Permet d’exécuter des commandes en dehors de programme et affiche
les résultats.
Exemple : taper 1+1
2. Current folder (Directory) : Contenu du répertoire courant où doit se situer vos
programmes.
3. Workspace : Affiche l’ensemble des variables utilisés.
4. Commande History : Permet de visualiser les dernières commandes exécutées. Il est
possible de faire glisser ces commandes vers la fenêtre de commande. On peut aussi y
accéder en appuyant sur flèche haut ou pour des commandes plus anciennes en tapant la
première lettre de l’expression puis flèche haut
5. Choix du répertoire courant. c'est le dossier où doit se situer vos programmes (fichiers
*.m). Vous pouvez mettre vos programmes dans un autre dossier mais dans ce cas il faut
l'inclure dans File >> SetPath

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 2



Les blocks de la figure précédente sont présentés comme suit :
Toolboxes: Ce sont des collections de fichiers .m développés pour des domaines d'application
spécifiques (Signal Processing Toolbox, System Identification Toolbox, Control System Toolbox,
Synthesis and Analysis Toolbox , Robust Control Toolbox, Optimization Toolbox, Neural Network
Toolbox, Spline Toolbox, Chemometrics Toolbox, Fuzzy Logic Toolbox, etc.)
Simulink: C'est l'extension graphique de MATLAB permettant de travailler avec des diagrammes en
blocs.
Blocksets: Ce sont des collections de blocs Simulink développés pour des domaines d'application
spécifiques (DSP Blockset, Power System Blockset,.).
Première utilisation de MATLAB
Une façon efficace de découvrir Matlab est d'utiliser son aide.
 help : "help" tout seul donne la liste des aides générales possibles.
 helpwin : ouvre une fenêtre et donne accès à une aide détaillée.
 help + nom d’une commande : indique la syntaxe des graphes en 2D.
Exemple : >> help plot
 demo : lance une démo générale de Matlab.
 help demos : donne une liste des démos existantes.
Quelques commandes importantes:

 lookfor + nom de commande : donne une liste de toutes les commandes qui ont un rapport avec
la nom de commande écrite.
 who et whos : donne les noms de variables présentes dans l‘espace de travail.
 clear : supprime les variables de l‘espace du travail.
 clc : efface l‘écran (sans toucher aux variables de l’espace de travail)
 exit ou quit : permet de sortir de MATLAB
 CTRL + C : (touches du clavier) permet d‘interrompre un programme en exécution.
1
2
3
4
5
5
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 3

Interaction avec le système d’exploitation

Les commandes et fonctions suivantes permettent à MATLAB d’interagir avec le système
d’exploitation de la machine sur laquelle il est utilisé :
 addpath path : ajoute le chemin d’accès (path) à la liste des chemins d’accès connus de
MATLAB (MATLABPATH) ;
 cd ou pwd : affiche le chemin d’accès au répertoire de travail actuel ;
 cd path : fixe le répertoire de chemin d’accès path comme répertoire de travail ;
 dir ou ls : affiche le contenu du répertoire de travail actuel ;
 delete : efface le fichier spécifie (peut être utilisée sous forme de fonction sous la forme : delete
(’nomDeFichier’)) ;
 mkdir path : crée le répertoire de chemin d’accès path ;
 rmpath path : supprime le chemin d’accès (path) du (MATLABPATH) ;
 isdir (path) : fonction booléenne qui retourne 1 si le chemin d’accès (path) est celui d’un
répertoire, 0 sinon ;
 filesep : variable dont la valeur est celle du symbole séparateur de lignes (dépend du système
d’exploitation de la machine utilisée).


Objets et Classes de MATLAB

Un objet est une abstraction du monde réel (pour MATLAB celui du calcul matriciel), qui
contient des informations (pour une matrice, par exemple, le nombre de lignes, le nombre de colonnes,
la valeur des coefficients) et sur laquelle on peut appliquer un certain nombre d’opérations (pour les
matrices, la somme, le produit . . .). Un objet est caractérisé par des valeurs, mais pas uniquement ; 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 R
4
.
La famille des objets caractérisés par le même type de structure et les mêmes fonctionnalités
constitue 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
nombres 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 1.
 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, les objets graphiques en particulier.
- 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 structureMATLAB modélise les tableaux de “structures”. Ces “structures” sont des
structures 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.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 4

- Jusqu’à la version 7, MATLAB ne proposait ni valeurs prédéfinies true ou false ni classe pour
modéliser les booléens. A partir de la version 7 MATLAB possède une classe logical.
Comme dans les versions antérieures, false est représenté par la valeur 0, true est représenté par 1 et
par extension, par toute valeur non nulle.

Valeurs littérales

Le terme de valeur littérale désigne les valeurs qu’on peut directement taper au clavier et qui peuvent
être alors affectées à une variable.

Nombres
Les nombres réels et entiers (MATLAB ne distingue pas entre réels et entiers) sont écrits sous les
formes décimales ou scientifiques usuelles:
2, 3.214, 1.21E3.
Les nombres complexes sont écrits sous la forme a + bi, comme dans 1+2i.
Tableaux de nombres

Les tableaux de nombres réels ou complexes de dimension un ou deux suivent la syntaxe suivante:
- un tableau est délimité par des crochets ;
- les éléments sont entrés ligne par ligne ;
- les éléments appartenant à la même ligne sont séparés par des espaces (ou par des virgules) ;
- les différentes lignes doivent comporter le même nombre d’éléments et sont séparées par des
points-virgules.

Les tableaux:
( )
|
|
|
.
|

\
|
|
|
|
|
|
.
|

\
|
2 2 0 0
1 3 2 0
0 0 2 1

4
3
2
1
4 3 2 1
s’écrivent sous la forme [1 2 3 4] , [1; 2; 3; 4] et [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
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 5

Toutes les lignes doivent contenir le même nombre d’éléments :
>> [1 2 ; 1 2 3]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

- Vecteur : un tableau de format (n, 1) i.e. ne comportant qu’une seule colonne ;
- liste ou encore vecteur-ligne : un tableau de format (1, n) i.e. ne comportant qu’une seule ligne ;
- tableau : un tableau au sens commun du terme, c’est à dire une structure organisée en lignes et
colonnes.
Caractères et chaînes de caractères
On écrit les caractères et les chaînes de caractères, entre apostrophes : ’a’, ’jour’. On considère les
caractères comme des chaînes de caractères de longueur 1 et identifie chaînes de caractères et liste de
caractères.
Exemple :
La liste 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 encore, ’abcde’ ; [’abc’ ’de’] est identique `a ’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 :
La liste de caractères [’a’ ’b’ ’c’ ’d’ ’e’] est identique à la chaînes de caractères [’abcde’] :

>> ['abc' ; 'abcd']
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

Cellules et tableaux de cellules - cell array
Une cellule est un conteneur dans le quel on peut placer toute sorte d’objets : nombre, chaîne de
caractères, tableau et même tableau de cellules. Les tableaux de cellules permettent d’associer dans
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 6

une même structure des éléments de nature très différente. La syntaxe des tableaux de cellules est
voisine de celle des tableaux usuels, les crochets étant remplacés par des accolades.
Exemple :
>> {'maria' 4 ; 'rachid' 7;'sami' 0}
ans =
'maria' [4]
'rachid' [7]
'sami' [0]
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
ultérieurement.
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é. Par abus de langage on dira “valeur d’une
variable” alors qu’il faudrait parler de l’objet associé à la variable.
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,1416
– eps : 2.2204e-016
– inf: Infini (1/0)
–NaN: “Not a Number” (0/0)
– i,j : i et j représentent tous deux le nombre imaginaire unité (0 + 1.0000i)
– realmin: plus petit nombre réel positif (2.2251e-308)
– realmax: plus grand nombre réel positif (1.7977e+308)
Exemple :
>> a = [1 2 3 4]
a =
1 2 3 4
>> a = 'abc'
a =
abc
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 7

Affectation
Le symbole d’affectation de valeur à une variable est le caractère =.
Exemple
>> a = [1 2 3 4]
a =
1 2 3 4
>> a = 'abc'
a =
abc
Espace de travail
Les commande who et whos
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.
Exemple :
>> 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
>> clear
>> a = 2 ; b = 'azerty'; c = [1 2 3 ; 5 3 4] ;
>> who
Your variables are:
a b c
La commande whos donne l’information plus complète suivante :
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
b 1x6 12 char
c 2x3 48 double
On peut également appliquer whos avec pour argument une ou plusieurs variables :
>> whos b c
Name Size Bytes Class Attributes
b 1x6 12 char
c 2x3 48 double
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 8

Les fonctions size, size( ,1) et size( ,2) : 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
argument.
Exemple:
>> clear
>> a = 2 ; b = 'azerty'; c = [1 2 3 ; 5 3 4] ;
>> 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)
ans =
2 3

>> [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 d’un
tableau :

>> size(c,1)
ans =
2

>> size(c,2)
ans =
3

La fonction class : retourne le nom de la classe à laquelle appartient la variable donné comme
argument.

Exemple:
>> ca=class(a)
ca =
double

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 9

>> cb=class(b)
cb =
char

Les commandes save, load et clear - fichiers.mat
Ces commandes permettent d’intervenir directement sur l’environnement de travail.
- save permet de sauver tout ou partie de l’espace de travail sous forme de fichiers binaires
appelés mat-files ou fichiers .mat :
- save : enregistre la totalité de l’espace de travail dans le fichier matlab.mat ;
- save nom de fichier : l’espace de travail est enregistré dans le fichier nom de fichier ;
- save nom de variable . . . nom de variable : enregistre les variables indiquées (et les objets
qui leurs sont associés) dans un fichier .mat qui porte le nom de la première variable ;
- save nom de fichier nom de variable . . . nom de variable : enregistre les variables dans le
fichier dont le nom a été indiqué.
- load permet d’ajouter le contenu d’un fichier .mat à l’espace de travail actuel ;
- clear supprime une ou plusieurs variables (et les objets aux quelles elles font référence) de
l’environnement de travail :
- clear sans argument, supprime toutes les variables de l’espace de travail actuel ;
- clear nom de variable . . . nom de variable : supprime les variables indiquées de l’espace de
travail.

Exemple:
>> a = 1 ; b = 2.5 ; t = eye(3) % la fonction eye(3) crée la matrice identité d'ordre 3.
t =
1 0 0
0 1 0
0 0 1
>> save a b % Les variables a et b sont enregistrées dans le fichier a.mat

>> clear a b % Les variables a et b sont supprimées comme le montre la ligne
suivante :

>> a
??? Undefined function or variable 'a'.

>> a=1;
>> load a % On ajoute le contenu de a.mat à l'espace de travail actuel :
>> x = a + b
x =
3.5000

>> save EsTr % L'espace de travail est enregistré dans le fichier EsTr.mat
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 10

>> clear % Toutes les variables de l'espace de travail sont supprimées
>> t
??? Undefined function or variable 't'.

Listes et vecteurs

Les listes et les vecteurs sont des tableaux au format particulier : un vecteur est un tableau qui ne
comporte qu’une seule colonne ; une liste (ou vecteur-ligne) est un tableau qui ne comporte qu’une
seule ligne. MATLAB propose un certain nombre de fonctions qui en simplifient l’usage.

Constructions de listes

- On peut définir la valeur d’une liste en donnant la suite de ses éléments séparés par des espaces,
la liste étant délimitée par des crochets :

>> liste1 = [1 3 5 10]
liste1 =
1 3 5 10

- L’expression Vi : pas : Vf crée une liste dont les éléments constituent une progression
arithmétique de valeur initiale Vi, de pas « pas » et dont tous les termes sont inférieurs ou
égaux à Vf. Lorsque la valeur du pas est omise (Vi:Vf), la valeur du pas est fixée par défaut à 1.

>> liste2 = 1 : 4
liste2 =
1 2 3 4

>> liste3 = 1 : 5.6
liste3 =
1 2 3 4 5

>> liste4 = 1.5 : 0.3 : 2.5
liste4 =
1.5000 1.8000 2.1000 2.4000

- La fonction linspace(Vi,Vf, n) crée une liste de n éléments uniformément répartis entre Vi et Vf.

>> liste4 = linspace(0.5, 2, 4)
liste4 =
0.5000 1.0000 1.5000 2.0000

Constructions de vecteurs

- On peut définir la valeur d’un vecteur en tapant entre deux crochets la suite de ses éléments
séparées par des points-virgules:

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 11

>> v1 = [1 ; 3 ; 5 ; 10]
v1 =
1
3
5
10

Les matrices ou tableaux

Les matrices suivent la même syntaxe que les vecteurs. Les composantes des lignes sont séparées
par des virgules et chaque ligne est séparée de l'autre par un point virgule.

Manipulation des matrices
La manipulation de matrice est particulièrement bien pensée sous Matlab. Voici quelques
exemples de commandes pour créer des matrices :
• a=[1 2 3;4 5 6] : créé une matrice de 2 lignes et 3 colonnes contenant les éléments 1 2 3 sur
la première ligne et 4 5 6 sur la deuxième.
• b=[1 ;2 ;3] :Créé un vecteur colonne valant 1 2 3.
• a=[1,2,3] (identique a =[1 2 3]) : créé le vecteur ligne 1 2 3 .
• b=[a;1 2 3] : Créé une matrice dont la première ligne vaut a et la deuxième ligne vaut 1 2 3.
• a=1:5 : Créé un vecteur valant 1 2 3 4 5.
• a=1:2:10 : Créé un vecteur valant 1 3 5 7 9.
• a=[1 3:5] : Créé un vecteur valant 1 3 4 5.
• a=(1:3)’ : donc réalise un vecteur colonne valant 1 2 3 (' permet de faire la transposée).
• a=zeros(3) : Créé une matrice de 0 de taille 3x3.
• a=ones(2,4) : Créé une matrice de 1 de taille 2x4.
• a=zeros(2,3,4) : Créé une matrice de 0 de taille 2x3x4.
• a=linspace(1,10,5) Créé un vecteur de 5 éléments linéairement réparti entre 1 et 10.
• a=logspace(1,10,5) Créé un vecteur de 5 éléments logarithmiques réparti entre 1 et 10.
Petit exemple : Créer avec la ligne de commande la plus courte possible la matrice A valant :
1 2 3 4 5 6 7 8 9
2 4 6 8 0 1 2 3 4
2 2 2 2 2 2 2 2 2
Note: La commande zeros est très souvent utilisée pour déclarer une matrice. En Matlab, les
variables ne sont pas déclarées. Cependant lorsqu'on affecte des valeurs à un vecteur ou une matrice,
celui ci s'agrandit au fur et à mesure et le temps d'exécution de la fonction peut alors être fortement
augmenté. Il est donc recommandé d'utiliser la commande zeros pour initialiser la matrice à la bonne
dimension.

Concaténation des tableaux (matrices)
>> T1 = [1 2 ; 2 3]
T1 =
1 2
2 3

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 12

>> T2 = [3 4 ; 6 7]
T2 =
3 4
6 7
>> T = [T1 , T2] % ou [T1 T2]
T =
1 2 3 4
2 3 6 7
>> T = [T1 ; T2]
T =
1 2
2 3
3 4
6 7
Accès aux éléments et sous-matrices
Soit la matrice a=[1 2 3;4 5 6] et le vecteur b=[1 2 3].
Noter que les indices des matrices Matlab commence à 1 (et non 0 comme en C).

• a(1,2)=4 : Affecte 4 à l'élément de la première ligne et deuxième colonne de la matrice a.
• b(3)=4 : Affecte 4 au troisième élément du vecteur b.
• a(1,:) : Sous matrice correspondant à la première ligne.
• a(:,2) : Sous matrice correspondant à la deuxième colonne.
• a(2,2:end) : Sous matrice correspondant à la deuxième ligne, colonne 2 à fin(soit 5 et 6).
• a(2,[1 end-1]) : Sous matrice correspondant à la 2
ème
ligne, colonne 1 et fin-1(soit 4 et 5).
• a([2 3],[1 2])=[1 2;3 4] : Affecte [1 2;3 4] à la sous matrice formé par les lignes 2 et 3,
colonne 1 et 2.
• a(:) : Vecteur colonne formé par tous les éléments de a.

Exemple : Reprendre A =
1 2 3 4 5 6 7 8 9
2 4 6 8 0 1 2 3 4
2 2 2 2 2 2 2 2 2
et inverser l'ordre des colonnes sur les éléments en gras (toujours en une seule ligne de
commande). C'est à dire que l'on doit avoir A=
8 7 6 5 4 3 2 1 9
3 2 1 0 8 6 4 2 4
2 2 2 2 2 2 2 2 2

Solution A=[1:9;2:2:8 0:4;2*ones(1,9)]
A([1,2],1:end-1)=A([1,2],end-1:-1:1)


Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 13

Logical indexing : Il est possible de construire une sous matrice en appliquant un masque
à la matrice principale. Exemple :
v=[1 2 3 4];
v(logical([1 0 1 0])) retourne [1 3]
v(v>2) retourne [3 4] (Equivalent à v(find(v>2)) mais plus rapide)

Opérations sur les matrices

Prenons A=[1+i 2+i 0;1 2 3;1 i 0] une matrice complexe et B=[1 2 3;4 5 6;7 8 9].
• A' : Adjoint de A (Conjugué de la transposée).
• A.' : transposée de A.
• C=B^-1; : Inverse de B.
• C*B : Produit matriciel.
• C.*B : Produit terme à terme.
• C+B : Somme.
• C^2 : C*C (puissance matricielle).
• C.^B : Puissance terme à terme.
• C./B : division terme à terme.
• C\B : équivalent à B^-1*C mais plus rapide car ne calcul pas l'inverse de B.
• B/C : Equivalent à (C'\B')'.
Note : On peut remplacer une des opérandes par un scalaire. Par exemple B+2 ajoute 2 à chacun
des termes de B.

Fonctions usuelles sur les matrices

Prenons B=[1 2 3;4 5 6;7 8 9], v=[1 0 1];
• size(B) : Vecteur correspond à la taille de chacune des dimensions de B (ici [3 3]).
• size(B,1) : Vecteur correspond à la taille de la première dimension de B.
• length(v) : Nombre d'élément dans v (Souvent utiliser quand v peut être un vecteur ligne ou
colonne).
• length(B) : maximum entre le nombre de lignes et le nombre de colonne (ici 3)
• f=diag(B) : Vecteur colonne contenant la diagonal de B.
• diag(f) : Matrice diagonal dont la diagonal correspond à f.
• det(B) : Déterminant.
• norm(B) : Norme.
• rank(B) : Rang.
• trace(B) : Rang.

Fonctions d'analyse

Chacune de ses fonctions peuvent être appliquée sur un vecteur ligne ou colonne. Si elles sont
appliquées sur des matrices chacune des colonnes est traitée indépendamment formant ainsi un
vecteur ligne.
• sum(B) : Somme ; voir mum(mum(M)) % M : matrice
• prod(B) : Produit ; voir prod(prod(M)) % M : matrice
• mean(B) : Moyenne
• std(B) : Ecart type
• var(B) : Variance (sans biais (/(N-1)))
• var(B,1) : Variance statistique (/N)
• max(B) : maximum; voir max(max(M)) % M : matrice ; voir aussi [max,ind]=max(M)
• min(B) : minimum; voir min(min(M)) % M : matrice
• voir les fonctions : vander(), exp(), expm(), sqrt(), sqrtm().
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 14

Autres diverses

• cumsum(v) : Somme cumulé.
• cumprod(v) : Produit cumulé.
• eye(5) : Renvoie la matrice identité de dimension 5x5.
• randn(3,4) : Renvoie 3x4 dont chaque terme suit une variable aléatoire gaussienne ; voir la
fonction rand().
• [P,D]=eig(C) : Diagonalisation de C : P*D*P^-1
• null(h) : Matrice orthogonal. (h*null(h)=0)
• pinv(h) : Pseudo inverse.
• sort(R) : Trie les éléments de chacune des colonnes indépendamment.
• sortrows(R,3) : Trie les lignes par rapport aux éléments de la troisième colonne.
• find(g==5) : Donne les positions des éléments de g qui sont égaux à 5 (find est une fonction qui
renvoie les positions des éléments non nulles. Dans le cas ou l'on cherche à obtenir
g(find(g==5)) le "logical indexing" est généralement plus rapide).

Fonctions avancés

Fonctions d'analyse numérique

• lu : Décomposition LU.
• chol : Cholesky.
• qr : Décomposition QR.
• qzhess : Hessenberg.
• schur : Schur.
• housh : Householder.
• krylov : Krylov.

Matrices et booléens

• b=(g>=5) : renvoie un vecteur b(ou une matrice) tel que b(i)=g(i)>=5
• mat3=(mat1==mat2) : Renvoie une matrice mat3 de même dimension que mat1 et mat2 avec
mat3(i,j)=mat1(i,j)==mat2(i,j)
• b=(g==5 | g==3) : b(i)=(g(i)==5 | g(i)==3) (même principe pour &)
• find(g==5) : Donne les positions des éléments de g qui sont égaux à 5 (find est une fonction qui
renvoie les positions des éléments non nulles)
• isequal(mat1,mat2) : Renvoie 1 si tous les membres de mat1 sont égaux à ceux de mat2 sinon 0
• mat3 = ismember(mat1,mat2) : mat3(i,j)=1 si mat1(i,j) est dans mat2 (sinon 0)
• any(vec) : Renvoie 1 si un ou plusieurs éléments de vec sont 1 (sinon 0)
• all(vec) : Renvoie 1 si tous les éléments de vec sont 1 (sinon 0)

Fonctions de transformation de matrices :

• reshape([1 2 3 4 5 6],2,3) : renvoie [1 2 3;4 5 6] (Recréé une matrice à partir d'un vecteur).
• fliplr([1 2 3;4 5 6]) : renvoie [3 2 1;6 5 4] (replace les éléments de droite à gauche).
• flipud([1 2 3;4 5 6]) : renvoie [4 5 6;1 2 3] (replace les éléments de bas en haut).
• flipdim : Replace les éléments dans l'ordre inversé suivant la dimension spécifiée.
• permute : Permet de permuter les dimensions d'une matrice (généralisation de la transposée en
dimension >2)
• ipermute : Permet de faire l'opération inverse de permute
• tril : Extrait la matrice triangulaire inférieure
• triu : Extrait la matrice triangulaire supérieure
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 15

Gestion des ensembles:

• E=unique(mat) : Renvoie un vecteur colonne contenant tous les élément triés de mat mais une
et une seule fois (Ce qui permet de considerer après E comme un ensemble d'élément)
• intersect(var1,var2) : Intersection (trié)
• setdiff(var1,var2) : Différence
• union(var1,var2) : Union

TDs

Exercice 1 : On note , et les vecteurs suivants :


Calculer
3 1 2
5 2 , 5 2 , 5 2 , u 3u, w v u w v u w v u + ÷ + ÷ + ÷

Exercice2 : On note et les nombres complexes

Calculer les modules de et de , les produits u v , v u , la partie réelle et la partie imaginaire de
2 3
u v + .
Exercice3 : On note , et les matrices suivantes

1. Calculer les matrices
T
AB et BA AB, .
2. Calculer les matrices
T
2
BB - I D = .
3. Calculer les déterminants des matrices , , , et .
4. Calculer les inverses des matrices , , , et .
5. Calculer les valeurs propres de la matrice . Quel est le rayon spectral de ?
6. Déterminer les vecteurs propres de la matrice .
Exercice4 : On pose


Que font les instructions suivantes : 3*A; A.*B; A./B; cos(A); exp(B);

Exercice5 : Pour chacune des matrices



Calculer
A
n
i
, pour 1,2,3,... n = Que vaut
A
n
n
lim
+· ÷
?.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 16

Exercice6 : On pose


Que font les instructions suivantes
v=[1, 2, 4, 7];
A(v)=A(v) + 0.01;
B(v)=abs(B(v));
Exercice7 :
1. Créer un vecteur de coordonnées contenant les nombres : -5, -4,…, 4, 5.
2. Créer un vecteur de coordonnées contenant les nombres : -500, -499, -498,…, 499, 500.
3. Créer un vecteur contenant valeurs entre et séparées par un incrément constant.
Variables et fonctions

Les variables

On définit une variable en lui donnant : un nom et une valeur numérique ou une expression
mathématique :
a =1.25;
x = 0:0.5:10;
y = a*x;
z = y.^2;


Expressions mathématiques

On écrit les expressions mathématiques de la façon habituelle:
z = 5*exp(-0.4*x).*sin(7.5*y);

Fonctions mathématiques

Les fonctions mathématiques de base sont données dans le tableau suivant:

Abs valeur absolue
module (nb. cmplx)
angle
argument (nb. cmplx)
sqrt
racine carrée

real
partie réelle

imag
partie imaginaire

conj
conjuguée (nb.cmplx
round
arrondir

fix
arrondir (vers 0)
floor
arrondir (vers -·)

ceil
arrondir (vers ·)

sign
signe
rem
reste

exp
exponentielle

log
logarithme base e

log10
logarithme base 10

Les fonctions trigonométriques sont données dans le tableau suivant:

Sin cos tan asin Acos atan atan2

Sinh cosh tanh asinh Acosh atanh



Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 17

Exemple:

>> x=-2+5i
x =
-2.0000 + 5.0000i
>> a=real(x)
a =
-2
>> b=imag(x)
b =
5
>> X=abs(x)
X =
5.3852
>> alfa=angle(x)
alfa =
1.9513

Exemple :

>> w=50;
>> t=0.5e-3;
>> y=25*exp(-4*t)*cos(w*t)
y =
24.9423

Représentation graphique sous MATLAB

Dans toutes les représentations graphiques, le logiciel se base sur des données discrètes rangées dans
des matrices ou des vecteurs colonnes. Par exemple, pour représenter des courbes du
type ) (x f y = ou des surfaces ) , ( y x f z = , les données x, y, z doivent être des vecteurs colonnes (x
et y) ou des matrices (z) aux dimensions compatibles. L'instruction de dessin correspondante (par
exemple plot(x,y) pour tracer des courbes planes) est alors utilisée et éventuellement complétée par
des arguments optionnels (couleur, type de trait, échelle sur les axes, etc...). La visualisation du résultat
s'effectue dans une fenêtre graphique (avec possibilité de zoom, de rotation, d'impression).
Exemple de représentation graphique en dimension deux (en 2D)
En exécutant le script suivant:
x=linspace(0,pi,30); % crée un tableau de 30 composantes
uniformément
% réparties entre 0 et pi
y=sin(x);
plot(x,y) % relie les points (xi,yi) par un trait continu
noir
plot(x,y,'p-b') % relie les points (xi,yi) par un trait continu
de couleur et
% matérialise les points avec un symbole
plot(x,y,'pb') % matérialise les points (xi,yi) avec un
symbole de couleur

- Les points peuvent être matérialisés par le symbole p prenant les valeurs suivants: + x
- Les couleurs sont repérées par leur initiale en anglais: r(ed), b(lue), blac(k), w(hite), y(ellow),
m(agenta), g(reen)
- On peut rajouter un titre à la figure avec la commande title
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 18

title('sin(x) sur l''intervalle [0,pi]')
(Remarquer l'emploi d'une double apostrophe pour en faire figurer une dans une chaîne de caractères
délimitée justement par deux apostrophes.)
- On peut représenter plusieurs courbes sur la même figure de plusieurs manières: d'abord par un
seul appel à la fonction plot
plot(x,cos(x),x,sin(x),x,exp(-x)) % Matlab va
automatiquement utiliser des couleurs
% différentes
pour chaque courbe
plot(x,cos(x),'o-r',x,sin(x),'x-b',x,exp(-x),'*-g') % pour spécifier
le type
% de symbole et la couleur à
utiliser pour chaque courbe
legend('cos(x)','sin(x)','exp(-x)') % pour rajouter une légende.

Par défaut la fenêtre graphique est effacée avant chaque commande plot. Pour superposer des
courbes par des appels successifs à cette fonction, il faut utiliser auparavant la commande hold on.

hold on
plot(x,cos(x),'o-r')
plot(x,sin(x),'x-b')
plot(x,exp(-x),'*-g')
legend('cos(x)','sin(x)','exp(-x)')

Principales instructions graphiques.

Instruction Description
plot(x,y)
tracé de la courbe passant par les points (x,y)
loglog(x,y)
idem avec échelle logarithmique sur les deux axes
semilogx(x,y) idem avec échelle logarithmique sur l'axe Ox
semilogy(x,y)
idem avec échelle logarithmique sur l'axe Oy
plotyy(x,y,x,z)
courbe (x,y) avec l'axe 0y à gauche et courbe (x,z)
avec l'axe 0z à droite
xlabel('label')
légende pour l'axe 0x
ylabel('label') légende pour l'axe 0y
title('label')
titre au dessus du graphique
legend('lab1','lab2','lab3',...)
légende avec une chaîne de caractères pour chaque
courbe
text(x,y,'label')
chaîne de caractères à la position x,y
plot3(x,y,z)
tracé de la surface passant par les points (x,y,z)
hold on, hold off
active/désactive la conservation de la fenêtre
graphique à l'appel de la fonction plot


Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 19

Exemple2:
>> t=0:0.01e-3:0.06;
>> y=10*exp(-60*t).*cos(120*pi*t);
>> z=10*exp(-60*t).*sin(120*pi*t);
>> plot(t,y,'r',t,z,'g'),grid
>> a=10*exp(-60*t);
>> hold
Current plot held
>> plot(t,a,'b--')
>> plot(t,-a,'b--')
>> title('Fonctions sinusoidales amorties')
>> xlabel('Temps , s'),ylabel('Tension , V')
>> hold off
>> plot(y,z),grid
>> axis equal
>> xlabel('y'),ylabel('z')

Graphique multiple

On peut tracer plusieurs graphiques dans la même fenêtre en utilisant l’instruction subplot pour
diviser la fenêtre en plusieurs parties.

Syntaxe: subplot(nl,nc,position).
Exemple:

>> w=logspace(0,3,1000);
>> s=j*w;
>> H=225./(s.*s+3*s+225);
>> AdB=20*log10(abs(H));
>> phase=angle(H)*(180/pi);
>> subplot(2,1,1),semilogx(w,AdB),grid
>> xlabel('w , rad/s'),ylabel('Amplitude , dB')
>> subplot(2,1,2),semilogx(w,phase),grid
>> xlabel('w , rad/s'),ylabel('Phase , degre')

Autres types de représentation
Outre la représentation cartésienne de courbes ou de surfaces, il existe d'autres possibilités pour
illustrer graphiquement un résultat. On peut citer parmi les plus utiles, les instructions
contour,ezmesh (pour tracer les courbes de niveau d'une surface paramétrique), mesh,ezplot3
(courbes paramétriques dans l'espace), hist, rose (histogramme d'un échantillon de données
statistiques), stem, stairs, bar, pie, compass, etc...
Programmation sous MATLAB : Expressions, scripts et m-files
Introduction
Un des avantages de MATLAB est de proposer une syntaxe tr`es 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’´ecrire des boucles pour effectuer la somme ou le produit de
deux matrices).
Opérations de MATLAB
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 20

Opérateurs
Classés par ordre de priorité décroissante, les opérateurs utilisés par MATLAB sont les suivants :
Exponentiation et transposition
o l’exponentiation ^ et .^
o la conjugaison ’ et la transposition .’
Opérateurs multiplicatifs
o les produits * et .*,
o les divisions à droite /, ./ et à gauche \, .\
Opérateurs additifs et de négation
o les opérateurs additifs unaire et binaires + et -
o la négation ~
o opérateurs booléens avec par ordre de priorité :
Opérateurs de comparaison
o <, >, <= et >=
o égalité ==, non égalité ~=
Opérateurs logiques
o et logique &
o ou logique |
o et logique court-circuité &&
o ou logique court-circuité ||

Les opérateurs logiques court-circuités sont des opérateurs pour lesquels le résultat est acquis dés que
l’évaluation du premier opérande permet d’affirmer le résultat global sans évaluer le second opérande.
Si a et b sont des variables booléennes :
o a && b vaut false dés que a vaut false
o a || b vaut true dés que a vaut true.

D’autre part on rappelle qu’il n’existe pas dans MATLAB de “vrai” type booléen : 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 :

>> 2&3
ans =
1 % true ET true vaut true

>> 2&0
ans =
0 % true ET false vaut false

>> 2|3
ans =
1 % true OU true vaut true
>> ~3
ans =
0 % le contraire de true (= 3) est false
>> 2==3
ans =
0 % l’égalité est bien celle des nombres et non celle des prédicats !
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 21

Opérations booléennes - Tableaux booléens

Dans la suite, “tableau booléen” ou logical array désignera un tableau dont les éléments ont
pour valeur 0 ou 1, 0 représentant false et 1, représentant true. La fonction islogical teste le caractère
booléen d’un tableau.

Opérateurs de comparaison : sont peut-être ceux dont le comportement peut apparaitre le plus
déroutant parce qu’ils fonctionnent “terme à terme ” et que le résultat est un tableau booléen.

Exemple:
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
2
>> C =(A == B)
C = % C est le tableau résultant d’une opération booléenne
0 0
1 0
>> islogical(C)
ans =
1 % C est bien un tableau booléen

Dans l’expression a == b la comparaison porte sur les éléments homologues de A et B :
1 == 3  false  0, 2 == 1  false  0
1 == 1  true  1, 0 == 2  false  0

Il en est de même pour A > B :
>> A > B
ans =
0 1
1 0
En résumé, si A et B sont des tableaux de même format et si op désigne un des opérateurs
booléens <, >, <=, >=, ==, = le résultat de A op B est défini par la règle suivante : A op B
produit comme résultat un “tableau booléen” de même format, dont les éléments sont définis
par Aij op Bij.

Ainsi que le montre l’exemple ci-dessous, un tableau formé de 0 et de 1 n’est pas nécessairement un
tableau booléen :
>> A = eye(2)
A =
1 0
0 1
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 22

>> islogical(A)
ans =
0 % A n’est pas un tableau booléen
>> class(A)
ans =
double

Seuls les tableaux
o résultant d’une opération booléenne ;
o formés de 0 et de 1 et transformés en tableaux booléens par la fonction logical ;
sont des tableaux booléens.

Avec le même tableau A que précédemment :
>> B = logical(A)
B =
1 0
0 1

>> test = islogical(B)
test =
1 % B est un tableau booléen

Opérateurs logiques

Soient A et B deux tableaux de même format, évaluons A & B :

>> A = [1 2 ; 1 0] , B = [2 1 ; 1 0]
A =
1 2
1 0

B =
2 1
1 2

>> A & B
ans =
1 1
1 0

>> islogical(ans)
ans =
1

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 23

MATLAB évalue sans problème A & B bien que les tableaux A et B ne soient pas des tableaux
booléens. Le résultat de l’évaluation ans, est un tableau booléen : avant l’évaluation MATLAB a
transformé les deux tableaux en tableaux booléens en suivant la règle usuelle, puis a effectué
l’opération logique terme à terme. Il en est de même pour les autres opérateurs logiques |, ||, &&.

Scripts et m-files

Scripts

Un script est une séquence d’expressions ou de commandes. Un script peut se développer sur
une ou plusieurs lignes. Les différentes expressions ou commandes doivent être séparées par une
virgule, un point-virgule ou par le symbole de saut de ligne constitué de trois points . . . suivis de
<entrer> (le rôle des trois points et d’inhiber le mécanisme d’évaluation lors d’un passage à la ligne).
Comme pour une expression unique, la frappe de <entrer> déclenche le processus d’évaluation. Les
expressions sont évaluées dans leur ordre d’´ecriture. Seule la valeur des expressions suivie d’une
virgule ou d’un saut de ligne est affichée, celle des expressions suivies d’un point-virgule, ne l’est pas.

>> a = .5, 2*a, save a, b = pi; 2*b, c = a*b
a =
0.5000
c =
1.5708
ans =
6.2832
c =1
.5708
>> ans
ans =
6.2832
Ecrire 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.

Création de m-files

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 MATLAB il existe un petit éditeur intégré que
l’on peut appeler à partir du menu file ou à partir de la barre de menu de la fenêtre de commande.

Exemple:
Dans la fenêtre de l’éditeur tapez les lignes suivantes :
% script - essai . m
a = .5;
b = pi;
c = a * b
Sauvez le fichier dans le répertoire de travail sous le nom de essai.m.


Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 24

Exécution d’un m-file

Pour exécuter le script contenu dans un m-file et Il suffit de taper le nom de ce m file dans la fenêtre de
commande suivi de < entrer >

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.

Eléments d’écriture de m-files

Commentaires : Les lignes de commentaires sont précédées du caractère %.
Entrées - input et menu : 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.

>> 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.

result = menu(Traitement’, ’Déterminant’, ’Inversion’, ’Quitter’)

Si l’utilisateur sélectionne Déterminant la variable result prend la valeur 1, la valeur 2 s’il
sélectionne Inversion et la valeur 3 pour Quitter.

Affichages - disp - num2str – format : La valeur d’une variable est affichée en faisant évaluer une
expression réduite à la variable elle-même.

>> a = [1 2] ;
>> a
a =
1 2
- La fonction num2str(x) où x est un nombre, retourne la valeur littérale de ce nombre.

>> s = [’la valeur de pi est : ’ num2str(pi)] ;
>> s
s =
la valeur de pi est : 3.1416

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 25

- La commande disp(t) où t est une chaîne de caractères ou un tableau, affiche la valeur de cette
chaîne de caractère ou de ce tableau sans faire référence au nom de la variable. Cette
commande sera souvent utilisée avec num2str pour afficher les valeurs des expressions
numériques.

>> a = [1 2;3 4] ;
>> disp(a)
1 2
3 4
>> disp([ ’ordre de la matrice a : ’ num2str(size(a,1)) ] );
ordre de la matrice a : 2

- La commande format permet de choisir entre plusieurs modes d’affichage (sans interférer avec le
type des valeurs numériques affichées qui est toujours le type double) :

Commande Affichage Exemple
format short
format short e
format long
format long e
format hex
format bank
format rat
format +
décimal à 5 chiffres
scientifique à 5 chiffres
décimal à 16 chiffres
scientifique à 16 chiffres
hexadécimal
virgule fixe à deux décimales
fractionnaire
utilise les symboles +, - et espace pour + afficher
les nombres positifs négatifs et nuls
31.416
31.416e+01
31.4159265358979
314159265358979e+01

31.41
3550/113
+

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 m-file test.m dans la fenêtre de commande.

Instructions de contrôle
Les instructions de contrôle sous MATLAB sont très proches de celles existant dans d'autres
langages de programmation.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 26

Boucle FOR : parcours d'un intervalle
Une première possibilité pour exécuter une séquence d'instructions de manière répétée consiste à
effectuer une boucle pour les valeurs d'un indice, incrémenté à chaque itération, variant entre deux
bornes données. Ce processus est mis en œuvre par la boucle for.

Syntaxe :
for indice = borne_inf : borne_sup
séquence d'instructions
end
Où :
- indice est une variable appelée l'indice de la boucle;
- borne_inf et borne_sup sont deux constantes réelles (appelées paramètres de la boucle);
- séquence d'instructions est le traitement à effectuer pour les valeurs d'indices variant entre
borne_inf et borne_sup avec un incrément de 1. On parle du corps de la boucle.

Remarque
L'indice de boucle ne prend pas nécessairement des valeurs entières. D'autre part il n'est pas
nécessaire que l'indice de la boucle apparaisse dans le corps de la boucle; par contre il est interdit de
modifier sa valeur s'il apparaît. Il est possible d'imbriquer des boucles mais elles ne doivent pas se
recouvrir. On peut utiliser un incrément (pas) autre que 1 (valeur par défaut). La syntaxe est alors
borne_inf: pas : borne_sup. Le pas peut être négatif.

>> x = [ ] ;
>> for (k = 1 : 5), x = [x, sqrt(k)], end

>> for r=1.1:-0.1:0.75
disp(['r = ', num2str(r)]);
end
r = 1.1
r = 1
r = 0.9
r = 0.8

Voici un exemple d'utilisation d'une boucle pour calculer n! (vérifier prod([1:n])).
>> n = 4;
>> nfac = 1;
>> for k = 1:n
nfac = nfac*k;
end
>> nfac
nfac =
24

Boucle WHILE : tant que . . . faire

Consiste à effectuer une boucle tant qu'une condition reste vérifiée. On arrête de boucler dès que cette
condition n'est plus satisfaite. Ce processus est mis en œuvre par la boucle while.
Syntaxe :
while expression logique
séquence d'instructions
end

- expression logique : est une expression dont le résultat peut être vrai ou faux;
- séquence d'instructions: est le traitement à effectuer tant que expression logique est vraie.

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 27

Remarque
expression logique est en général le résultat d'un test (par exemple i < Imax) ou le résultat d'une
fonction logique (par exemple all(x)). Il est impératif que le traitement de la séquence
d'instructions agisse sur le résultat de expression logique sans quoi on boucle indéfiniment.

Voici comment calculer n! avec une boucle while:
>> n = 4;
>> k = 1; nfac = 1;
>> while k <= n
nfac = nfac*k;
k = k+1;
end
>> nfac
nfac =
24

L'instruction conditionnée IF

Exécuter une séquence d'instructions seulement dans le cas où une condition donnée est vérifiée
au préalable. Différentes formes d'instruction conditionnée existent sous MATLAB.
L'instruction conditionnée la plus simple a la forme suivante:
Syntaxe :
if expression logique
séquence d'instructions
end

- expression logique : est une expression dont le résultat peut être vrai ou faux;
- séquence d'instructions : est le traitement à effectuer si expression logique est vraie.


Remarque
Contrairement à certains langages de programmation, il n'y a pas de mot clé << then >> dans cette
instruction conditionnée. Notez également que la marque de fin de bloc conditionné est le mot clé end
et non pas<< endif >>.

Il existe une séquence conditionnée sous forme d'alternatives:
Syntaxe :
if expression logique
séquence d'instructions1
else
séquence d'instructions2
end

- expression logique : est une expression dont le résultat peut être vrai ou faux;
- séquence d'instructions1 : est la séquence d'instructions à exécuter dans le cas où expression
logique est vraie et séquence d'instructions2 est la séquence d'instructions à exécuter dans le
cas où expression logique est faux.

Il est possible d'effectuer un choix en cascade:
Syntaxe :
if expression logique 1
séquence d'instructions 1
elseif expression logique 2
séquence d'instructions 2
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 28

...
elseif expression logique N
séquence d'instructions N
else
séquence d'instructions par défaut
end

Remarque
Attention à ne pas laisser d'espace entre else et if; le mot clé est elseif.
On utilise fréquemment un choix en cascade lors d'initialisation de données. Par exemple, on initialise
une matrice A en fonction de la valeur d'une variable numex (numéro d'exemple) de la manière
suivante:

if numex == 1
A = ones(n);
elseif numex == 2
A = magic(n);
elseif numex == 3 | numex == 4
A = rand(n);
else
error('numero d''exemple non prevu ...');
end

Choix ventilé, l'instruction switch

Une alternative à l'utilisation d'une séquence d'instructions conditionnées pour effectuer un choix en
cascade existe. Il s'agit de l'instruction switch.



Syntaxe :
switch var
case cst
1
,
séquence d'instructions 1
case cst
2
,
séquence d'instructions 2
...
Case cst
N
,
séquence d'instructions N
otherwise
séquence d'instructions par défaut
end

- var : est une variable numérique ou une variable chaîne de caractères;
- cst
1
, ..., cst
N
: sont des constantes numérique ou des constantes chaîne de caractères;
- séquence d'instructions i : est la séquence d'instructions à exécuter si le contenu de la variable
var est égal à la constante cst
i
(var==cst
i
).

Remarque
La variable var doit bien entendu être du même type que les constantes cst
1
, ..., cst
N
.
Il n'est pas nécessaire de prévoir un cas par défaut (bien que cela soit préférable). S'il n'y a pas de cas
par défaut et si la variable var n'est égale à aucune des constantes, alors le programme continue à la
première instruction suivant le mot-clé end.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 29

Il est possible de regrouper plusieurs << cas >> si la séquence d'instructions à exécuter est la même pour
ces différents cas. La syntaxe est alors,
case{ cst
k
, cst
l
, ...}
séquence d'instructions commune

Reprenons l'exemple où l'on souhaite initialiser une matrice A en fonction de la valeur prise par une
variable numérique numex (numéro d'exemple).

n =input(‘entrer un entier’) ;

switch rem(n,3) % reste de la division de n par 3
case 0,
disp(’Multiple de 3’)
case 1,
disp(’1 modulo 3’)
case 2,
disp(’2 modulo 3’)
otherwise,
disp(’Nombre n’’egatif’)
end

function A = initA(n,numex)

switch numex
case 1,
A = ones(n)
case 2,
A = magic(n);
case {3,4},
A = rand(n);
otherwise
error('numero d''exemple non prevu ...');
end

Voici un exemple de choix ventilé portant sur une variable de type chaîne de caractères.

rep = input('Votre réponse (oui, non, chepas) :');

switch rep
case {'oui','o'},
disp('bravo ...');
case {'non','n'}
disp('perdu ...');
case 'chepas'
disp('c''est pourtant facile ...');
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 mot clé end fermant la boucle. En cas de boucles imbriquées, on
interrompt seulement l'exécution de la boucle intérieure contenant l'instruction break. L'instruction
return provoque un retour au programme appelant (ou au clavier). Les instructions suivant le return
ne sont donc pas exécutées. L'instruction return est souvent utilisée conjointement avec une
instruction conditionnée par exemple pour tester dans le corps d'une fonction si les paramètres d'entrée
ont les valeurs attendues.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 30

- La commande pause permet d'interrompre l'exécution du programme. L'exécution normale
reprend dès que l'utilisateur enfonce une touche du clavier. L'instruction pause(n) suspend l'exécution
du programme pendant n secondes.

Fonctions et m-files sous MATLAB

Les m-files sont aussi le moyen pour l’utilisateur de MATLAB de définir ses propres fonctions.

Exemple
La fonction moyenne définie ci-dessous calcule la moyenne des éléments d’une liste ou d’un vecteur.
Le texte de cette fonction est saisi dans un éditeur (l’éditeur intégré pour les versions MacOs ou
Windows).
1 function m = moyenne(x)
2 % MOYENNE(X) : moyenne des éléments 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 être 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 la 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 être 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 commande
help pour fournir la définition de la fonction :

>> help moyenne
MOYENNE(X) : moyenne des éléments d’une liste ou d’un vecteur
Un argument autre qu’une liste ou un vecteur conduit a une erreur

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.

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.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 31

• 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 apparaitre 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

1 function [m, v] = myStat(x)
2 % MYSTAT(X) : moyenne et variance des éléments 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 être 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é atteinte ;
– 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é atteinte,
– 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.

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

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 ;
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 32


1 function [t,b] = test2(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 tic ;
5 a = 1 : 1 : n ;
6 b = sqrt(a) ;
7 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 dispose d’un utilitaire appelé profiler qui est précieux pour étudier les performances d’une
ou plusieurs fonctions. Les modalités d’utilisation du profiler ont évolué en fonction des versions de
MATLAB. On les trouvera dans l’aide en ligne help profile.

Fonctions pour Séries et Transformées de Fourier

Les fonctions Matlab les plus utilisées pour l'analyse de Fourier sont les suivantes, où x est un vecteur
ou une matrice sur lequel les opérations de Fourier sont appliquées:

Fonctions Description Dans Matlab
fft
"Fast Fourier Transform", (similaire à la série de Fourier en temps
discret, aussi utilisée pour évaluer la transformée de Fourier en temps
discret)
X = fft(x)
ifft
"Inverse Fast Fourier Transform"
x = ifft(X)
fftshift
Déplace les composantes à fréquence nulle au milieu du spectre. S'il
s'agit d'un vecteur, la fonction interchange la moitié droite avec la
moitié gauche de X. Pour les matrices, la fonction interchange le 1
er

et le 3
ème
quadrants avec le 2
ème
et 4
ème
.
fftshift(X)

Exemple:
Pour trouver des échantillons de la transformée de Fourier d'un signal, il faut utiliser la fonction "fft".

figure(1)
T=0.01;
Fs=1/T; % fréquence d'échantillonnage de 100 Hz
t = 0:T:1;
x = sin(2*pi*10*t); % signal fréquence de 10 Hz
plot(t,x)
title('Signal')
xlabel('temps (ms)')

Maintenant tapez:

figure(2)
FFT_size=2048;
X=fft(x,FFT_size);
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 33

f=(0:FFT_size/2)/(FFT_size/2)*Fs/2;
plot(f,abs(X(1:FFT_size/2+1))); %on voit que le signal est à 10 Hz
title('Signal en fréquence');
xlabel('Fréquence(Hz)');
ylabel('Amplitude');

Polynômes :

Les polynômes sont traités comme des vecteurs de coefficients dans Matlab. Par exemple, l'équation
polynomiale y(x) = 2x3 + 6x2 + 5x + 12 sera représentée par le vecteur y = [2 6 5 12]. Une fois que le
vecteur est bien posé, il est possible de trouver avec Matlab les racines du polynôme, étant donné qu'on
connaît l'équation, ou encore de trouver l'équation polynomiale en connaissant les racines. Voici le
tableau décrivant les commandes Matlab :

Fonctions pour Polynômes Description
poly Construction de polynômes à partir des racines
roots Calcul des racines
polyval Évalue à un point
polyvalm Évaluation en une matrice de points
deconv Division de polynômes
conv Multiplication de polynômes
residue Décomposition en résidus
polyfit Approximation du polynôme
polyder Différentiation

clear
clc
%vecteur représentant les coefficients du polynôme y(x) = 2x
3
+ 6x
2
+ 5x + 12
y = [2 6 5 12];
%Racines
racines=roots(y);
disp(racines)
%A partir des racines, trouvons l'équation
approx_equation=poly(racines);
disp(approx_equation)
%Evaluons le polynôme pour différents points dans un intervalle
%Construction du vecteur de points
points=0:0.1:2;
%Évalue le polynôme à ces points
y_evalue=polyval(y,points);
disp(y_evalue)
%Affichage du polynôme approximé pour les valeurs entre 0 et 2
plot(points,y_evalue)

Pour multiplier deux polynômes y(x) et z(x), il faut utiliser la commande "conv". Pour la division ,
utilisez "deconv".

Exemple:

clc
clear
%Premier polynôme y(x) = 2x
3
+ 6x
2
+ 5x + 12
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 34

y = [2 6 5 12];
%Deuxième polynôme z(x) = 6x
2
+ 87x + 20
z=[0 6 87 20];
multiplication=conv(y,z);
disp(multiplication)
%Le résultat de la multiplication donne la réponse en forme de vecteur
%multiplication = 12x
5
+ 210x
4
+ 592x
3
+ 627x
2
+ 1144x + 240

Pour la division, si y(x) n'est pas un facteur de z(x), on obtiendra un "reste" après la division.

Exemple:

[quotient,restant]=deconv(z,y);
disp(quotient)
disp(restant)

Fonctions d'optimisation

Fonctions d’Optimoisation Description
fsolve Résolution d'un système d'équations non-linéaires
fzero Trouve les zéros d'une fonction à une variable
fmin Minimisation d'une fonction à une variable
fmins Minimisation d'une fonction à plusieurs variables

Analyse de systèmes à temps continu

Soit la fonction de transfert suivante:
0
1
1
0
1
1
...
...
) (
) (
) (
a s a s a
b s b s b
s A
s B
s H
n
n
n
n
m
m
m
m
+ + +
+ + +
= =
÷
÷
÷
÷

Dans Matlab, mettez les coefficients sous une forme de vecteurs:
] ,..., , [ et ] ,..., , [
0 1 0 1
a a a den b b b num
n n m m ÷ ÷
= =
Aussi, une fonction de transfert peut être écrite en fonction de ses pôles et de ses zéros, qui peuvent
être trouvés par la commande "tf2zp":
) )...( )( (
) )...( )( (
) (
1 1
1 1
p s p s p s
z s z s z s
K s H
n n
m m
÷ ÷ ÷
÷ ÷ ÷
=
÷
÷

où z
i
: zéros; p
j
: pôles; K: gain statique.

Tableau des commandes pour l'analyse de fonctions de transfert en temps continu:

Fonctions Description Matlab
tf2zp
Donne les zéros et les pôles de la fonction
de transfert H(s)
[z,p,k] = tf2zp(num,den)
zp2tf
à partir des zéros et des pôles, trouve la
fonction de transfert
[num,den] = zp2tf(z,p,k)
feedback
Calcule un modèle LTI pour un système à
boucle-fermée. y = sys * u
sys1
sys2
+ U Y

sys = feedback(sys1,sys2)
series
Connecte deux modèles LTI en série d'une sys=series(sys1,sys2,outputs1,inputs2)
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 35

manière que la sortie du 1er système est
reliée à l'entrée du deuxième.
parallel
Connecte deux systèmes LTI en parallèle sys=parallel(sys1,sys2,in1,in2,out1,out2)
freqs
Calcule la CTFT (transformée de Fourier)
du système connaissant sa fonction de
transfert.
w:vecteur de fréquences désirées
num: numérateur
den: dénominateur
[H,w] = freqs(num,den,w)

De plus, l'utilisation des fonctions "step", "impulse, "lsim", et "bode" sera décrite dans les sections qui
suivent.

Exemple:
Pour la fonction de transfert suivante:
6 5 4 3
4
) (
2 3
+ + +
=
s s s
s H

clc
clear
num=[4];
den=[3 4 5 6];
%Pour trouver les pôles et zéros
[z,p,k] = tf2zp(num,den);
disp('poles:')
disp(p)
disp('zeros:')
disp(z)
%Maintenant à partir des pôles et zéros, trouvons la fonction de transfert:
[num2,den2] = zp2tf(z,p,k);
disp(num2)
disp(den2)

Réponse à l'échelon

Pour trouver la réponse à l'échelon ("step response") d'un système, utilisez la commande "step" dans
Matlab.

Exemple:

clc
clear
%Fonction de transfert H(s)=4/(3s
2
+2s+4)
num=[4];
den=[3 2 4];
%Step Response
step(num,den)

Réponse impulsionnelle

Pour dessiner la réponse à l'impulsion (réponse impulsionnelle, "impulse response") du système,
utilisez la commande "impulse":
impulse(num,den)
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 36

Pour trouver la réponse à une entrée arbitraire spécifiée par l'utilisateur, il faut utiliser la commande
"lsim":

Exemple:

clc
clear
t=0:0.01:10;
%Fonction de transfert H(s)=4/(3s
2
+2s+4)
num=[4];
den=[3 2 4];
%Entrée du système
x=3*t;
lsim(num,den,x,t);

Bode plot

On peut également tracer le diagramme de Bode de cette fonction de transfert en utilisant la commande
"bode":

Exemple:

clc
clear
%Fonction de transfert H(s)=2/(3s+4)
num=[2];
den=[3 4];
bode(num,den)

Le diagramme de Bode donne deux graphiques, la réponse en amplitude/magnitude (en dB) et la
réponse en phase. Pour prédéterminer l'échelle sur laquelle le diagramme "bode" est dessiné, utilisez la
commande suivante: w=logspace(d1,d2)
Note: si d1= -1 et d2=4, ceci veut dire que le vecteur commence à 10
-1
et se termine à 10
4
.

Réponse en fréquence

Pour calculer la réponse en fréquence H (similaire au diagramme de Bode ...) d'une fonction de
transfert, il faut utiliser la commande "freqs". De plus, il faut définir un vecteur de fréquences "w" sur
lequel la réponse H est calculée.

Exemple:

clc
clear
%vecteur de fréquences
w=0:0.1:10;
%Fonction de transfert H(s)=2/(3s+4)
num=[2];
den=[3 4];
H=freqs(num,den,w);



Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 37

Analyse de système à temps discret

Voici un tableau des commandes principales:

Tableau des commandes:

Commandes Description Matlab
conv
Convolution de deux signaux en temps discret
x[n]*h[n]
y=conv(x,h)
dstep
"Step response", réponse à l'échelon pour un système
en temps discret, pour N points
dstep(num,den,N)
dimpulse
"Impulse Response", réponse impulsionnelle d'un
système en temps discret, pour N points
dimpulse(num,den,N)
filter
Filtre digital décrit par les vecteurs A (den) et B
(num). Filtre les données dans le vecteur X.
Y=filter(B,A,X)
freqz
Retourne la réponse en fréquence aux fréquences "w" [H,omega]=freqz(num,den,w)

Exemple:
%Step Response, réponse à l'échelon
n=0:10;
num=[1 0];
den=[0.9 0.1 0.001];
y=dstep(num,den,length(n));
%Graphique
stem(n,y)

TDs :

EX1
Déterminer les coefficients du polynôme caractérisé par les racines A = [0.5 2 4.3]. Calculer
la valeur prise par P(x) pour x = −2.

EX2
Calculer les sommes des éléments de chacune des diagonales d’une matrice.

EX3 Création d'une fonction
1) Générer un vecteur complexe défini par A=[ 0.22+0.5*i ; 0.4-0.2*i]
2) Extraire les parties réelles, imaginaires, modules et phases des éléments du vecteur A.
3) Créer une fonction farg_A permettant de calculer la phase des éléments complexes d'une matrice A.
Deux arguments en entrée pour la fonction sont imposés: le premier représente la matrice A et le
second est une variable texte qui permet de sortir le résultat, soit en radian, soit en degré. Strcmp

EX4 graphisme et fonctions
On propose de réaliser l'étude du polynôme suivant : p(x) = x3 − 30x + 30
1) Evaluer le polynôme sur le segment [-8,8] pour un pas de calcul de 0.1. polyval
2) Visualiser la courbe ainsi définie (Utiliser la notion de boucle interprétée). Plot, grid
3) Calculer les racines et les afficher sur le même graphique que précédemment. roots, hold,
zeros, length
4) Créer une fonction mypoly.m représentant le calcul du polynôme pour un x donné.
5) Evaluer l'aire formée par la courbe entre les deux premières racines. quad
6) Visualiser graphiquement l'aire calculée. fill
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 38

Fichiers de données

Matlab possède deux types de fichiers. Le premier type est constitué par les fichiers créés à un format
propriétaire à Matlab. Ces fichiers sont reconnaissables par leur extension en .mat. Ce format
spécifique permet de sauvegarder des variables au format numérique ou texte, des variables réelles ou
complexes très simplement. Le second type regroupe les fichiers binaires et ASCII communs à tous les
langages de programmation. Ces derniers permettent donc de communiquer avec l'extérieur et en
particulier de rapatrier des données collectées par d'autres logiciels.

Fichiers Matlab

Les fichiers nom_fic.mat constituent donc le système de fichiers propres à Matlab. Leur manipulation
est très facile, quel que soit le type ou la taille des matrices que l'on désire sauvegarder.

Commande save

Cette commande permet de créer ce premier type de fichier. La syntaxe est la suivante :
save nom_fich var1 var2 ...
Les variables sont sauvegardées comme des matrices et donc se retrouvent au même format lorsqu’on
les recharge afin de réutiliser.
Remarque: on peut sauvegarder une matrice var au format ASCII (8 ou 16 bits)
save PATH/nom_fich var ...-ascii

Commande load

Cette commande permet la relecture des variables sauvegardées avec la commande save.
load PATH/nom_fich
Remarque: La commande load offre aussi la lecture de fichier ASCII sous forme d'une matrice var
var =load PATH/nom_fich.txt

Fichiers binaires et ASCII: le format standard

Ce type de fichier permet d'importer et d'exporter des données vers l'extérieur dans le format de son
choix. Les commandes nécessaires à leur manipulation sont les suivantes :
fopen, fseek, sprint, fread, ferror, fscanf, fwrite, ftell, sscanf, fclose, fprintf

Commande fopen

Cette commande ouvre et donne des informations sur le fichier que l'on désire manipuler. Il y a deux
types de syntaxes :
fid =fopen('filename')
fid =fopen('filename','permission')
[fid,message] =fopen('filename','permission','architecture')
[filename,permission,architecture] =fopen(fid)
Ces trois premières commandes correspondent toutes à l'ouverture d'un fichier dans le mode spécifié
par l'argument permission.
r : Ouverture en lecture.
r+: Ouverture en lecture et en écriture.
w: Efface le contenu ou crée un nouveau fichier et le place en mode écriture.
w+: Efface le contenu ou crée un nouveau fichier et le place en mode écriture/lecture.
a: Crée un nouveau fichier ou ouvre un fichier existant pour l'écriture à la suite des données déjà
présentes.
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 39


a+: idem mais en lecture/écriture.
Si la commande a réussi, la variable fid devient un entier > 2 et la variable message est vide.
Si la commande n'a pas réussi, la variable fid prend la valeur -1. Dans ce cas, un texte a été associé à la
variable message qui peut vous aider à définir l'erreur de manipulation.

Commande fread

Elle permet la lecture d'un fichier de données binaires. Sa syntaxe est la suivante:
[A,count] =fread (fid,size,'precision')
La commande fread permet donc la lecture d'un fichier binaire spécifié par fid et écrit les données dans
une matrice A. fread réalise la lecture d'un nombre d'éléments spécifié par size suivant une précision
donnée.
Si l'argument size est donné, les entrées possibles sont:
n : lit n éléments vers un vecteur colonne.
inf : lit toutes les données et crée un vecteur de même taille (par défaut).
[m,n] lit (m*n) éléments et crée une matrice de taille [m,n] suivant l'ordre des colonnes.
Si la taille du fichier est inférieure, le reste se trouve combler par des zéros.
L'argument précision correspond à la précision numérique utilisée pour sauvegarder les données. Il
correspond au nombre d'octets alloué à la variable pour coder sa valeur. Un standard de précision
indépendant de la machine source est le float32 et float64. Ce format permet une bonne portabilité.

Matlab et Langage C
'schar' 'signed char' Signed character; 8 bits
'uchar' 'unsigned char' Unsigned character; 8 bits
'int8' 'integer*1' Integer; 8 bits
'int16' 'integer*2' Integer; 16 bits
'int32' 'integer*4' Integer; 32 bits
'int64' 'integer*8' Integer; 64 bits
'uint8' 'integer*1' Unsigned integer; 8 bits
'uint16' 'integer*2' Unsigned integer; 16 bits
'uint32' 'integer*4' Unsigned integer; 32 bits
'uint64' 'integer*8 Unsigned integer; 64 bits
'float32' 'real*4' Floating-point; 32 bits
'float64' 'real*8' Floating-point; 64 bits
'double' 'real*8' Floating-point; 64 bits

Formats portables
'char' 'char*1' Character; 8 bits
'short' 'short' Integer; 16 bits
'int' 'int' Integer; 32 bits
'long' 'long' Integer; 32 or 64 bits
'ushort' 'unsigned short' Unsigned integer; 16 bits
'uint' 'unsigned int' Unsigned integer; 32 bits
'ulong' 'unsigned long' Unsigned integer; 32 or 64 bits
'float' 'float' Floating-point; 32 bits

Commande fwrite

fwrite permet l'écriture de données contenues dans une matrice. Sa syntaxe est la suivante:
count =fwrite(fid,A,'precision')
Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 40

Elle permet donc de passer des données contenues dans la matrice A (sauvegarde dans le sens des
colonnes) vers un fichier défini par fid suivant une précision donnée. Count correspond au nombre de
données effectivement translatées.

Commande fclose

Cette commande correspond à la fermeture d'un ou de plusieurs fichiers. Sa syntaxe est:
status =fclose(fid)
status =fclose('all')

Commande fprintf

Cette commande est l'analogue de la commande fprintf en C: elle permet d'écrire une chaîne de
caractère ASCII dans le fichier. Cette chaîne de caractères peut contenir des caractères de formatage,
qui seront alors remplacés par les données numériques passées en argument.
Par exemple, la commande suivante écrira "x=2" dans le fichier associé à fid:
x=2;
fprintf(fid, 'x=%d', x);


TD
1) Définissez une matrice :
|
|
|
|
|
.
|

\
|
=
4.3 4.2 4.1
3.3 3.2 3.1
2.3 2.2 2.1
1.3 1.2 1.1
A
Enregistrez cette matrice A dans un fichier 'test.mat' au format Matlab (save)
Effacez l'ensemble des variables (clear all)
Chargez le fichier (load)
Vérifiez que la matrice A a bien été lue à partir du fichier.
2) Même question en enregistrant la matrice dans un fichier 'test.txt' au format ASCII à l'aide de save
et load.
Vérifiez à l'aide du bloc note que le fichier contient bien les valeurs de la matrice A de façon lisible.
3) Même question en enregistrant la matrice dans un fichier 'test.raw' au format binaire, en utilisant
fopen, fwrite, fread et fclose. On utilisera par exemple une précision 'double'.
La fonction fread ne renvoie pas une matrice, mais un vecteur; pourquoi ?
Quelle fonction matlab utiliser pour redonner sa "forme" 4x3 à la matrice ?















Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 41

Création d’une interface graphique avec MATLAB GUIDE

L'environnement GUIDE de Matlab permet de développer des GUI, des interfaces graphiques. Un GUI
est défini dans Matlab par deux fichiers dépendants, respectivement une figure et un script. La
programmation d'un GUI utilise des callbacks, et les échanges de données s'opèrent avec des handlers.

Éléments de base
- Fiche et composants visuels (aspect visuel).
- Code définissant fonctionnement de l‘interface (aspect fonctionnement).

Création d’une nouvelle interface
– Ligne de commande MATLAB : tapez « guide »
– Dans la fenêtre « GUIDE Quick Start », choisissez l‘onglet « Create New GUI ».
– Une fiche vierge quadrillée apparaît à l‘écran sur laquelle vous placerez les composants visuels de
l‘interface graphique.

Palette des composants visuels :
• « Push buttons » : (boutons poussoirs)
 Un seul état (stable).
 Identifié avec un court texte (paramètre ‗String‘).
 Événement à traiter: clic ou relâchement du bouton gauche de la souris.

• « Checkboxes » : (cases à cocher)
 Deux états possibles.
 Boutons d‘un même groupe sont indépendants (plusieurs options peuvent être sélectionnées
simultanément).

• « Radio buttons » : (boutons radio)
 Deux états (comme case à cocher).
 Boutons d’un même groupe sont mutuellement exclusifs (une seule option peut être sélectionnée
à la fois).

• « Frames » : (cadres)
 Bordure rectangulaire délimitant un groupe de contrôles.

• « Static text » : (champ de texte fixe)
 Affichage de texte.

• « Edit text » : (champ de texte éditable)
 Saisie de texte.
 Pas pour affichage.

• « Pop-up menus » : (menus déroulants)
 Choix d‘un item parmi une liste.
 Seul l‘item sélectionné est affiché.
 Événement à traiter : item cliqué par la souris.

• « Sliders » : (barres de défilement)
 Choix d‘une valeur numérique à l‘intérieur d‘un intervalle.
 Peuvent être orientées horizontalement ou verticalement.
 Événement à traiter : déplacement de la barre.

Cours de MATLAB Génie Electrique & Télécommunications GET1 Page 42

• « Listboxes » : (listes)
 Choix d‘un item parmi une liste.
 Un groupe d‘items, dont l‘item sélectionné, est affiché.
 Événement à traiter: item choisi par clic de la souris.

• Menus : (à partir du MenuEditor)
 Choix d‘un item parmi une liste d‘options permises ou non.
 Possibilité de clé de raccourcis.
 Possibilité de sous-menus.
 Événement à traiter: item de menu choisi par clic de souris.

• Axes :
 Permet d‘afficher un graphique tracé par MATLAB
 Permet d‘afficher des fichiers image
 Événement à traiter: l‘utilisateur clique sur la souris lorsque le curseur se trouve à l‘intérieur des
bornes du composant.

Accès aux données associées aux composants visuels
À tout objet d'interface, Matlab associe un pointeur qui permet d'accéder aux propriétés, le handler.

Certains handlers sont déjà définis par défaut :
 gcf : handler de la figure courante (get current figure).
 gca : axes courants de tracé (get current axes).
 gcbf : la figure cliquée (get callback figure).
 gcbo : l'objet qui appelle (celui sur lequel on a cliqué).
 0 : la fenêtre interpréteur Matlab, ou racine.

Certaines instructions nécessitent un handler :
 get et set : respectivement pour lire et pour changer les valeurs des propriétés.
 findobj : pour retrouver le handler d'un objet.
 propedit : pour éditer les propriétés d'un objet.
 delete : pour effacer un objet.

Exemple de GUI : construire sous GUIDE la fenêtre suivante: second –degre2.m