1.
PRESENTATION DU LOGICIEL MATLAB
MATLAB ou (Matrix Laboratory) est un logiciel de simulation numérique développé par
Mathworks Inc.
1.1 Environnement de Matlab
Répertoire courant (current directory)
Commandes (command window)
Workspace
Et la fenêtre Historique (command history).
Current directory affiche le répertoire courant et permet de sélectionner le répertoire de
travail et de visualiser ce qu'il contient.
Command window : permet de saisir des valeurs, de taper des instructions ligne par
ligne et d'exécuter des programmes. L'exécution d'un programme se fait directement dans cette
fenêtre en tapant le nom du programme puis la touche ENTREE du clavier.
Workspace : affiche la liste des variables en cours d’exécution
Historique: liste toutes les instructions déjà saisies dans la fenêtre de commandes. Il est
également possible, à partir de la fenêtre de commande, d'accéder à une commande déjà
tapées en utilisant les touches de directions du clavier. La flèche vers le haut permet de monter
dans la liste. La flèche vers le bas permet de descendre. Il est possible d'effacer le contenu de
cette fenêtre en sélectionnant l'option "clear command history" dans l’onglet accueil sur le ruban
code.
2. Création de programme en Matlab
Pour créer un programme, on crée le fichier *.m à l’aide de la commande New script de l’onglet
Home sur le ruban File.
L'exécution du programme se fait en tapant le nom du fichier sans l'extension .m dans la fenêtre
de commande.
3. Commande de base
Fin de l’instruction : ; (point virgule)
Commentaire: % (pourcent)
Effacer le contenu de la mémoire : Clear
clear x efface le contenu de la variable x
clear ou clear all efface tous les variables
Stocker des données dans un fichier : save
save 'nom de fichier' X -ASCII permet de mettre le contenu de X dans un fichier dont le nom
sera nom de fichier. Ce fichier se présentera sous la forme d'un tableau de 10 lignes et 20
colonnes de caractères ASCII, réutilisables par d'autres logiciels.
save nom_fichier.m X -ascii -tabs
Lire des données dans un fichier : load
load('nom_fichier.m') ;
Lire des données dans un fichier : textread
textread permet de lire des données dans un fichier.
La ligne X=textread('nom de fichier.ext') met le contenu du fichier nom de fichier.ext dans la
variable X.
4. Calcul numérique
Opérateurs : +, -, *, /, ˆ
Le logiciel Matlab distingue les minuscules et les majuscules.
Format long affiche le résultat de façon plus précise (taper format long) et format short pour
revenir au format standard (taper format short)
>> format long
>> pi
ans =
3.141592653589793
La lettre i est utilisée pour noter le nombre complexe i (i2 = -1)
On peut également extraire la partie réelle d'un nombre complexe z avec l'instruction real(z), sa
partie imaginaire est donnée par l'instruction imag(z), l'instruction conj(z) donne le complexe
conjugué et norm(z) donne son module.
Prendre la partie entière : fix
>> fix(pi)
ans =
3
Vecteurs et Matrices
Une matrice est un tableau de nombres. Sur le plan mathématique, on peut voir dans le rappel
d'algèbre linéaire qu'une matrice peut représenter une application linéaire.
Un vecteur est une matrice particulière. Du point de vue des mathématiques, les vecteurs se
présentent sous formes de colonnes, mais en informatique, un vecteur est simplement une suite
finie de nombres, mis sous forme de colonnes ou de lignes.
Il y a deux façons simples de définir un vecteur en Matlab :
1) u=[1 2 1 4] est un vecteur avec 4 coordonnées avec une ligne et quatre colonnes. v=[1;2;1;4]
est un vecteur avec 4 coordonnées avec 4 lignes et une colonne. On peut transposer un vecteur
(c'est à dire transformer un vecteur en ligne en vecteur en colonne, et réciproquement au moyen
de l'apostrophe : dans l'exemple précédent, on a u'=v et v'=u.
2) u=0:0.2:3 est un vecteur dont les coordonnées vont de 0 à 3 avec un
incrément de 0.2 : u=(0,0.2,0.4,0.6,...,2.8,3). Que contient la variable v=u' ?
C'est le même principe pour les matrices : A=[1 2 1;2 1 4] est la matrice :
1 2 1
2 1 4
Construction de vecteurs "réguliers" : linespace et xmin:dx:xmax
Pour générer une suite de nombres avec un incrément fixé entre deux de ces nombres, par
exemple la suite qui va de 3 à 8 de 0.2 en 0.2, on peut procéder de deux manières différentes.
La commande linspace(2,5,8) donne une suite de 8 éléments commençant par 2 et terminant
par 5, et l'instruction 3:0.2:8 donne un vecteur ligne de nombres partant de 3, avec une
incrémentation de 0.2 et s'arrêtant si le terme suivant dépasse 8. La première méthode est
utilisée quand on veut une suite de longueur donnée d'avance. La deuxième est utilisée quand
on veut un écart défini d'avance entre 2 éléments successifs.
Matrices de coefficients identiques : zeros et ones
zeros(n,m) produit une matrice de n lignes et m colonnes ne contenant que des 0
ones(n,m) donne une matrice de n lignes et m colonnes ne contenant que des 1
Extraire une partie d'une matrice
L'instruction A(n1:n2, m1:m2) extrait la sous-matrice allant de la ligne n1 jusqu'à la ligne n2 et la
colonne m1 jusqu'à la colonne m2.
La commande A(:,2) permet d'extraire toute les lignes de la colonne 2
Et l'instruction A(3:5,:) donne la sous-matrice formée de toutes les colonnes de A mais en ne
gardant que les éléments des lignes 3 à 5.
A=ones(6,6); B=2*ones(8,8);
B(2:7,2:7)=A;
2*B ;
Matrice identité : eye
L'instruction eye(n) permet de construire la matrice identité à n lignes et n colonnes, c'est-à-dire
une matrice ne contenant que des 0, sauf sur la diagonale où se trouvent des 1.
Taille d'un vecteur ou d'une matrice : length et size
L'instruction length permet de connaitre la taille d'un vecteur (ligne ou colonne). Par exemple, si
u est un vecteur de 5 coordonnées, l'instruction length(u) donne 5.
L'instruction size permet de déterminer la taille d'une matrice. Par exemple size(A) est un
vecteur d'une ligne et deux colonnes. Sa première coordonnée correspond au nombre de lignes
de A, sa seconde coordonnée contient le nombre de colonnes de A.
Si A est une matrice de 5 lignes et 10 colonnes, l'instruction size(A) donnera le vecteur [5 10].
De la même manière, la ligne de commande [a b]=size(A) permet de mettre dans la variable a le
nombre de lignes de la matrice A et dans la variable b le nombre de colonne de A.
Maximum et minimum d'une collection de nombres : max et min
Supposons que 10 nombres soient contenus dans le vecteur (ligne ou colonne) u. L'instruction
min(u) permet de connaitre le plus petit des 10 nombres. L'instruction max(u) donnera le plus
grand des 10 nombres. Si A est une matrice avec 5 lignes et 6 colonnes par exemple,
l'instruction min(A) sera un vecteur ligne de 6 colonnes, chacune des 6 coordonnées contiendra
le minimum des 5 nombres de contenu dans la colonne de A correspondante.
L'instruction max fonctionne de la même façon.
1 2 1 3
A= 4 5 1 4
1 2 1 1
min(A)=[1 2 1 1] et max(A)=[4 5 1 4]
Somme de deux matrices : A+B
Si les deux matrices A et B sont de mêmes dimensions, leur somme a un sens et donne une
matrice de même dimension dont le coefficient de la ligne i et de la colonne j est aij + bij. La
somme des deux matrices est obtenue avec l'instruction A+B.
Somme et produit d'une collection de nombres : sum et prod
La syntaxe de ces instructions est semblable à celle des instructions min et max décrites ci-
dessus. Par exemple sum(u), si u est un vecteur, donne la somme des coordonnées de u,
sum(A), si A est une matrice, donne un vecteur ligne dont le nombre de coordonnées est égal au
nombre de colonnes de A, et dont chaque coordonnée est la somme des coordonnées de la
colonne de A correspondante.
L'instruction prod fonctionne de la même manière mais retourne des produits d'éléments à la
place de leur somme.
Produit de matrices
Il existe plusieurs manières de réaliser un produit de deux matrices dont les deux principales
sont résumées ci-dessous.
Le produit matriciel usuel : A*B
Ce produit correspond à la composition des applications linéaires associées aux matrices A et B.
Il aboutit à une matrice dont les coefficients cij sont donnes par la formule :
Produit scalaire des vecteurs u et v : u'*v
Le produit terme à terme : A.*B
Matrice d'éléments aléatoires : rand et randn
L'instruction rand permet d'obtenir un nombre aléatoire entre 0 et 1, selon une loi uniforme. Pour
construire une matrice de n lignes et m colonnes contenant des nombres aléatoires entre 0 et 1,
on peut utiliser l'instruction rand(n,m). Pour avoir un nombre aléatoire entre 0 et 5, il suffit de
taper 5*rand et pour avoir un nombre aléatoire entre 3 et 8, on tapera 3+5*rand.
La fonction randn fonctionne de la même manière mais les nombres sont alors tirés selon une loi
normale de moyenne 0 et d'écart-type 1. Pour tirer au hasard des nombres selon une loi
normale de moyenne 3 et d'écart-type 2 par exemple, on peut utiliser l'instruction 2*randn+3.
Exercice : Que donnera l'instruction A=fix(7*rand(4,4)+3) ?
Déterminant, trace et éléments propres d'une matrice
Si A est une matrice carrée, l'instruction det(A) donne son déterminant et trace(A) donne sa
trace. On peut extraire ses valeurs propres avec l'instruction eig(A). Enfin, pour avoir les valeurs
propres et les vecteurs propres (c'est-à-dire la matrice de passage permettant de diagonaliser la
matrice), il faut poser [P,D]=eig(A). Dans ce cas, la matrice P est la matrice de passage et D est
la matrice diagonalisée.
Moyenne et écart-type : mean et std
Si A est une matrice, l'instruction mean(A) donne un vecteur ligne dont les coordonnées sont les
moyennes des colonnes de la matrice A. De la même manière, l'instruction std(A) donnera un
vecteur ligne dont les coordonnées sont les écarts-types de chacune des colonnes de A.
Chaines de caractères
Pour définir une chaine de caractères, on utilise les quotes '. Par exemple, mot='abcd' définit
une chaine de caractère stockée dans une mémoire appelée mot et contenant 4 caractères. Les
informations concernant la manipulation des chaines de caractères peuvent être obtenues dans
l'aide par l'index string (=chaine de caractères).
Programmes
Un programme est un fichier édité avec un éditeur de texte (évidemment, il y en a un qui est
disponible sous Matlab) et dont le nom se termine par l'extension .m. Ce fichier contient une liste
d'instructions qui seront exécutées dans leur ordre d'apparition dans la liste des l'exécution du
programme.
L'exécution d'un programme peut se faire de plusieurs manières, par exemple en tapant le nom
du fichier dans la fenêtre de commande ou en sélectionnant la fenêtre contenant le programme
et en tapant F5. Si le programme suivant est enregistré dans le fichier monprogramme.m, il suffit
de taper monprogramme dans la fenêtre de commande pour l'exécuter.
Exemple :
clear;
x=3;
y=5;
x+y ;
Graphiques
Cette section présente quelques instructions graphiques usuelles.
Les figures : figure
Les graphiques se mettent dans des fenêtres appelées "figures". Lorsque plusieurs graphiques
sont tracées, ils peuvent être mis dans des fenêtres différentes, les figures sont alors
numérotées. Par défaut, lorsqu'une commande lance un graphique, il se place dans la dernière
figure active (sélectionnée) et écrase le graphique qui s'y trouvait. Si aucune figure n'est ouverte,
le fait de lancer un graphique ouvre une figure automatiquement. Si l'utilisateur souhaite que le
graphique se mette dans la figure numéro 3 (même si aucune autre figure n'existe), il suffit qu'il
utilise la commande : figure(3).
Le tracé de courbes dans le plan : plot
La fonction plot permet de placer des points de coordonnées (x; y) sur un graphique. Nous
illustrons diverses possibilités à travers quelques exemples.
Exemple 1 :
x=[1 2 3 4]; % définit le vecteur ligne de coordonnées (1; 2; 3; 4) et le nomme x
y=[5 1 2 1]; % définit le vecteur ligne de coordonnées (5; 1; 2; 1) et
le nomme y
plot(x,y) % trace y en fonction de x et joint les points (x; y) par
des segments de droites.
Exemple 2 :
x=[1 2 3 4]; % définit le vecteur ligne de coordonnées (1; 2; 3; 4) et
le nomme x
y=[5 1 2 1]; % définit le vecteur ligne de coordonnées (5; 1; 2; 1) et
le nomme y
plot(x,y,'+') % Positionne les points de coordonnées (x; y) définis
ci-dessus au moyen du symbole '+'. D'autres symboles peuvent être
utilisées (+,.,o).
Exemple 3 :
x=-5:0.1:5; % définit le vecteur ligne dont la première coordonnées est -5, la dernière est 5 et la
différence entre deux coordonnées successives est 0.1
y=sin(x); % définit le vecteur y dont les coordonnées sont les sinus des coordonnées de x.
plot(x,y,'--') % trace le graphe de la fonction sinus entre -5 et 5, en pointillée.
Exemple 4 :
x=-5:0.1:5; % définit le vecteur ligne dont la première coordonnées est -5, la dernière est 5 et la
différence entre deux coordonnées successives est 0.1
y=sin(x); % définit le vecteur y dont les coordonnées sont les sinus des coordonnées de x.
z=cos(x); % définit le vecteur z dont les coordonnées sont les cosinus des coordonnées de x.
plot(x,y,'r',x,z,'b') % trace le graphe de la fonction sinus entre -5 et 5, en rouge et sur le même
graphique, trace le graphe de la fonction cosinus entre -5 et 5 en bleu.
Plusieurs graphiques sur la même figure : subplot (sous-graphique)
Avec subplot, Il est possible de tracer plusieurs graphiques sur la même figure.
Syntaxe : subplot(a, b, c)
a : représente le nombre de ligne
b : représente le nombre de colonne
c : représente le numéro de colonne où se trouve la courbe (position de la courbe)
Exemple :
x=-5:0.1:5; % définit le vecteur ligne dont la première coordonnées est -5, la dernière est
5 et la différence entre deux coordonnées successives est 0.1
y=sin(x); % définit le vecteur y dont les coordonnées sont les sinus des coordonnées de
x.
z=cos(x); % définit le vecteur z dont les coordonnées sont les cosinus des coordonnées
de x.
subplot(2,1,1) % définit deux sous-graphiques (2 lignes de graphiques et 1 colonne) et
sélectionne le 1er des deux sous-graphiques.
plot(x,y,'r') % trace le graphe de la fonction sinus entre -5 et 5, en rouge.
subplot(2,1,2) % définit deux sous-graphiques (2 lignes de graphiques et 1 colonne) et
sélectionne la 2éme des deux sous-graphiques.
plot(x,z,'g') % trace le graphe de la fonction cosinus entre -5 et 5 en vert.
Etiquette des courbes :
title('\fontsize{12}\bf titre de courbe')
xlabel('fréquence (Hz)')
ylabel('Amplitude (dB)')
axis([0 100 0 100]);
set(gca, 'FontSize', 12, 'fontName','Times');
grid on
grid off
hold on
hold off
L'instruction grid on permettra de placer un quadrillage. L'instruction grid off permet de
supprimer le quadrillage.
Courbes en dimension 3 : plot3
Plot3 permet de tracer une courbe à 3 dimensions,
Exemple1 :
u=-10:0.1:10; % définit le vecteur ligne dont la première coordonnées est -10, la dernière
est 10 et la différence entre deux coordonnées successives est 0.1
x=sin(u); % définit le vecteur x dont les coordonnées sont les sinus des coordonnées de
u.
y=cos(u); % définit le vecteur y dont les coordonnées sont les cosinus des coordonnées
de u.
z=u; % définit le vecteur z dont les coordonnées sont celles de u.
plot3(x,y,z); % trace la courbe en trois dimensions.
Exemple2 :
t=.01:.01:20*pi;
x=cos(t);
y=sin(t);
z=t.*t.*t;
plot3(x,y,z)
Exemple3 :
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square
xlabel('sin(t)'), ylabel('cos(t)'), zlabel('t')
Simulink
Simulink est un logiciel, muni d’une interface graphique, intégré dans MATLAB pour la modélisation, la
simulation et l’analyse des systèmes dynamiques. Simulink est basé sur une interface graphique qui
permet une construction aisée et conviviale de schémas-blocs. Chaque bloc composant le système est
sélectionné depuis un ensemble de bibliothèques prédéfinies.
Création d’un modèle
Simulink peut être lancé depuis l’environnement de MATLAB
• en cliquant, dans la barre d’outils
• ou en tapant simulink dans la ligne de commande
La colonne de gauche liste les bibliothèques disponibles. Celles-ci sont rangées par disciplines
(Automatique, Aerospace, Communication, Traitement du signal, Système embarqués…) et regroupent un
ensemble de blocs fonctionnels liés à une catégorie de fonctions particulières. A la sélection d’une
bibliothèque, les blocs qui la composent sont affichés dans la partie de droite.
Un nouveau modèle est créé en cliquant sur l’icone « feuille blanche » (ou dans le menu File > New >
Model). Une fenêtre vide apparaît, elle va servir de support pour construire votre modèle.
L’interface est intuitive et facile à utiliser, un modèle est construit à partir des blocs fonctionnels par
glisser-déposer. Les blocs sont ensuite interconnectés par des flèches dessinées à l’aide de la souris
(cliquer-maintenir sur une entrée ou une sortie puis relâcher sur une entrée ou une sortie). Chaque bloc
peut être édité (réglages de ses paramètres) en double-cliquant dessus. Cette dernière action permet
d’ouvrir une fenêtre de dialogue dans laquelle une description du bloc et des champs paramétrables sont
donnés.
Par exemple, si l’on souhaite éditer le bloc Sine Wave (obtenu dans la bibliothèque Sources), un
double-clique donne la fenêtre
Cette fenêtre décrit la fonction réalisée par le bloc ainsi que les différents paramètres à régler.
Les modèles peuvent être sauvegardés dans des fichiers d’extension « .mdl ». Simulink manipule les
fichiers (sauvegarde, ouverture, fermeture, création…) de façon classique à l’aide du menu File ou des
icones. Un fichier existant (par exemple « monschema.mdl ») peut également être directement invoqué
depuis la fenêtre de commande MATLAB en tapant son nom sans extension :
>> monschema;
Quelques bibliothèques
Simulink possède de nombreuses bibliothèques, adaptées pour la modélisation d’une multitude de
systèmes de différentes natures. De plus, l’ajout de toolboxes supplémentaires permet d’enrichir les
librairies et les fonctionnalités du logiciel. Nous présentons dans ce paragraphe seulement quelques blocs
simples et présents dans la version de base de Simulink. Nous allons voir quelques blocs standards
Sources
Les sources sont des blocs possédant une ou plusieurs sorties et aucune entrée. Ils sont utilisés pour la
génération de signaux
Signal échelon ; signal rampe ; signal sinusoïdal ; valeurs fournies par un fichier ; temps.
Sinks
Les blocs de cette librairie, à l’inverse des sources, ne possèdent qu’une ou plusieurs entrées (sink
signifie lavabo, c’est-à-dire qui collecte le flux d’information). Ils sont utilisés pour l’affichage (digital,
oscilloscope) ou la mémorisation de signaux (vers une variable, un fichier).
Affichage type oscilloscope ; stockage dans une variable; stockage dans un fichier.
Math Operations
Ensemble de blocs réalisant une fonction mathématique appliquée aux signaux entrants. Le (ou les)
résultat(s) est (sont) renvoyé(s) sur le (les) point(s) de sortie.
Somme/soustrait deux signaux ; multiplie un signal; fournit le module et la phase ; applique une fonction
standard.
Signal Routing
Ensemble de blocs utiles pour l’aiguillage de signaux ou la connexion de blocs.
Multiplexeur: combine deux entrées en une seule (vecteur) ; switch: permet de sélectionner manuellement
une entrée; démultiplexeur: sépare une entrée (vecteur) en plusieurs composantes.
Control System Toolbox
Bloc « LTI system » pour la définition de fonctions de transfert.
La fonction de transfert peut être directement définie via les paramètres du bloc en suivant la syntaxe de
la fonction tf (vue précédemment). Par ailleurs, si une fonction de transfert a déjà été définie dans le
workspace de MATLAB, elle peut être reprise dans le bloc en spécifiant simplement son nom.
Simulation
Une fois le modèle réalisé, l’intérêt de Simulink consiste à le simuler. Une simulation peut être lancée soit
à partir de l’icône « lecture » en forme de triangle (ou dans le menu Simulation > Start), soit à partir
de MATLAB avec la commande sim().
Le premier paramètre de simulation (et le seul, dans le cas d’utilisation simpliste de Simulink) à régler est
le temps de simulation. Il peut être spécifié dans le champ à droite de l’icône de lancement d’une
simulation. Il doit être exprimé en seconde.
Pour une utilisation avancée, de nombreuses options permettent de configurer de manière très précise les
paramètres de simulation. De telles configurations sont accessibles dans le menu Simulation >
Configuration Parameters… :
Cette interface donne la possibilité de configurer (entre autres):
- l'horizon temporel de simulation (en sec), le solver utilisé (et ses paramètres) pour la résolution
numérique des équations différentielles,
- la gestion des entrées/sorties avec MATLAB, les variables sauvegardées,
- les notifications d’erreurs ou d’alertes sur différents événements, diagnostic de simulation,
-…
Nous n’entrerons pas plus dans les détails du paramétrage d’une simulation car très complexe et inutile
dans le cadre d’une simple introduction à Simulink.
Exemple
Considérons un système modélisé par la fonction de transfert suivante :
Définissons celle-ci dans MATLAB:
>> G = tf(1,[1 1 2])
Nous souhaiterions savoir comment le système réagit à une sollicitation de type échelon unitaire. Pour
cela, construisons un modèle Simulink afin de simuler la réponse indicielle de notre système. Nous avons
donc besoin :
- d’un bloc pour représenter la fonction de transfert G(p),
- d’une source pour générer le signal échelon,
- et un bloc permettant la visualisation graphique de la sortie du système.
Paramétrons les blocs Step et LTI System pour notre exemple.
Nous fixons un échelon de valeur initiale 0 (initial value), d’amplitude 1 (final value) et se déclanchant à
t=0 (step time). Nous définissons ensuite le système que nous étudions par la variable G précédement
définie dans MATLAB. Enfin, la simulation sera effectuée sur un horizon temporel de 15s.
Après exécution de la simulation, la réponse peut être observée en double-cliquant sur l’oscilloscope
Réalisons maintenant un asservissement avec une commande proportionnelle de gain J . Notre nouveau
modèle de simulation nous permettra de tester les performances de l’asservissement pour différentes
valeurs de K . Il peut être fixé directement depuis le bloc ou via MATLAB. Ici le multiplexeur permet
d’afficher sur un seul graphe le signal de consigne et le signal de sortie.
La variable a été spécifiée dans la boite de dialogue du bloc Gain. Celle-ci doit être préalablement définie
avec une valeur numérique. Exécutons dans MATLAB la commande :
>> K = 5
Simulons notre modèle et visualisons la réponse du système asservi via le Scope.
En modifiant la valeur de K dans MATLAB, on peut facilement et rapidement analyser (par simulation) le
comportement de l’asservissement en fonction du gain de correction.