partie i : matrices et graphiques

Transcription

partie i : matrices et graphiques
NOTICE D'UTILISATION DU LOGICIEL MATLAB
version 98/99
Ce document a pour objectif de vous présenter brièvement le logiciel MatLab. Dans une première partie, on
aborde le calcul matriciel et la représentation graphique. La deuxième partie est plus spécifique à
l'Automatique, on s'intéresse principalement aux représentations temporelles et fréquentielles de systèmes
d'ordre 1 ou 2. Enfin, la troisième partie donne quelques éléments de programmation (boucle, test, ...) utiles
lors de la synthèse de programmes.
Une présentation générale de MatLab, réalisée par F. Auger, est accessible via GSview sous
F:\TPAUTO\DOC_MAT\MATLAB04.PS.
Important : Après avoir cliqué sur l'icône de MatLab (sous Windows), il faut se placer dans son répertoire de
travail (exemple M:\TPAUTO) avant d'utiliser MatLab, pour cela taper la commande cd m:\tpauto. Pour quitter
l'environnement de MatLab, taper la commande exit ou quit.
PARTIE I :
MATRICES ET GRAPHIQUES
I. Matrices
Les matrices numériques (à valeurs réelles ou complexes) sont les éléments de base de MatLab. Décrivons
quelques instructions qui permettent de les manipuler.
I.1. Exemples de construction d'une matrice
Il existe plusieurs méthodes pour construire une matrice :
1) >> A = [1 2 3 ; 4 5 6 ; 7 8 9]
2) >> A = [1 2 3
456
7 8 9]
Résultat (affiché à l'écran) :
(chaque élément est séparé par un espace,
chaque ligne par un point virgule)
>> A =
123
456
789
La matrice est contenue dans la variable A. Attention, MatLab distingue les majuscules des
minuscules (la variable A peut être différente de la variable a).
Remarque : le signe >> signifie que vous êtes dans l'environnement MatLab.
I.2. Instructions, fonctions et variables
Les éléments composant la matrice peuvent être des instructions ou des fonctions.
Ex : >> X = [-1.3 sqrt(3) (1+2+3)*4/5]
(sqrt correspond à la racine carrée)
Résultat :
>> X =
-1.3000 1.7321 4.8000
Remarque : l'instruction help permet d'avoir une aide en ligne. Par exemple :
>> help sqrt
vous rappelle ce que permet l'instruction sqrt, ainsi que sa syntaxe.
Il est possible de rajouter d'autres éléments dans la matrice X, ce qui a pour effet d'augmenter sa taille.
Ex : >> X(5) = abs((X(1))
(abs correspond à la valeur absolue)
Résultat :
>> X =
-1.3000 1.7321 4.8000 0.0000 1.3000
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
Remarque : Par défaut, l'affichage des valeurs se fait avec une précison de 10-4. L'instruction format
permet de changer le mode d'affichage (voir format long, format short, ...).
La plupart des instructions de MatLab sont de la forme :
>> variable = expression
ou
>> expression
Les expressions peuvent être composées d'opérateurs, de fonctions, de variables ou de caractères
spéciaux.
Exemples :
1) >> 1900 / 81
Résultat :
>> ans =
23.4568
Dans ce cas, le résultat de l'expression est stocké dans la variable ans, c'est le nom donné par défaut
à la variable contenant la réponse (answer en anglais) à la dernière instruction.
2) >> s = 2 + 6 + 3 + 8
Résultat :
>> s =
19
3) >> s = 2 + 6 + 3 + 8;
La variable s contient la valeur 19 mais la présence du point virgule fait que le résultat ne s'affiche
pas à l'écran (pour afficher le contenu de la variable s, taper s sans point virgule derrière).
I.3. Sauvegarde et récupération de données
Avant de quitter MatLab, il est possible de sauvegarder dans votre répertoire (de travail) des données
dans un fichier de type .MAT. La commande à utiliser est :
>> save temp X Y Z
(les variables X, Y et Z sont sauvegardées dans le fichier TEMP.MAT). Ces
données peuvent être récupérées dans l'environnement MatLab avec la commande :
>> load temp
I.4. Opérations élémentaires sur les matrices
I.4.1. Transposée
La transposée d'une matrice A est obtenue de la manière suivante :
>> B = A'
Si par exemple A = [ -1 ; 0 ; 2 ], on obtient B = [ -1 0 2]
I.4.2. Addition et Soustraction
Si A et B sont deux matrices de même dimension alors il est possible de calculer :
>> C = A + B
>> D = A - B
Attention, si A est une matrice, C = A - 1 a pour effet de soustraire 1 à chaque élément de A !
I.4.3. Multiplication
L'opérateur * permet de multiplier deux matrices (de dimension adéquate).
Ex : matrices lignes
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
X=[-1 0 2];
Il est possible de faire : X'*Y, Y'*X, X*Y' et Y*X'.
Y=[-2 -1 1]
I.5. Informations sur les variables
Les instructions suivantes permettent d'obtenir certaines informations sur les variables.
>> length(A) retourne le nombre de composants du vecteur A.
>> size(A) retourne le nombre de lignes et de colonnes de la variable A.
>> who
liste le nom de chaque variable utilisée.
>> whos
liste le nom et la taille (nombre d'éléments et d'octets) de chaque variable.
>> clear
efface toutes vos variables de la mémoire.
>> clear X Y efface uniquement les variables X et Y.
II. Exemples de quelques fonctions MATLAB
MatLab possède un grand nombre de fonctions. A l'aide des fonctions MatLab, on peut créer ses propres
fonctions (voir la partie III (p. 8) ). A titre d'exemple, certaines fonctions MatLab sont présentées ici.
II.1. Calculs élémentaires
- Inversion de A
- Déterminant de A
- Trace de A
>> inv(A)
>> det(A)
>> trace(A)
(si A carré)
II.2. Manipulation de polynômes
Tout polynôme peut s'écrire sous la forme d'un vecteur ligne contenant les coefficients du polynôme
rangés par puissance décroissante.
Ex : Soit un polynôme p = x3 - 6x2 - 72x + 27, son écriture sous MATLAB sera :
>> p = [1 -6 -72 27];
Il est possible par exemple d'extraire les racines de ce polynôme en utilisant l'instruction
>> roots(p).
De même l'instruction >> p3=conv(p1,p2) fait que le polynôme p3 est le produit des polynômes p1
et p2.
III. Les graphiques
Il est facile de représenter graphiquement vos résultats. Prenons à titre d'exemple l'affichage d'une
fonction : y = f(x).
III.1. Construction de l'axe des abscisses
La construction d'un axe des abscisses se ramène à construire un vecteur ligne.
Ex :
>> t = [1 2 6 14 510] résultat t =
1 2 6 14 510
Les trois instructions suivantes permettent aussi de créer un vecteur ligne.
>> y = 0:pi/4:pi
résultat y =
(valeur initiale : pas : valeur finale)
0.0000 0.7854 1.5708 2.3562 3.1416
>> x = 1:5
résultat x =
(le pas est égal à 1 par défaut)
1 2 3 4 5
>> z = 6:-1:1
résultat z = (le pas est égal à -1 par défaut)
6 5 4 3 2 1
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
III.2. Exemples de calcul de fonctions y = f(x)
A chaque valeur de x, précédemment définie, on calcule la valeur y = f(x) correspondante
Ex :
>> x = 1:5;
>> y = x .^2
Résultat :
>> y =
1 4 9 16 25
NB : l'opération .^ 2 permet d'élever au carré chacun des éléments de y.
Remarque : Il est possible de créer un tableau regroupant les valeurs de x et de y à l'aide de
l'instruction suivante :
>> t = [x' y']
Résultat : >> t =
1 1
2 4
3 9
4 16
5 25
III.3. Affichage des courbes
Il existe différentes commandes permettant la gestion des axes XY :
plot
loglog
semilogx
semilogy
mesh
axes linéaires X-Y
axes logarithmique X-Y
axe logarithmique X
uniquement
axe logarithmique Y
uniquement
graphe en 3-D
Le graphique peut être légendé, titré et quadrillé à l'aide de :
title
xlabel
ylabel
text
grid
titre le graphe
titre l'axe X
titre l'axe Y
permet d'annoter certains points
particuliers du graphe
quadrille le graphe
La gestion de l'environnement graphique peut se faire par :
zoom
clg
subplot
axis
agrandit le graphe
efface le graphe
permet l'affichage de plusieurs
graphes à l'écran (au plus 4)
modifie les axes
Rappel : vous pouvez utiliser l'instruction help pour en savoir plus.
III.4. Exemples
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
III.4.1. Axes linéaires X-Y
Ex :
>> x = 0:0.05:4*pi;
>> y = sin(x);
>> plot(x,y)
(construction de l'axe des abscisses)
(calcul de y = f(x))
(affichage de y = f(x))
Remarque : Pour un intervalle donné, plus le nombre de points d'abscisses est important,
plus la courbe est précise.
On peut aussi utiliser un axe des abscisses "normalisé". Soit un vecteur
Y = [0 0.5 0.8 1 3 5], l'instruction plot(Y) permet d'afficher le graphique :
6
5
4
3
2
1
0
1
2
3
4
5
6
Dans ce cas, les points d'abscisses 1, 2, 3, 4, 5, 6 sont crées automatiquement, ils ont pour
ordonnées respectivement 0, 0.5, 0.8, 1, 3, 5.
III.4.2. Superposition de graphes
La fonction plot (X,Y,Z,T,.....) permet de superposer plusieurs courbes à l'écran (X, Y sont
les coordonnées de la première fonction, Z, T sont les coordonnées de la deuxième
fonction, ...).
Afin de différencier plusieurs courbes, on peut utiliser différents types de couleurs et de
points (exemple donné dans le tableau suivant).
COULEURS
Rouge
r
Vert
g
Bleu
b
Blanc
w
Invisible
i
TYPES DE POINTS
Point
.
Plus
+
Etoile
*
Cercle
o
Croix
x
Syntaxe :
>> plot(X, Y, '+')
>> plot(X, Y, 'r', X, Z, '*g')
Chaque point de la courbe est représenté par un +.
La 1ère courbe est en rouge, la 2ième est
formée d'étoiles vertes.
III.4.3. Gestion d'écran
Seulement deux commandes vous sont présentées : subplot et axis.
subplot
Cette commande permet de visualiser simultanément plusieurs graphiques (4 au
maximum).
Syntaxe : subplot(m,n,p)
1 2
les valeurs m et n partage l'écran en m-lignes et
3 4
n-colonnes, la valeur p indique la place de la partition.
Ex : >> subplot(2,1,1), plot(x,abs(x))
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
>> subplot(2,1,2), plot(x,sin(x))
L'écran est partagé en deux lignes et une colonne. La fonction f(x) = abs(x) se
trouve sur la première ligne.
Pour revenir à la configuration normale (1 graphique par écran) il faut taper
>> subplot(1,1,1) ou subplot
axis
Pour visualiser la fonction sur un intervalle particulier, il est nécessaire d'utiliser
l'instruction axis.
Syntaxe : axis([x_min, x_max, y_min, y_max])
Lorsque cette commande n'est pas spécifiée l'échelle des axes est automatiquement
calculée.
PARTIE II : DOMAINE DE L'AUTOMATIQUE
I. Représentation des systèmes
MatLab permet de représenter un procédé en utilisant les notions de fonction de transfert ou plus
généralement de représentation d'état. Bien sur, il est possible de passer d'un mode de représentation à
l'autre.
I.1. Fonction de transfert
Considérons un système ayant une entrée (e) et une sortie (s). Sa description par une fonction de
transfert peut être vue comme étant un rapport de 2 polynômes, le numérateur et le dénominateur.
Soit une fonction de transfert T(p) :
S ( p)
2
>> num = [2]
(le numérateur)
= T ( p) = 2
E( p)
p + 1, 6 p + 2
>> den = [1 1.6 2]
(le dénominateur)
Rappel : les coefficients d'un polynôme sont rangés dans l'ordre des puissances décroissantes (voir II.2
de la partie I).
I.2. Représentation d'état
Le précédent système peut aussi se représenter de la manière suivante :
.
x(t)
e(t)
 x&(t ) = Ax (t ) + Be(t )

 s(t ) = Cx (t ) + De(t )
B
+
1
p
x(t)
s(t)
+
C
+
+
A
D
Vous ne connaissez peut-être pas encore ce mode de représentation (étudié en IUP3-SA) mais il est
toutefois nécessaire d'en prendre connaissances car il est souvent utilisé dans MatLab.
I.3. Passage d'une représentation à l'autre
Fonction de Transfert ===> Représentation d'état
Instruction tf2ss
>> tf2ss Syntaxe : [A,B,C,D] = tf2ss(num , den)
Représentation d'état ===> Fonction de Transfert
Instruction ss2tf
>> ss2tf Syntaxe : [num , den] = ss2tf(A,B,C,D,1)
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
II. Analyse des systèmes
Les fonctions suivantes permettent l'étude de systèmes dans les domaines temporel et fréquentiel. Elles
admettent souvent comme paramètres d'entrée la fonction de transfert (num, den) ou la représentation d'état
(matrices A,B,C,D). L'utilisation de la fonction de transfert sera dans ce document utilisée autant que
possible.
II.1. Domaine temporel
Lorsque l'on étudie des systèmes du premier ou du deuxième ordre, il est intéressant de voir
l'évolution de la sortie s(t) en fonction de l'entrée e(t). Pour cela, après avoir construit la fonction de
transfert du système, on utilise les fonctions suivantes :
step : Réponse indicielle avec e(t) = 1.
Syntaxe : step(num,den,t) où le vecteur ligne t représente l'axe des abscisses (voir III.1 de la
partie I).
L'affichage se fait avec :
>> s = step (num,den,t);
>> plot(t, s)
impulse : Réponse impulsionnelle
Syntaxe : impulse(num,den,t)
L'affichage se fait avec
>> s = impulse(num,den,t);
>> plot(t, s)
lsim : Permet de trouver la réponse à une entrée quelconque e(t).
Syntaxe : lsim(num,den,e,t)
Ex : Soit la fonction de transfert T ( p ) =
1
2p +1
Déterminons la sortie s(t) lorsque l'entrée est de type rampe, soit e(t) = t.
>> num = [1];
>> den = [2 1];
>> t = 0:0.1:10;
>> e = t;
>> s = lsim(num,den,e,t);
>> plot(t,s)
On obtient alors :
e(t) = t
s(t) = t - 2 + 2 exp(-t/2)
0
T
t
II.2. Domaine fréquentiel
II.2.1. Représentation dans Bode
Une fonction permet de calculer le gain et la phase : bode.
La visualisation des courbes de gain (en db) et de phase se fait avec les instructions :
>> w = logspace(-1,1); % vecteur équi-réparti pour l'échelle log entre 10-1 et 101
>> [gain, phase] = bode(num, den, w)
>> subplot(2,1,1), semilogx(w, 20*log10(gain)), grid
>> subplot(2,1,2), semilogx(w, phase), grid
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
II.2.2. Autres représentations
Dans Black-Nichols :
>> [gain, phase] = nichols(num, den, w)
Dans Nyquist :
>> [re, im] = nyquist(num, den, w)
Une représentation dans le plan de Black n'est pas directement accessible. A titre d'exercice, il est intéressant
de réaliser un programme (de quelques lignes) permettant cela (on peut utiliser les résultats issus de
l'instruction bode, voir aussi l'instruction logspace).
III. Association de systèmes
S2(p)
S1(p)
L'association de systèmes en série est fréquente en automatique. Elle peut se faire avec la fonction series.
Syntaxe : >> [Num,Den] = series(Num1,Den1,Num2,Den2)
Il est possible d'utiliser cette instruction en manipulant une représentation d'état
>> [A,B,C,D] = series(A1,B1,C1,D1,A2,B2,C2,D2)
Avant d'utiliser series, il est nécessaire de transformer les fonctions de transfert S1(p) et S2(p) en
représentation d'état (utiliser tf2ss). On obtient H(p) = S1(p)S2(p) = num(p) / den(p) en utilisant ss2tf.
IV. Systèmes en boucle fermée
Soit le système en boucle fermée suivant :
+
S1(p)
-
S2(p)
L'instruction feedback permet de réaliser un tel système.
Syntaxe :
>> [Num,Den] = feedback(Num1,Den1,Num2,Den2,Sign)
PARTIE III : PROGRAMMATION
Il est possible avec MatLab de faire des programmes. Les lignes d'instructions d'un programme sont crées avec
l'éditeur associé à MatLab (cliquer sur File, puis New (M-File) pour créer un fichier ou sur Open M-File... pour
ouvrir un fichier déjà existant). Veillez à sauvegarder votre programme dans un fichier dont l'extension est
".M" (dans le cas contraire, il ne serait pas exécutable dans l'environnement MatLab !!).
Les tests classiques (for, while, if, ...) existent aussi avec MatLab, décrivons les rapidement.
I. Tests et boucles
I.1. Instruction FOR
Cette instruction permet de faire une boucle de type "pour".
Syntaxe :
>> for variable = expression
.......
>> end
Ex : >> % Création d'une matrice de dimension (5,5) remplie de 2
(commentaire)
>> n = 5;
(dimension de la matrice carrée)
>> for i = 1:n
(i prend successivement les valeurs 1, 2, 3, 4, 5)
>> for j = 1:n
(idem pour j)
>>
I(i,j) = 2;
(l'élément I(i,j) prend pour valeur 2)
>> end
(fin de la boucle j)
>> end
(fin de la boucle i)
I.2. Instruction WHILE
Cette instruction permet de faire une boucle de type "tant que".
Syntaxe :
>> while expression
........
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
>> end
>> % On cherche l'indice minimum de la matrice A où se trouve le chiffre 9
>> % Hypothèse : il y en a au moins un chiffre 9 dans la matrice A
>> % Le résultat est dans la variable i
>> i = 1;
(initialisation)
>> while (A(i) ~= 9)
>>
i = i + 1;
>> end
NB : ~= représente le signe différent lors d'un test.
Ex :
2) Il est possible d'utiliser des opérateurs logiques : ET, OU, NOT.
>> while ((n = 1 ) | (n = 5))
on reste dans cette boucle tant que n = 1 ou n = 5
>> while ((x > 5) & ( x < 10))
on reste dans cette boucle tant que x > 5 et x < 10
I.3. Instruction IF
Cette instruction permet de faire des instructions différentes selon qu'un test est vrai ou faux.
Syntaxe :
>> if expression
.........
>> else
.........
>> end
Ex : >> j = 1;
>> for i = 0:20
(boucle de i = 0 à i = 20)
>> if rem(i,3) = = 0;
(on exécute les 2 instructions suivantes si le reste de i/3 est nul)
>>
a(j) = i;
(a contient les multiples de 3 (compris entre 0 et 20)
>>
j = j + 1;
(incrémentation de l'indice de a)
>> end
(fin de if)
>> end
(fin de la boucle i)
NB : = = représente le signe d'égalité lors d'un test.
II. Autres exemples de fonctions
break
input
disp('xxx')
clc
pause
pause(n)
permet de quitter "anormalement" une boucle FOR ou WHILE.
permet d'introduire à l'écran une valeur dans une variable.
ex : x = input('Donner la valeur de x : ')
affiche à l'écran la chaine de caractères xxx.
efface l'écran.
attend un appui sur une touche quelconque du clavier
l'instruction suivante.
suspend le déroulement du programme durant n secondes.
avant
d'exécuter
III. Exemple de programme
disp ('Programme qui calcule la moyenne des notes obtenues dans une classe')
disp ('On donne en plus la plus mauvaise et la plus bonne note')
nbnote = input ('Combien y-a-t''il d''élèves dans la classe ?')
for i = 1:nbnote
note = -1;
while ((note < 0) | (note > 20))
note = input('donner note');
tableau(i) = note;
end
end
notemin = min(tableau);
notemax = max(tableau);
moyenne = mean(tableau);
clc
disp (['La meilleure note est : ',num2str(notemax)])
disp (['La plus mauvaise note est : ',num2str(notemin)])
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation
disp (['La moyenne de la classe est de : ',num2str(moyenne)])
_______________________________________________________________________________________
I.U.P. 2, IUP 3 Dpt : Méthodes et Moyens de l'Automatisation