Download matlab cours exercice corrigie and more Slides Matlab skills in PDF only on Docsity! MATLAB A. Farchane Types de données et variables • Types de données et variables – Les types de données • Les 4 types de données MATLAB – Le type réel – Le type complexe – Le type chaîne de caractères – Le type logique 11:18 AM 2 Types de données et variables • >> whos – Name Size Bytes Class – rep 1x3 6 char array – x 1x1 8 double array – z 1x1 16 double array (complex) 11:18 AM 5 Types de données et variables • Pour connaitre le type d’une variable on utilise les fonctions suivantes: >> ischar(rep) ans = 1 >> ischar(x) ans = 0 >> isreal(z) ans = 0 >> isreal(x) ans = 1 >> isreal(rep) ans = 1 >>islogical(z) 11:18 AM 6 Types de données et variables • Définir un vecteur – On définit un vecteur ligne en donnant la liste de ses éléments entre crochets ([ ]). – Les éléments sont séparés au choix par des espaces ou par des virgules. – on définit un vecteur colonne en donnant la liste de ses éléments séparés au choix par des points virgules (;) ou par des retours chariots – >> x1 = [1 2 3] x1 = 1 2 3 11:18 AM 7 Types de données et variables • Exemple: >> X = [1 2 3 4 5 6 7 8 9 10 ] X = 1 2 3 4 5 6 7 8 9 10 >> X(5) ans = 5 >> X(4:10) ans = 4 5 6 7 8 9 10 >> X(2:2:10) ans = 2 4 6 8 10 >> K = [1 3 4 6]; X(K) ans = 1 3 4 6 11:18 AM 10 Types de données et variables • Pour définir un vecteur x dont les composantes forment une suite arithmétique de raison h, de premier terme a et de dernier terme b, on écrira x = a:h:b. • La commande linspace permet de définir un vecteur x de longueur N dont les composantes forment une suite arithmétique de premier terme a et de dernier terme b (donc de raison (a-b)/N). • Les composantes du vecteur sont donc linéairement espacés. La syntaxe est x = linspace(a,b,N). • >> x = 1.1:0.1:1.9 11:18 AM 11 Vecteurs spéciaux >> x = 1.1:0.2:2 x = 1.1000 1.3000 1.5000 1.7000 1.9000 >> x = linspace(1.1,1.9,9) ans = Columns 1 through 7 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 Columns 8 through 9 1.8000 1.9000 >> 11:18 AM 12 Les matrices • Un élément d'une matrice est référencé par ses numéros de ligne et de colonne. • A(i,j) désigne le i-ième élément de la j-ième ligne ligne de la matrice A. • A(2,1) désigne le premier élément de la deuxième ligne de A, >> A(2,1) ans = 4 >> • La commande size permet d'obtenir les dimensions d'une matrice A donnée. • On peut soit obtenir de manière séparée le nombre de lignes et de colonnes par – les instructions size(A,1) et size(A,2) respectivement, – soit obtenir le nombre m de lignes et le nombre n de colonnes par l'instruction [m,n] = size(A). 11:18 AM 15 Les matrices • Certaines matrices se construisent très simplement grâce à des commandes dédiées. – eye(n):la matrice identité de dimension n – ones(m,n) :la matrice à m lignes et n colonnes dont tous les éléments valent 1 – zeros(m,n) :la matrice à m lignes et n colonnes dont tous les éléments valent 0 – rand(m,n) :une matrice à m lignes et n colonnes dont les éléments sont générés de manière aléatoire entre 0 et 1 11:18 AM 16 Les matrices • la commande magic(n) qui permet d'obtenir une matrice magique de dimension n. Exemple: >> eye(3) ans = 1 0 0 0 1 0 0 0 1 >> ones(3,2) ans = 1 1 1 1 1 1 >> zeros(2) ans = 0 0 0 0 11:18 AM 17 Manipuler des matrices • A(J,:) est la matrice issue de A dont les lignes sont les lignes de la matrice A d'indices contenus dans le vecteur J. • il est possible de n'extraire qu'une partie des éléments des lignes et colonnes d'une matrice. • Si L et C sont deux vecteurs d'indices, A(L,C) désigne la matrice issue de la matrice A dont les éléments sont les A(i,j) tels que i soit dans L et j soit dans C. 11:18 AM 20 Manipuler des matrices • Exemple : >> A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> L = [1 3 5]; C = [3 4]; >> A(L,C) ans = 1 8 13 20 25 2 >> A(1:2:5,3:4) ans = 1 8 13 20 25 2 11:18 AM 21 Manipuler des matrices • La commande diag permet d'extraire la diagonale d'une matrice,: – si A est une matrice, v=diag(A) est le vecteur composé des éléments diagonaux de A. • Elle permet aussi de créer une matrice de diagonale fixée: – si v est un vecteur de dimension n, A=diag(v) est la matrice diagonale dont la diagonale est v. 11:18 AM 22 Manipuler des matrices • On dispose également de la commande tril permet d'obtenir la partie triangulaire inférieure (l pour lower) d'une matrice. • La commande triu permet d'obtenir la partie triangulaire supérieure (u pour upper) d'une matrice. >> A = [ 2 1 1 ; -1 2 1 ; -1 -1 2] A = 2 1 1 -1 2 1 -1 -1 2 >> triu(A) ans = 2 1 1 0 2 1 0 0 2 >> tril(A) ans = 2 0 0 -1 2 0 -1 -1 2 >> 11:18 AM 26 Manipuler des matrices • les commandes triu et tril admettent un second paramètre k. • On peut ainsi obtenir la partie triangulaire supérieure (ou inférieure) à partir de la k diagonale. >> tril(A,-1) ans = 0 0 0 -1 0 0 -1 -1 0 >> tril(A,1) ans = 2 1 0 -1 2 1 -1 -1 2 >> 11:18 AM 27 Calculer avec MATLAB • Calculer avec MATLAB – Les constantes – Opérations et fonctions portant sur les scalaires – Opérations et fonctions portant sur les vecteurs – Opérations et fonctions portant sur les matrices – Résolution de systèmes linéaires – Les polynômes 11:18 AM 28 Fonctions portant sur les scalaires • rem(m,n) donne le reste de la division entière de deux entiers. • lcm(m,n) retournent le plus petit multiple commun de deux entiers m et n. • gcd(m,n) retournent le plus grand commun diviseur de deux entiers m et n. • factor(n) permet d'obtenir les termes de la décomposition en facteurs premiers de l'entier n. 11:18 AM 31 Les fonctions mathématiques • log(x) : logarithme népérien de x, • log10(x) : logarithme en base 10 de x, • exp(x) : exponentielle de x, • sqrt(x) : racine carrée de x (s'obtient aussi par x.^0.5), • abs(x) : valeur absolue de x, • sign(x) : fonction valant 1 si x est positif ou nul et 0 sinon. 11:18 AM 32 fonction portant sur les nombres complexes • Lorsque la fonction est définie sur le corps des nombres complexes l'argument peut être de type complexe: • • conj(z) : le conjugué de z, • abs(z) : le module de z, • angle(z) : argument de z, • real(z) : partie réelle de z, • imag(z) : partie imaginaire de z. 11:18 AM 33 Opérations et fonctions portant sur les vecteurs • Si k est une variable scalaire et x un vecteur, l'instruction k*x multiplie tous les éléments de x par k. • Si x et y sont deux vecteurs de longueur identique, l'instruction z = x+y (respectivement x-y) définit le vecteur z dont les éléments sont z(i) = x(i) + y(i) (respectivement z(i) = x(i) - y(i)). • On obtient un vecteur z dont la i-eme composante est le produit (respectivement le quotient) de la i-eme composante du vecteur x par la i-eme composante du vecteur y en effectuant l'instruction z = x.*y (respectivement z = x./y). 11:18 AM 37 Opérations et fonctions portant sur les vecteurs • le produit scalaire de deux vecteurs s'obtient grâce à l'instruction sum(x.*y). • la commande dot(x,y) permet de calculer le produit scalaire des deux vecteurs x et y. • all(x) retourne vrai (1) si tous les éléments du vecteur sont différents de 0 et faux (0) si au moins un élément vaut 0. • any(x) retourne vrai (1) si au moins un élément du vecteur est différent de 0 et faux (0) si le vecteur est composé exclusivement de 0. 11:18 AM 38 Opérations et fonctions portant sur les vecteurs • quelques fonctions spécifiques aux vecteurs: – sum(x) : somme des éléments du vecteur x, – prod(x) : produit des éléments du vecteur x, – max(x) : plus grand élément du vecteur x, – min(x) : plus petit élément du vecteur x, – mean(x) :moyenne des éléments du vecteur x, – sort(x) : ordonne les éléments du vecteur x par ordre croissant, – fliplr(x) : échange la position des éléments du vecteur x. 11:18 AM 39 Opérations et fonctions portant sur les matrices • Les fonctions matricielles les plus courantes sont: – det(A): renvoie le déterminant de la matrice carrée A. – eig(A) : renvoie les valeurs propres (eigen values) de la matrice carrée A. – Si l'on souhaite également les vecteurs propres on exécutera [V,D] = eig(A) qui renvoie une matrice diagonale D formée des valeurs propres de A et une matrice V dont les vecteurs colonnes sont les vecteurs propres correspondant. – poly(A) :renvoie les coefficients du polynôme caractéristique associé à la matrice carrée A. On sera vigilant à l'ordre dans lequel sont rangés les coefficients: le premier élément du vecteur est le coefficient du monôme de plus haut degré 11:18 AM 42 Opérations et fonctions portant sur les matrices • inv(A) : renvoie l'inverse de la matrice carrée A. • rank(A) : renvoie le rang de la matrice carrée A. • trace(A) : renvoie la trace de la matrice A. 11:18 AM 43 Résolution de systèmes linéaires >> A=[1 2 ;3 4], b=[1 ;1]; A = 1 2 3 4 b = 1 1 >> x= A\b x = -1 1 >> A*x ans = 1 1 >>11:18 AM 44 Programmer sous MATLAB • Scripts et fonctions – Il est possible d'enregistrer une séquence d'instructions dans un fichier (appelé un M-file ) et de les faire exécuter par MATLAB. – Un tel fichier doit obligatoirement avoir une extension de la forme .m pour être considéré par MATLAB comme un fichier d'instructions. 11:18 AM 47 Programmer sous MATLAB • On distingue entre 2 types de M-file: – les fichiers de scripts, – les fichiers de fonctions. • Un script est un ensemble d'instructions MATLAB qui joue le rôle de programme principal. • Si le script est écrit dans le fichier de nom nom.m on l'exécute dans la fenêtre MATLAB en tapant nom. • Il est beaucoup plus simple de modifier des instructions dans un fichier à l'aide d'un éditeur de texte que de retaper un ensemble d'instructions MATLAB dans la fenêtre de commande. 11:18 AM 48 Fonction • On définit la fonction fonc de la manière suivante: – function [vars1, ..., varsm] = fonc(vare_1, ..., varen) séquence d'instructions où – vars1, ..., varsm sont les variables de sortie de la fonction; – vare1, ..., varen sont les variables d'entrée de la fonction; – séquence d'instructions est le corps de la fonction. 11:18 AM 49 Boucle for • 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. • Syntaxe : for indice = borne_inf : borne_sup séquence d'instructions End • 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. 11:18 AM 52 Boucle while • Boucle WHILE : tant que . . . faire – Une seconde possibilité pour exécuter une séquence d'instructions de manière répétée 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 – où – 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. 11:18 AM 53 L'instruction conditionnée IF • L'instruction conditionnée IF – On a parfois besoin d'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 • où • 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. 11:18 AM 54 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 cst1, séquence d'instructions 1 case cst2, séquence d'instructions 2 ... case cstN, séquence d'instructions N otherwise séquence d'instructions par défaut end 11:18 AM 57 Graphisme • Gestion des fenêtres graphiques • Graphisme 2D – Tracer le graphe d'une fonction; la commande fplot – La commande plot – La commande loglog • Améliorer la lisibilité d'une figure – Légender une figure – Afficher plusieurs courbes dans une même fenêtre – Sauvegarder une figure • Graphisme 3D – Tracer les lignes de niveau d'une fonction de 2 variables – Représenter une surface d'équation z=g(x,y) – Représenter une surface paramétrée 11:18 AM 58 • On peut ouvrir une nouvelle fenêtre graphique par la commande figure. • Chaque fenêtre se voit affecter un numéro n. Ce numéro est visible dans le bandeau de la fenêtre sous forme d'un titre. • Le résultat d'une instruction graphique est par défaut affiché dans la dernière fenêtre graphique ouverte qui est la fenêtre graphique active. • On rend active une fenêtre graphique précédemment ouverte en exécutant la commande figure(n), où n désigne le numéro de la figure. • La commande close permet de fermer la fenêtre graphique active. On ferme une fenêtre graphique précédemment ouverte en exécutant la commande close(n), où n désigne le numéro de la figure. • Il est également possible de fermer toutes les fenêtres graphiques en tapant close all. 11:18 AM 59 • Pour tracer le graphe de la fonction h(x) = x sin(x) entre -2 *pi et 2*pi, on peut définir la fonction utilisateur h dans le fichier h.m de la manière suivante (attention de bien lire x.*sin(x) et non pas x*sin(x)): function y=h(x) y=x.*sin(x); • On obtient alors le graphe de la fonction h par l'instruction: fplot('h', [-2*pi 2*pi]). • L'autre façon de procéder est d'exécuter l'instruction (là on a le choix entre écrire x.*sin(x) ou x*sin(x)): fplot('x*sin(x)', [-2*pi 2*pi]) 11:18 AM 62 La commande plot • La commande plot permet de tracer un ensemble de points de coordonnées (xi , yi), i=1, ..., N. • La syntaxe est plot(x,y) où x est le vecteur contenant les valeurs xi en abscisse et y est le vecteur contenant les valeurs yi en ordonnée. • Bien entendu les vecteurs x et y doivent être de même dimension mais il peut s'agir de vecteurs lignes ou colonnes. • les points (xi , yi) sont reliés entre eux par des segments de droites. 11:18 AM 63 La commande plot • Tracer le graphe de la fonction h(x) = x sin(x) entre -2*pi et 2*pi , >> x=[-2*pi:0.01:2*pi]; y = x.*sin(x); >> plot(x,y) >> 11:18 AM 64 La commande loglog • Si x et y sont deux vecteurs de même dimension, la commande loglog(x,y) permet d'afficher le vecteur log(x) contre le vecteur log(y). • La commande loglog s'utilise de la même manière que la commande plot. • Voici un exemple : >> x = [1:10:1000]; y = x.^3; >> loglog(x,y) >> 11:18 AM 67 Légender une figure • Il est recommandé de mettre une légende à une figure. – La commande xlabel permet de mettre un texte en légende sous l'axe des abscisses. La syntaxe est • xlabel(' abscisse ') – La commande ylabel fait de même pour l'axe des ordonnées. • ylabel(' ordonnées ') – La commande title permet de donner un titre à la figure. La syntaxe est • title(' le titre') 11:18 AM 68 La commande hold on /off • Il est possible d'afficher plusieurs courbes dans une même fenêtre graphique grâce à la commande hold on. • Les résultats de toutes les instructions graphiques exécutées après appel à la commande hold on seront superposés sur la fenêtre graphique active. • Pour rétablir la situation antérieure (le résultat d'une nouvelle instruction graphique remplace dans la fenêtre graphique le dessin précédent) on tapera hold off. – >> e = exp(1); >> figure >> hold on >> fplot('exp',[-1 1]) >> fplot('log',[1/e e]) >> plot([-1:0.01:e],[-1:0.01:e]) >> grid >> hold off >> 11:18 AM 69 Graphisme 3D • Tracer les lignes de niveau d'une fonction de 2 variables – création d'un maillage, de maille de longueur h, du domaine [xmin , xmax] x [ymin , ymax] grâce à la commande meshgrid, • [X,Y] = meshgrid(xmin:h:xmax, ymin:h:ymax). – Évaluation de la fonction aux nœuds de ce maillage, • Z = g(X,Y) – Affichage des lignes de niveau grâce à la commande contour, • contour(X,Y,Z). 11:18 AM 72 • pour tracer les lignes de niveau de la fonction f(x,y) = x e-(x2+y2) sur le domaine [-2 , 2] x [-2 , 2] en prenant un maillage de maille de longueur h=0.2, on exécute: 11:18 AM 73 >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X.*exp(-X.^2-Y.^2); >> contour(X,Y,Z) >> • pour tracer la surface d'équation z = x e-(x2+y2) sur le domaine [-2 , 2] x [-2 , 2] avec un maillage de maillage de longueur h=0.2, on exécute: >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X.*exp(-X.^2-Y.^2); >> mesh(X,Y,Z) >> 11:18 AM 74 2 1 0 -1 -2-2 -1 0 1 -0.5 0 0.5 2 Importer et exporter des fichiers .mat Exporter – Matlab fournit un format de fichier très pratique pour enregistrer et charger des données: les fichiers«.mat». – Il est possible de sauver tout le workspace : >> save mesdonnees – Toutes les variables du workspace seront enregistrées dans le fichier «mesdonnees.mat» dans le dossier courant. – Pour sauver uniquement certaines variables, il faut les lister à la suite du nom du fichier : >> save mesvars var1 var2 var3 11:18 AM 77 Importer et exporter des fichiers .mat • Importer – L’importation des données est effectuée par la commande load : >> load mesvars; – Toutes les variables préalablement sauvées sont restaurées avec leur nom d’origine. Afin de ne pas écraser d’autres variables présentes dans le workspace, les variables chargées peuvent être attribuées à une nouvelle variable, sous forme de structure. >> mesnouvvars = load('mesvars') 11:18 AM 78 Enregistrer les commandes • Il est parfois important d’enregistrer dans un fichier indépendant la liste des commandes utilisées. Pour ce faire on utilise : >> diary filename • Cette commande va créer un fichier filename qui enregistrera toutes les commandes entrées jusqu’à ce que l’on utilise la commande >> diary off. 11:18 AM 79 • Exemple de fonction de transfert : >> G = tf([1 2],[1 3 2]) G = s + 2 ------------- s^2 + 3 s + 2 Continuous-time transfer function. 11:18 AM 82 • Réponses temporelles – Un ensemble de fonctions permettent de calculer et tracer la réponse d’un système à une entrée donnée. – La fonction step simule la réponse indicielle et impulse la réponse impulsionnelle d’un système donné en argument. – Pour les systèmes de type ss, initial calcule le régime libre d’un système pour des conditions initiales spécifiées. Concernant les options d’affichage, la syntaxe est identique à la fonction plot. >> G = tf(2,[1 2 16]); 11:18 AM 83 • Réponses temporelles >> step(G) 11:18 AM 84 0 1 2 3 4 5 6 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 Step Response Time (seconds) A m pl itu de 11:18 AM 87 0 10 20 30 40 50 60 70 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Linear Simulation Results Time (seconds) A m pl itu de • Lieux de transfert L’analyse fréquentielle d’un système peut être effectuée facilement à l’aide des fonctions spécifiques, réalisant les tracés des lieux de Bode, Nyquist et Black-Nichols : • bode(G) • nyquist(G) • nichols(G) 11:18 AM 88 Simulink • Simulink est un logiciel muni d’une interface graphique 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. 11:18 AM 89
8 Simulink Library Browser, = al -. [ele] x ]
. Enter search term + AQ +| el ~ 4
= re
Simulink/Commonly Used Blocks | & iB
2 Simulink 7
Commonly Used 8 ®y, untitled - Sinnulink t im) Hn i |=). a)
‘Continuous - -
Dashboard File Edit View Display Diagram Simulation Analysis Code Tools Help
Discontinuities
Discrete _=
Logic and Bit 0} ea |
Lockup Tables :
Math Operations | | untitled
@O-/ a
Model Verification
Signal Attributes
Signal Routing
Sinks
Sources
User-Defined Fur
Additional Math
Aerospace Blockset
Communications Syste) [a=]
‘Communications Sys
Computer Vision Syst] 5)
Control System Tool
DSP System Toolbox
4
vv
DsP system Toolbox
Embedded Coder
Fuzzy Logic Toolbox
HOL Coder
HOL Werifier
Image Acquisition To
Instrument Control T
Model Predictive Cont
Neural Network Tool
OPC Toolbox
Phased Array System] il
Report Generator
Robotics System Too
Robust Coniral Toolbx
vvvvTe
v
v
11:18 AM
92
• 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. 11:18 AM 93 • Un bloc peut être éditer en double cliquant dessus, pour changer ses paramètres par défaut. • Par exemple, si l’on souhaite éditer le bloc Sine Wave un double-clique donne la fenêtre 11:18 AM 94 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). • Ces block 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. 11:18 AM 97 Math Operations • Ces 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. 11:18 AM 98 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. 11:18 AM 99