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