You are on page 1of 78
Débuter avec MATLAB Stéphane Balac Centre de Mathématiques INSA de Lyon (c) Copyright 2001 Stéphane Balac - INSA de Lyon (Centre de Mathematiques, F-69621 Villeurbanne Cedex) (c) Copyright 1999 Stéphane Balac - Université de Bretagne Occidentale (Département de Mathématiques, F-29285 Brest cedex) Ce document peut étre reproduit et distribue & des fins non-commerciales dans son intégra- Jité ou partiellement, La mention du copyright ainsi que lidentité de I'auteur doivent étre conservées et Ia présente notice préservée dans son intégralité sur toute copie intégrale ou partielle. Si vous distribuez ce travail en partie, vous devez mentionner comment obtenir une version intégrale du document. M LAB est un produit de The Mathswork Inc., wew.nathswork.com Table des matiéres 1. Présentation et généralités 1.1 Une session MATLAB 12 Lespace de travail 13 Obtenir de l'aide 1.4 Syntaxe d'une ligne d'instructions 1.5. Gestion des fichiers dut répertoire de travail 2 Types de données et variables 2.1 Panticularités de MATLAR 2.2 Les types de données 2.2.1 Les 4 types de données MATLAB 2.2.2 Le type complexe 2.2.3 Le type chaine de caractéres 2.2.4 Le type logique 2.3 Les vecteuss 28.1 Définir un vecteur 23.2 Vecteurs spéciaux 24 Les matrices 24.1 Définir une matrice 24.2 Matrices spéciales 24.3 Manipuler des matrices 2.5. La structure sparse 3 Caleuler avec MATLAB 3.1 Les constantes 3.2. Opérations et fonctions portant sur les scalaires 3.3 Opésations et fonctions portant sur les vecteurs 3.4 Opérations et fonctions portant sur les matrices 3.5. Résolution de systemes linéaires 36 4. Les entrées-sorties 4.1 Les formats d’affichage des réels 42 Affichage simple, la commande disp 43° Lecture 44 Impressions dirigées par format 5 Programmer sous MATLAB 5.1. Scripts et fonctions 5.2 Opérateurs de comparaison et opérateurs logiques 5.3 Instructions de contréle 5.3.1 Boucle FOR : parcours d'un intervalle 5.3.2 Boucle WHILE : tant que .. . faire 5.3.3 Linstruction conditionnée IF 5.34 Choix ventilé, instruction switch 5.3.5 Interruption dune boucle de contréle 5.4 Un exemple complet 28 30 31 34 36 36 36 37 37 41 41 44 45 45 46 an 49 51 52 6 Graphisme 6.1 Gestion des fenétres graphiques 62. Graphisme 2D 6.2.1 Tracer le graphe d'une fonction la commande fplot 6.2.2 La commande plot 6.2.3 La commande loglog 63. Améliorer la lisibilite d'une gure 6.3.1 Légender une figure 6.3.2 Afficher plusieurs courbes dans une méme fenétre 63.3 Sauvegarder une figure 64 Graphisme 3D 6.4.1 Tracer les lignes de niveau dune fonction de 2 variables 6.4.2 Représenter une surface d'équation z = 9(,y) 6.4.3. Représenter une surface paramétrée Introduction Ce document est un guide d'initiation 4 MATLAB. MATLAB est un programme interac tif de calcul scientifique utilisable pour la résolution numérique de nombreux problémes mathématiques ou appliqués. En outre, MATLAB dispose de potentialités graphiques im- portantes, Liobjectif de ce document est de permettre au débutant de rapidement se familiariser avec MATLAB. Aussi, seules les fonctionnalités les plus courantes de MATLAB sont présen- t€es (aucune référence aux Toolbox n'est faite par exemple). De méme, en général, les commandes MATLAB ne sont pas présentées de maniére exhaustive. Seule l'utilisation la plus courante de la commande est mentionnée, Cette documentation a été rédigée en prenant comme support la version 5.1 de MATLAB, Toutefois dans la mesure oft nous nous limitons aux fonctionnalités les plus courantes de MATLAB, la plupart des commandes décrites sont communes aux versions antérieures ct resteront compatibles avec les versions ultérieures, Les commandes sont généralement présentées suivies d'un exemple, Le lecteur est invité & tester par lui méme les exemples proposts (et des variantes), Au sein d'un méme paragraphe, les différents exemples sont souvent liés, Il est done recommandé d’exécuter les exemples dans l'ordre of ils apparaissent, Par contre dun paragraphe & l'autre, il peut ‘tre nécessaire de « nettoyer » lespace de travail en tapant clear all dans la fenétre de controle MATLAB. La présentation qui est faite correspond & une utilisation de MATLAB sur station de travail Unix, mais devrait étre trésfacilement transposable aux autres systémes, MATLAB est abréviation de MATrix LABoratory. MATLAB est avant tout an programme de calcul matriciel. L’exemple suivant est révelateur A ce sujet : si A et B sont deux variables définies comme étant des matrices, l'nstruction A¥B caleule le produit matriciel des ma- trices A et B. D’autre part avee MATLAB, un scalaire est. considéré comme une matrice élément et un veeteur est considéré comme une matrice A une ligne (ou une colonne). Bien qu'un peu déroutant au départ, cette approche s'avére en pratique d'une grande efficacité. Nous supposons que Ie lecteur est familié des notions d’algebre linéaire élémentaire, notamment matriciel. Un exemple de matrice que nous utiliserons fréquemment dans ce document correspond att carré magique. Lexpression carré magique désigne tout tableau caré dont les cases renferment des nombres entiers disposés de telle sorte que les sommes des nombres inscrits sur chaque ligne, sur chaque eolonne et chaque diagonale soient toutes égales. On pourra consulter au sujet des carrés magiques le chapitre 2 de Vouvrage Histoire d'algorithmes [1] : « plus souvent utilisés comme talismans que comme objet de recherche mathématique, les carrés magiques étaient étroitement liés a la vie quotidienne. Ainsi, il était fait appel A eux pour faciliter les accouchements, soigner les morsures d'animaux vvénéneux ou encore guérir de maladie. Il est done naturel qu'ls ne se rencontrent pas que dans les livres mais aussi sur des tableaux, sous forme de gravure sur des monuments, des médailles ...», Comme exemple bien conn, on peut citer le carré magique dordre 4 qui apparait sur une gravure sur bois de la Renaissance ’Albrecht Ditrer (Mélancotie, 1415) Fic. 1 — Mélancolie par Albrecht Diizer (1415). Un canré magique d’erdve 4 apparait au dessous de Ia cloche. Par convention, les commandes MATLAB apparaissent dans le texte dans une fonte « ‘true-type », Les exemples sont eux aussi présentés dans une fonte « true-type ». Dans un souei de gain de place certains exemples sont présentés sur deux colonnes. Ce document est disponible aux formats pdf et postscript auprés de Vautenr. Une version hypertexte (HTLM) de ce document est également disponible. Ce document est destiné & évoluer, aussi toute erreur ou ambigiité relevée, toute remarque ou avis peut étre communiqué A l'adresse suivante : Stephane. Balac@voila. fr. Brest, aotit 1999 Cette version du document a bénéficié de corrections suggérées par Olivier Mazet du Centre de Mathématiques de 'INSA de Lyon, Lyon, janvier 2001 Stéphane Balac Centre de Mathématiques INSA de Lyon F-69621 Villeurbanne Cedex 1 Présentation et généralités 1.1 Une session MATLAB Pour lancer MATLAB!, commencez par ouvrir une fenétre de commande (commandtool) puis déplacez-vous dans votre répertoite (directory) de travail. Voici ce que vous devez, voir apparaitre 2 la commande mat Lab. (unix prompt] matlab (c) Copyright 1984-97 The MathWorks, Ine ALL Rights Reserved Version §.1.0.421 May 25 1997 Commands to get started: intro, deno, help help Commands for more information: help, vhatsney, info, subscribe Notez le prompt MATLAB (») qui indique que MATLAB attend des instructions. Voici un exemple de session MATLAB >> A= [13 >> quit he 103 16 flops 42 >> AeA [unix prompt] 139 12 16 Dans cette session on a défini la matrice y(t? AS\a 2 Chague ligne d’instructions doit se terminer par un retour chariot. La commande pour quitter MATLAB est quit. On veillera dans la mesure du possible & ne pas lancer simulta- nément plusieurs sessions MATLAB. et Von a ealeulé son carré. 1.2. L’espace de travail Comme tout langage de programmation MATLAB permet de définir des données va- riables. Les variables sont définies au fur et & mesure que Yon donne leurs noms (iden- tifieateur) et leurs valeurs numériques ou leurs expressions mathématiques. MATLAB ne "Ta prisentan qu ent faite correspond & une utilisation de MaTz.aw gus station de travail Unie, mai devrait étze tr4sfaciloment transposable aux autres systémes. Stephane Balac - Débuter avec MATLAB nécessite pas de déclaration de type ou de dimension pour une variable. Les variables sont stockées dans l'espace de travail (ou workspace) et peuvent étre utilisées dans les calculs subséquents. Pour obtenir la liste des variables actives de l'espace de travail on dispose des com- ‘mandes who et whos. La commande who alfiche le nom des variables actives. La commande hos donne plus d’informations : le nom, la taille du tableau (nombre de lignes et de co- omnes) associé, l'espace mémoire utilisé (en Bytes) et la classe des données (principalement double array s'il s'agit d'un tableau de valeurs réelles ox complexes et char s'il s'agit d'un tableau de caractéres). La commande clear permet de nettoyer I'espace de travail : toutes les variables sont etruites, Hest possible de ne détraire qu'une partie des variables en tapant clear nom-var 8 nom-var est le nom de la (ou des) variable(s) & détruire, >> xe2epi/3; yesin(x); z=cos(x); >> a= 013; 42]; B= Ae; >> = = “bonjour”; >> who Your variables are: A B t x ¥y z >> whos Name Size Bytes Class A 2x2 32. double array B 2x2 32. double array t 1x7 14 char array x txt 8 double array y txt 8 double array 2 txt 8 double array Grand total is 18 elements using 102 bytes >> clear xy t >> whos Name Size Bytes Class A 2x2 32. double array B 2x2 32 double array 2 txt 8 double array Grand total is 9 elements using 72 bytes >> clear >> who >» Stéphane Balac - Débuter avec MATLAB 8 lest possible de sauvegarder une session MATLAB MATLAB dans un fichier pour une utilisation ultéricure. L’instruction save non-fic enregistre toutes les variables de l'espace de travail dans le fichicr nom-fic.mat. Si aucun nom de fichier n'est précisé, le fichier par défaut est matlab.nat. Il est possible de ne sauver qu'une partie des variables (par exemple seulement la variable contenant le résultat d’un calcul) en utilisant I'instruction save non-fic non-var ott non-var est le nom de la (ou des) variable(s) & sauvogarder. At- tention, seu! le contenu des variables est sauvegardé et non pas Pensemble des instructions cffectuées durant la session, Pour ramener dans espace de travail les variables sauvegardées dans le fichier nom-fic.mat, taper load non-fic. Dans l'exemple qui suit on calcule le sinus et le cosinus de 2n/3 dans les variables y et z. On sauve ces résultats dans un fichier toto nat. Aprés avoir quitté MATLAB on peut vérifier que le fichier toto.mat existe bien mais qu'il ne s'agit pas dun fichier ascii. Si Yon relance MATLAB et que l'on tape lead tote, on peut vérifier que les variables y et z existent bien et ont les valeurs précédentes. pi/3, y=sin(x), z=cos(x) 2.0944 y 0.8660 ~0.6000 >> save toto y 2 >> quit 6 flops (unix prompt] 1s toto.mat [unix prompt] more y.mat MATLAB 5.0 MAT-file, Platform: SOL2, Created on: Mon Jul 5 20:42:21 1999 Mr Bee Peer asyyyyye (unix prompt] matlab >> load tote >> who Your variables are: Stéphane Balac - Débuter avec MATLAB 9 =0,5000 777 Undefined function or variable ’x’ La commande diary permet de sauvogarder l'ensemble d'une session dans un fichier ascii pour un traitement ultérieur (insertion dans un document, impression, ...). Le fichier de sauvegarde par défant a pour nom diary. On provoqne la sanvegarde dans le fichier non-fic, par V'instruction diary nom-fic. Attention, c'est la commande diary qui dé. clenche le début de sauvegarde; il est impossible de sauvegarder la partie de la session précédent son appel. Pour arréter In sauvegarde, taper diary off. >> xe2epi/3; yesin(x); >> diary off >> diary toto >> t = an(x) >> z=cos(x) te ze 1.7321 -0,.5000 >> Si vous éditez le fichier toto, voici ce que vous verrez >> z=cos(x) -0.5000 >> diary off et rien de plus 1.3 Obtenir de aide Dans une session MATLAB, il est possible @obtenir une aide en ligne sur une commande on tapant help nom-commande. Par exemple, >> help diary DIARY Save text of MATLAB session DIARY filename causes a copy of all subsequent terminal input and most of the resulting output to be written on the named file. DIARY OFF suspends it. DIARY ON turns it back on. DIARY, by itself, toggles the diary state Use the functional form of DIARY, such as DIARY(?file’), hen the file name is stored in a string. Attention, les commandes MATLAB doivent étre tapées en minuscules pour tre recon- rnues, méme si elles figurent en majuscules dans l'aide en ligne. Stéphane Balac - Débuter avec MATLAB 10 ‘On peut également obtenir de Paide par Ie biais de la commande doc qui donne accés & une documentation complete au format HTML. Pour quitter cette documentation, cliquer sur Exit Program dans le menu File du navigateur La commande lookfor permet de rechercher un mot-clé parmi les lignes de commen- taires en entéte des fonctions MATLAB (ces lignes sont celles affichées par la commmande doc). L'instruction lookfor motclé recherche le mot-clé motc1é dans la premiére ligne de commentaire de toutes les fonctions MATLAB. Liinstruction lookfor motclé -all re- cherche le mot-clé dans toutes les lignes de commentaires en entéte des fonctions. Attention le mot-clé doit étre en anglais, les commentaires des fonctions MATLAB étant rédigés en anglais. On peut utiliser une phrase comme mot-clé, Il faut alors Vécrire entre guillemets (77), La commande leokfor retourne le nom la fonction MATLAB (ou des fonctions) ot le mot-clé figure dans la premiere ligne de commentaires. Elle retourne également la ligne de commentaires ot figure le mot-clé. Si le mot-clé n'a été trouvé dans antcune ligne de commentaires, MATLAB rend la main sans rien afficher. >> lockfor determinant DET Determinant. >> lookfor ‘tridiagonal matrix’ LESP Tridiagonal matrix with real, sensitive eigenvalues. POISSON Block tridiagonal matrix from Poisson’s equation. TRIDIAG Tridiagonal matrix (sparse) TRIDIEIG Find a few eigenvalues of a tridiagonal matrix TRIDISOLVE Solve A*x = b vhere A is a square, symmetric tridiagonal matrix. >> lookfor papillon > 1.4. Syntaxe d’une ligne d'instructions Si une instruction MATLAB est suivie d'un point virgule, le résultat de cette instruction n'est pas affiché. Pour ré-afficher un résultat contenu dans sine variable, il suflit de taper le nom de la variable. Le résultat de la dernigre instruction exéeutée peut étre rappelé par Ja commande ans >> a= (816; 357; 429); >> ans >> A ans = Ae a1 6767 8s 1 6 e797 305 7 6767 4 9 2 > >> wks Phusieurs instructions MATLAB peuvent figurer sur une méme ligne. Il faut alors les sépater par une virgule ow par mn point vingule. D’autre part, si une commande est trop longue pour tenir sur une ligne, il est possible de poursuivre sur la ligne suivante en terminant la ligne par 3 points (...) >> B= 013; 421; BeB Stéphane Balac - Débuter avec MATLAB u 138 2 16 pox Lt2+3r4+5+6 w+ B494 10 55 > Si la syntaxe de I'instruction soumise est erronée ou si vous demandez & MATLAB exécuter tme instruction illégale (qui n'a pas de sens mathématique par exemple), vous obtiendez un message d’errenr, Ce message vous indique les sources d’erreurs possibles et doit vous permettre de corriger rapidement votre erreur D> A+B 227 Error using Matrix dimensions must agree >> c= (123; 45) 227 Number of elements in each row must be the same. >> whose 97 Undefined function or variable 'whose” > 1.5 Gestion des fichiers du répertoire de travail Un certain nombre de commandes permettent de gérer le fichiers du répertoite de tra- vail. La commande dir donne la liste des fichiers du repertoire de travail. La commande ed permet de changer de répertoire de travail. La commande type permet d’afficher le contenu d'un fichier. La commande delete permet de détruire un fichier. Ces commandes s'utilisent de la méme manitre que les commandes correspondantes 4’Unix (ou du DOS), Enfin la commande edit permet d'ouvrir un éditeur de texte. Le choix de V'éditour a été cffectué au moment de Vinstallation de MATLAB sur votre machine, il vous est done impos- sible de choisir votre éditeur favori, Il est également possible d’exécuter des commandes Unix partir de MATLAB en faisant précéder la commande d'un point d'exclamation ( !) Si vous avez effectué les exemples du paragraphe 1.2, deux fichiers toto ct toto.mat existent dans votre répertoire de travail. Voici alors quelques exemples d'utilisation des commandes de gestion des fichiers, > dir tote toto.mat >> edit toto >> delete toto > is toto.mat Stéphane Balac - Débuter avec MATLAB 2 2 Types de données et variables 2.1 Particularités de MATLAB ‘Comme tout langage de programmation MATLAB permet de définir des données va- riables. Une variable est désignée par un identificatcur qui est formé dane combinaison de lettres et de chiffres. Le premier caractare de V'identifcateur doit nécessairement étre une lettre. Attention, MATLAB différencie majuscules et minuscules! Ainsi X33 et x33 dé- signent dow variables distinctes. Les variables sont définics au fur et & mesure que Von Gonne lems noms (identificateur) et leurs valeurs numériques ou Jews expressions mathé- rmatiques. L'utilisation de variables avec MATLAB ne nécessite pas de déclaration de type ou de dimension. Le type ct la dimension ’unc variable sont déterminés de manicxe auto- rmatique & partir de l'expression mathématique ou de la valeur affectée & la variable. Une variable peut étze de type réel, complexe, chaine de caractéres on logique. Pour MATLAB toute variable est considérée comme étant un tableau d’éléments dum type donné. MATLAB différencie trois formes particuliéxes de tableaux. Les scalaires qui sont des tableaux A une ligne et une colonne, Les vecteurs qui sont des tableaux & une ligne ou une colonne. Les matrices qui sont des tableaux ayant plusieurs lignes et colomnes. Une variable MATLAB cst done toujours un tableau que l'on appelle variable scalairc, veetcur ou matrice suivant la forme du tableaw, 2.2, Les types de données 2.2.1 Les 4 types de données MATLAB Les trois principaux types de variables utilisés par MATLAB sont les types réel, complexe et chaine de caractéres, fl n'y a pas de type entier & proprement parler. Le type logique est associé aut résultat de certaines fonctions. Signalons qu'il est inutile (impossible) de déclarer le type d'une variable. Ce type est établi antomatiquement a partir des valeurs affectées & la variable. Par exemple les instructions x = 2; 2 = 241; rep = ’oui’ ; définissent une variable x de type réel, une variable z de type complexe et une variable rep de type chaine de caracteres. >> clear >> x= 2; 2 2ti; rep = Poul’; >> whos Name Size Bytes Class rep 1x3 6 char array x txt 8 double array z tet 16 double array (complex) Grand total is § elements using 90 bytes ‘Comme on ne définit pas de maniere explicite le type d'une variable, il est parfois utile de pouvoir le déterminer. Cela est possible grace aux commandes ischar, islogical et isreal. ischar (x) retoumne 1 si x est de type chaine de caractéres et 0 sinon. isLogical (x) retourne 1 si x est de type logique ct 0 sinon. La commande isreal (x) est a utiliser avec Aiscernement : elle retoume 1 si x est rel ou de type chatne de caractéres et 0 sinon (x Stéphane Balac - Débuter avec MATLAB 13 est complexe A partie imaginaire non nulle ou n’est pas un tableau de valeurs xéelles ou de caracteres). >> ischar (rep) ° ans = >> isreal (x) 1 ans = >> ischar (x) 1 ans = >> isreal (rep) ° ans >> isreal (2) 1 2.2.2 Le type complexe L'mité imaginaire est désignée par i ou j, Les nombres complexes peuvent étre écrits sous forme cartésienne a+ ib ou sous forme polaire re", Les différentes écritures possibles sont atib, ati*b, atbti, arbi ct réexp(it) ou rtexp(i+t) avec a, b, x et t des variables de type réel, Les commandes imag, real, abs, angle permettent de passer aisément de la forme polaire a la forme cartésienne et réciproquement, Si z est de type complexe, les instructions imag(z) et real(z) retourent la partie imaginaire et la partie réelle de 2, Les instructions abs(z) ct angle(z) retournent le module et Vargument de 2. (On fera attention au fait que les identificateurs 4 et j ne sont pas réservés. Aussi il est possible que des variables de noms 4 et ) aient été redéfinies an cours d'un ealeal antérieur ct soient toujours actives. Si c'est la cas, on peut soit détruire ces deux variables (clear 3 3), det j redeviennent alors l'unité imaginaire, soit ré-affecter & 4 ou a j la valeur unité imaginaire par l'nstruction i=sqrt(-1). On se méfiera done des boucles d'indices i et J dans lesquelles on manipule des variables de type complexe. On fera également attention a ne pas laisser d'espace autour de Punité imaginaire afin d’éviter de mauvaises interprétations des données dans certains cas. Comparez. par exemple, >> z= [1ei, 2, 31] 1,0000 + 1.00001 2.0000 0 + 3.00003 >> ye Ue, 2,3) ye 1,0000 + 1.00001 2.0000 3.0000 0 + 1.00004 2.2.3 Le type chaine de caractéres Une chaine de caractéres est un tablean de caractéres. Une donnée de type chaine de caractéres (char) est représentée sous la forme dune suite de caractéres encadrée d’apos- trophes simples (*). Une variable de type chaine de caractéres étant interprétée comme n tableau de caractéres, il est possible de manipuler chaque lettre de la chaine en faisant référence & sa position dans la chaine. La concaténation de chaines de caractéres s’effectue selon les rdgles de manipulation des tableaux, voir le paragraphe 23. L'exemple suivant présente différentes manipulations d’une chaine de caractéres, Stéphane Balac - Débuter avec MATLAB ul >> cht = "bon? cht = bon >> ch2 = *jour’ cna = jour >> whos Nane Size Bytes Class cht 1x3 6 char array ch2 x4 8 char array Grand total is 7 elenents using 14 bytes >> ch = [ebt,ch2] ans = bonjour >> eh(4), eh(7), eh(1:3) bon >> ch8 = "soi; >> ch = (eh(1:3), ch3, h(7)] bonsoir > Si une chaine de caractéres doit contenir le caractéxe apostrophe (*) celuicci doit etre doublé dans la chaine (ainsi pour affecter le caractéze apostrophe (*) 4 une variable on dovra écrire ™”, soit 4 apostrophes) >> rep = aujourd’hui” 277 rep = aujourd’bui 1 Missing operator, comma, or semi-colon. >> rep = rep aujourd’hui >> apos = 7777 apos = ‘aujourd? "hui? La chaine de caractéres vide s'obtient par 2 apostrophes". La commande isempty permet de tester si une variables de type chaine de caractézes est vide ou non. La commande Stéphane Balac - Débuter avec MATLAB 15 strcmp permet de tester si deux chaines de cazactéres sont égales ou non. 2.2.4 Le type logique Le type logique (logical) posséde 2 formes : 0 pour faux et 1 pour vrai. Un résultat de type logique est retourné par certaines fonctions ou dans le cas de certains tests, Dans Pexemple qui suit on considére une variable x contenant la valeur 123 et une variable y définie par Vexpression mathématique y = exp(log(sr)). On teste si les variables xt y conticnnent les mémes valeurs. La variable tst est une variable de type logique qui vvaut 1 (vrai) les valeurs sont égales et 0 (faux) sinon. Suivant la valeur de tst, on affiche la phrase x est egal a y ou la phrase x est different de y. Dans Vexemple propose, compte-temu des erreurs darrondis lors du caleul de exp(log(123)), a valeur de la variable y ne vant pas exactement 123. On pourra également considérer le cas oi x = 12. >> x = 123; y = exp(log(x)); >> ast = Cxmy ); >> Af tst, disp(’x est egal ay *), else disp(’x est different de y *), end x est different de y >> whos Nane Size Bytes Class tet txt 8 double array (Logical) x txt 8 double array y txt 8 double array Grand total is 3 eles wnt using 24 bytes >> format long >> xy, tet 123 ye 1, 2299999999999990+02 tet = ° >> format, clear 2.3 Les vecteurs 2.3.1 Définir un vecteur (On definit un vecteur ligne en donnant la liste de ses éléments entre erochets ({ }). Les Gléments sont séparés an choix par des espaces on 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 ( ;) ot par des retours chariots (touche Entrée/Enter). On peut transformer un vecteur ligne x en ‘un vecteur colonne et réciproquement en tapant x? (? est le symbole de transposition) Test inutile de définir la longueur dun vecteur au préalable. Cette longueur sera établie automatiquement & partir de l'expression mathématique définissant le vecteur ou & partir des données. On peut obtenir la longueur d'un vectour donné grice ala commande Length. Stéphane Balac - Débuter avec MATLAB 16 Un vecteur peut également étre défini « par blocs » selon la méme syntaxe. Si par exemple 21, 22 et 25 sont trois vecteurs (on note x1, x2 et x3 les variables MATLAB corres- pondantes), on définit le vecteur X = (ry | 2 | t5) par V'instruction X= [xt x2 x3] >> xt = [123], x2= [4,5,6,71, x3 = [85 9; 10] xt 10203 x2 = 4 5 6 7 x3 8 9 10 >> Length (x2), Length x3) 4 3 >> whos Nane Size Bytes Class xt 1x3 24 double array x2 1x4 32. double array 3 3xt 24 double array Grand total is 10 elements using 80 bytes >> x3? 2 8 10 >> X= [xt x2 x3] Xe 102 3 4 5 6 7 8 8 1 Les éléments d'un vecteur peuvent étre manipulés grice & leur indice dans le tableau, Le R° élément du vecteur x est désignée par x(k). Le premier élément d’un vecteur a obligatoirement pour indice 1. Bn pratique ceci impose de faire des translations d’indices si par exemple on souhaite définir une suite z,,n LN. Le terme ay de la suite correspondra Pélément x(1) du vecteur et le terme sry a l'élément x(N+1). I est possible de manipuler plusieurs éléments d'un vecteur simultanément, Ainsi les éléments kA 1 du vecteur x sont désignés par x(k :1), On peut également manipuler facilement les éléments un vecteur dont les indices sont en progression arithmétique. Ainsi si l'on souhaite extraire les éléments k,k +p, k-+2p,-+- ,k-+.Np = 1 on écrira x(ke :p 1), Plus généralement, sik est un vecteur de valeurs entidres, X(K) retourne les éléments du vecteur X dont les indices sont les éléments du vecteur Reprenons l'exemple précédent. Stéphane Balac - Débuter avec MATLAB Ww >> K(2:2:10) 2 4 6 8 > R= 134 6); XW 1 03 4 6 > Il est trés facile de définir un vecteur dont les composantes forment une suite arith- miétique. 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 6, on éerira x = a ch :b. Sia—b n'est pas un multiple de A, le dernier élément du veeteur x sera a+ Ent((a~ 5)/h) hot Ent est la fonction partic entidre. La commande linspace permet de définir un vectour x de longueur N dont les composantes forment une suite arithmétique de premier terme a et de demier terme b (done de raison (a ~ 8)/(N ~ 1)). Les composantes du vecteur sont done linéairement espacés. La syntaxe est x = Linspace(a,b,N) >> x= 11:04:19 Columns 1 through 7 1.1000 1.2000 1.3000 1.4000 1.8000 1.6000 1.7000 Columae 8 through 9 1.8000 1.9000, >> x = 1.1:0.2:2 1.1000 1.3000 1.5000 1.7000 1.9000 >> x = Linspace(1.1,1.9,9) Columas 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 2.3.2 Vecteurs spéciaux des vectours dont les élé- Les commandes ones, zeros ct rand permettent de défin ments ont respectivement pour valeurs 0, 1 et des nombres généxés de maniéxe aléatoire. Stéphane Balac - Débuter avec MATLAB 18 ones(1,n) veeteur ligne de longueur m dont tous les éléments valent 1 ones(m, 1) vecteur colonne de longueur m dont tous les éléments valent 1 zeros(1,n) vecteur ligne de longueur n dont tous les éléments valent 0 zeros(m,1) vecteur colonne de longucur m dont tous les éléments valent 0 rand(1,n) vecteur ligne de longueur n dont les éléments sont générés de manivre aléatoire entre 0 et I rand(a, 1) veetcur colonne de longueur m dont les éléments sont générés de maniére aléatoire entre 0 et 1 2.4 Les matrices 2.4.1 Définir une matrice On a deja vu que l'on définissait la matrice 13 =()) entapant A= (13; 42) Diune facon générale, on définit une matrice en donnant la liste de ses éléments entre crochets. Signalons que MATLAB admet d'autres fagons d’écrire les matrices. Les éléments hue ligne de la matrice peuvent étre séparés aut choix par un blanc ou bien par une virgule Les lignes quant a elles peuvent étre séparées au choix par le point-virgale (;) ou par un retour chariot. Par exemple, on peut aussi écrire la matrice A de la maniére suivante, >> a= [1,3;4,2) >> A= 11,3 Ae 4,2] 103 a 42 1 3 2 >= 8 > 42) Ae 103 2 Un élément d'une matrice est référencé par ses numéros de ligne et de colonne. AG,3) désigne le iélément de la jligne ligne de la matrice A. Ainsi AC2,1) désigne le premier Glémont de la deuxieme ligne de 4, >> A(2,1) 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 Stéphane Balac - Débuter avec MATLAB 19 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) ‘On peut construire trés simplement une matrice « par blocs ». Si A, B, ©, D désignent 4 matrices (aux dimensions compatibles), on définit la matrice blocs «-(ote) (AB; cD) jon par blocs de la matrice 35 1 6 {26 19/24 32 7/21 23/95 o 2 Be 35/17 30_ 534/12 7% 2) 13 >> ALL = [35 16; 3.327; 319 2]; >> M2 = [26 19; 21 23; 22 27); >> a2t = [8 28 33; 305 34); >> R22 = [17 10; 12 14); >> BLL = [ALL A12; A2t 22 J But 31 618 332 7 a 23 38) 2 8 2 33 17 10 30 5 34 124 >> Bi2 = [ 24 25 20 18 16]; >> B= [Bit B12); >> Bal = [ 4 36 29 13 18 >> B= [B; Bat] B 35001 6h 3032 7 ks 318) 2 ko 8 2 «33° «1708 30:8 842k 4 36 2 13 18 at 2.4.2 Matrices spéciales Certaines matrices se construisent trés simplement grace a des commandes dédiées. Citons les plus utilisées Stéphane Balac - Débuter avec MATLAB 20 eye(n) Ja matrice identité dans R"™" ones (,) Ja matrice & m lignes et n colonnes dont tous les éléments valent 1 zeros(m,n) a matrice &m lignes et n colonnes dont tous les éléments valent 0 rand(a,n) une matrice m lignes ot m colonnes dont les éléments sont générés de maniere aléatoire entre 0 et 1 Signalons que si les entiers m et n sont Ggaux on peut se contenter de ne spécifier qu'une seule valeur de dimension : ones(n) est la matrice carrée de dimension n dont tous les léments valent 1. Mentionnons enfin la commande magic(n) qui permet dobtenir une matrice magique de dimension n, >> eye(3) ans = ans 0.4565 0.8214 0.6154 1 0 0 0.0185 0.4447 0.7919 o 1 0 >> magic(6) o 0 4 ans >> ones (3,2) 3 1 6 68k ane 3 92 7 ot 14 a8) 2 kD 14 8 28 33 17 «10 45 104 so 08 634 12k >> zeros(2) 4 36 29 13 18 41 oo oo >> rand (2,3) 2.4.3 Manipuler des matrices Le symbole dewepoints ( :) permet dextraire simplement des ligues ou des colonnes me matrice, Le j* vectenr colonne de la matrice Aest désigné par AC :,3). C'est simple, il suffit de traduire le symbole den-points ( :) par « tout », Ainsi AC +) désigne toutes les lignes ot la j® coloane de la matrice A. Bien entendu, la s® ligne de la mattice A est désignée par AG, :) >> A = magic(5) 7m 1 8s Ae >> AG:,2) 7m 1 8s ans = 23 25 7 1 16 24 4 6 13 20 2 5 1 12 19 2 3 6 18 22 2 >> ACL) 38 Si l'on souhaite échanger les colonnes 2 et 3 de la matrice A une premiére possibilité consiste & exécuter Stéphane Balac - Débuter avec MATLAB a >> v= AG ,2)5 AG ,2) = AC,3); AGI) = v5 Ae 7 1 m8 as 23 7 $$ 1 16 4 13 6 2 2 1 19 12 2 38 12 1828 > ‘On peut également extraire plusicurs lignes ou colonnes simmultanément. Si J est un vecteur dentiers, AC :,J) est la matrice issue de A dont les colonnes sont les colonnes de Ja matrice A d'indices contenus dans le vecteur J. De méme ACJ, :) est Ja matrice issue de A dont les lignes sont les lignes de Ia matrice A d’indices contenus dans le vecteur J. Diune fagon plus générale, 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 AC, 3) tels que iL et 5 EC. >> A= magic(S) Ae 7 mM 1 8 8 23 5 7 14 16 4 6 13 2 2 10 12 19 28 oie >> L= 1351; c= [3 41; >> ACL,c) 18 13 20 22 >> ACL:2:5,3:4) 18 13-20 2 2 >» Dans la demiére instruction, on a utilisé la forme spéciale permettant de définir un vecteur dont les composantes sont en progression arithmétique, voir le paragraphe 2.3, Une seconde possibilité pour échanger les lignes 2 et 3 de la matrice A consiste & exéeuter >> d= 13.24); R= ACD he 7 1 mk 8 23 7 § 14 16 4 13 6 2 2 1 19 12 28 2 18 Stéphane Balac - Débuter avec MATLAB 2 Il existe des commandes MATLAB permettant de manipuler globalement des matrices. La commande diag permet d’extraire la diagonale d'une matrice : si A est une matrice, vediag(A) est le vecteur composé des éléments diagonaux de A. Elle permet aussi de eréer tune matriee de diagonale fixée : si v est un vectour de dimension n, A=diag(v) est la matrice diagonale dont la diagonale est v. >> Aseye(3); diag(a) >> diag(v) 1 100 1 020 1 003 >> ve[t:3] > 123 (On n'est pas obligé de se limiter & la diagonale principale ...La commande diag admet ‘un second parametre k pour désigner la *surdiagonale (si k > 0) ou la A°sous-diagonale (sik <0) >> k= 567;3456 8 2348; 1234) 5 ae 5 4 5 6 7 >> diag(A,-2) 304 8 6 ans = 203 4 8 2 1 203 4 2 >> diag(A.t) > ‘On construit a Vaide de Ia commande diag trés simplement des matrices tridiagonales, Par exemple la matrice correspondant & la discxétisation par differences finies du probléme de Dirichlet en dimension 1 s'obtient ainsi >> N=6; >> Asdiag(2vones(W,1)) - diag(ones(N-1,1),1) - diag(ones(v-1,1),-1) Ae 2 -1 0 0 0 Oo -1 2 4 0 On dispose également de la commande tril permet d’obtenir la partie triangulaire inférieure (1 pour lower) d’ume matrice. La commande triu permet dobtenir la partie triangulaire supérieure (u pour upper) d'une matrice. Stéphane Balac - Débuter avec MATLAB 23 pve [2215-2215 1-12) [>> wri Ae ans = 2 41 4 2 0 0 10204 102000 1-412 toot >> sriu(A) > 2 1 04 o 2 4 oo ‘Comme pour la commande diag, les commandes triu et tril admettent un second paramétre k. On peut ainsi obtenir la partie triangulaire supérieure (ou infériewre) & partir de la Kdiagonale. Ainsi, >> tril(A,-1) ans = ans = 2 1 0 0 09 Oo 12 4 1 0 0 at o-4 2 1-1 0 > >> eril(A,1) (On obtiont la transposée de la matrice A A coefficients réels en tapant A?. Si la matrice cet A coefficients complexes, A’ retourne la matrice adjointe de &. >> A= (012; -104; -2 -10) >> Ae ans. o 1 2 o 4 2 1 0 14 10 2-10 2 1 0 2.5 La structure sparse On appelle matrice ereuse (le terme anglais est « sparse matrix ») ume matrice compor- tant tne forte proportion de coefficients nuls. De nombrewx problémes issus de la physique conduisent I'analyse de systémes linéaires 4 matrice creuse. L’intérét de telles matrices résulte non seulement de la réduction de la place mémoire (on ne stocke pas les zéros) mais aussi de la réduction du nombre d’opérations (on n’effectuera pas les opérations portant sur les zéros). Par défant dans MATLAB une matrice est considérée comme pleine (ou « full » en anglais), c’est-a-dire que tous scs coefficients sont mémorisés. Si M est une matrice, la commande sparse(M) permet d’obtenir la méme matrice mais stockée sous la forme sparse. Sil'on a une matrice stockée sous la forme sparse, on peut obtenir la méme matrice stockée sous la forme ordinaire par la commande full. Il est possible de viswaliser graphiquement la structure dune matrice grace a la commande spy. Si M est une matrice, la commande spy() ouvre une fenétre graphique et affiche sous forme de croix les éléments non-nuls de la matrice. Le numéro des lignes est porté sur Paxe des ordonnées, celui des colo abscisse. On obtient également le nombre d’éléments non-nuls de la matrice. La commande nz permet dobtenit le nombre d'éléments non-nuls dune mattice. Stéphane Balac - Débuter avec MATLAB m4 Reprenons Vexemple de la matzice tridiagonale issue de la discretisation par difféxences finies du probléme de Dirichlet en dimension 1. >> Ne; >> Aediag(2tones(N,1)) - diag(ones(N-1,1),1) - diag(ones(-1,1),-1) Ae 2 -1 0 0 0 a er o 1 2 4 0 0 4 2 4 0 09 oO 4 >> nnz(A) 13 >> B= sparse(A) Be a 2 an 1 (1,2) 1 (2,2) 2 3,2) 1 (2,3) a 3,3) 2 4,3) “a (3,4) -1 aa) 2 6,4) 1 4,5) 1 6,5) 2 >> whos: Name Size Bytes Class A 5x5 200 double array B 5x5 180 sparse array Ny txt 8 double array Grand total is 39 elements using 388 bytes >> spy(A) Pour les trés grosses matrices crcuses, il n'est bien entendu pas souhaitable d’utiliser une structure pleine (full) pour définir Ia matrice avant de passer en stockage sparse La commande sparse permet de définir ume matrice creuse directement sous la forme sparse, On utilise de Ia fagon suivante : A= sparse(is,js,s,n,m) pour définir unc matrice A € R™ dont les coefficients sont muls (et done non mémorisés) sauf les éléments 4,902), e02) Qui valent s(2) pour l variant de 1 & Z longueur du tableau s (L = length(s)) >> Ne6; Stéphane Balac - Débuter avec MATLAB 25 Fic. 2 Résultat de la commande spy (B) >> s =[2eones(1,N), -ones(1,N-1), -ones(1,N-1)) ae Columns 1 through 12 2 2 2 2 2 At Column 13 a >a is = Columns 1 through 12 10 2 3 @€ S$ 4t£ 2 3 4 2 3 6 Colum 13 5 p> js = [h:N,2:N,1:8-1] js Columms 1 through 12 1 2 3 4 § 2 8 4 5&5 1 2 38 Chm, t2m-4, 2:8] Colum 13 4 >> B= sparse(is, js,5,N,N) Be an 2 an a (1,2) a (2,2) 2 (3,2) a (2,3) a 3,3) 2 4.3) a 3,4) a a) 2 Stéphane Balac - Débuter avec MATLAB 26 (5,4) 1 o 0 o 0 1 0 2 Les commandes spéiags, speye et sprand permettent de construire des matrices dia- 4,5) a (5,5) 2 >> A= qull(B) he 2 0-1 «0 10204 o 41 2 0 0 4 0 0 Oo > sgonales, identit stockage « sparse ». Bl et des matrices dont les élémes les s'utilisont de la méme manire que leur équivalent diag, eye et 5 sont des nombres aléatoires avec un rand pout les matrices pleines. jutes les mathématiques de premiére année en un seul volume Algebre et Analyse, Cours de Mathématiques de Premiére Année avec Exercices Corrigés SrSPHANe Batac, ReDERIC STURM Collection Sciences Appliquées de l'INSA de Lyon, Presses Polytechniques et Universitaires Romandes, Lausanne, 2003 (ISBN: 2-88074-558-6) heep://wev. ppur.org Stephane Balac - Débuter avec MATLAB 7 3 Calculer avec MATLAB 3.1 Les constantes Les principales constantes sont Pt 3.1415926595807 1 va F va eps précision numérique relative realmin plus petit nombre & virgule flottante manipulable realnax plus grand nombre &virgule fottante manipulable inf infini. Est obtenu quand on essaie d'évaluer une expression dont le ré- sultat excéde realmax Nat not-a-number. Est obtenu quand on essaie @effectuer une opération non- définie comme 0/0 Les valeurs des constantes eps, realmin et realmax dépendent de la machine sur laquelle MATLAB est installé. Par exemple sur une station SUN Ultra 1 on a eps= 2.2204e ~ 16, realmin= 2.225l¢ ~ 308 ct realmax= 1.7977¢ + 308. Les noms des constantes n'est pas réserv6, c'est-d-dire qu'il est possible de définir des variables de méme nom. Dans ce cas, Videntificateur fera référence & la variable définie par l'utilisateur et non plus la constante MATLAB. On fera attention par exemple, si l'on utilise le type complex, a ne pas écrire de boucles ayant i ou j comme indices. Pour que Videntificateur fasse A nouveau référence a la constante MATLAB, il suffit de supprimer la variable de méme nom de la mémoire par la commande clear. >> pi = 0; cos(pi) 1 >> clear pi >> cos(pi) a1 3.2 Opérations et fonctions portant sur les scalaires lest bien entenda possible dutiliser MATLAB pour faire de simples additions (-:. $i x et y sont deux variables scalaires de type réel, xty, x-y, xty et x/y désignent les 4 ‘opérations usuielles entre les valeurs de x et y dans IX. Si x et y sont deux variables scalaites de type complexe, x+y, x-y, xty ot x/y désignent les 4 opérations usuelles entre les valeurs dex et y dans C. L'exponentiation sobtient grace au symbole * (la syntaxe est x°y) La commande rem donne le reste (remainder) de la division entire de deux entiers (la syntaxe est rem(m,n)). Les commandes Lem(m,n) et gea(m,n) retournent respectivement Stéphane Balac - Débuter avec MATLAB 28 le plus petit multiple commun et le plus grand commun diviseur & deux entiers m et n. La, commande factor (n) permet dobtenir les termes de la décompositi de Ventier n, nen facteurs premiers Les fonctions mathématiques incorporées sont. Log(x) 2ogi0(x) expo) sqrt (x) abs (x0) sign (x) logarithme néperien de x, logatithme en base 10 de x, exponentielle de x, racine carrée de x (s'obtient aussi par x.°0.8), valeur absolue de x, fonction valant 1 si x est strictement positif, 0 si x est nul et -1 si x est strictement négatif Lorsque la fonction est définie sur C, argument peut étre de type complexe. On dispose également de fonctions spécifiques aux complexes con} (2) abs (2) angie(2) real(z) imag(z) Te conjugueé de 2, Ie module de 2, argument de 2, je réolle de 2 pas partie imaginaire de z, Les fonctions d’arrondis sont round(x) floor (x) coil (x) fixGo entier le plus proche de x, arrondi par défaut, arrondi par exets, arrondi par défaut un réel positif et par exeés un réel négatif, Les fonctions trigonométriques et hyperboliques sont Stéphane Balac - Débuter avec MATLAB 29 cos cosinus, acos cosinus inverse (arccos), sin sinus, asin sinus inverse (arcsin), tan tangente, atan tangente inverse (arctan), cosh cosinus hyperbolique (ch), acosh cosinus hyperbolique inverse (argch), sinh sinus hyperbolique (sh), asin sinus hyperbolique inverse (argsh), tanh tangente hyperbolique (th), atanh tangente hyperbolique inverse (argth) 3.3. Opérations et fonctions portant sur les vecteurs Une particularité de Marzas est de permettre d'effectuer des opérations de maniére slobale sur les Géments d'un vecteur de type réel ou complexe sans avoir & manipuler directement ses éléments, Si k est ume variable scalaire et x un vecteur, Pinstruction kx multiplic tous les éléments de x par k. Six ct y sont deux veetcurs de longucur identique, instruction z = x+y (respectivement x-y) définit le vecteur z dont les éléments sont 2(4) = xi) + y(a) (respectivement 2(4) = (4) - y)). On obtient un vecteur z dont la icomposante est le produit (respectivement le quotient) de la icomposante du vecteur x par la #composante du vecteur y en effectuant l'instruction z = x.*y (respectivement z = x./y). Attention a ne pas oublier le point! La commande cross(x,y) permet de caleuler le produit vectoriel des deux vecteurs x ot y. I] n'y a pas de commande dédiée pour calculer le produit scalaire de deux vecteurs. Il Sobtient grace a Vinstruction sum(x.+y) Les fonctions mathématiques incorporées décrites au paragraphe 3.2 peuvent étre utili- sées avec un argument qui est un vectour, La fonction est alors appliquée a tous les éléments du vecteur en méme temps >> x= [1:10:100); yesqrt Ge) ye Columns 1 through 7 1.0000 3.3166 4.8826 5.5678 6.4031 7.1414 7.8102 Colunns 8 through 10 8.4261 9.0000 9.5394 > Il existe également quelques fonctions spécifiques aux vecteurs? Stéphane Balac - Débuter avec MATLAB 30 sun (x) some des éléments du veeteur x, prod(x) produit des éléments du vecteur x, ax (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) cordonne les éléments du veeteur x par ordre croissant, fliplr(x) : renverse ordre des éléments du vecteur x >> x=[3.12; >> min(x) >> sam(x) ans = ans = 1 6 >> sort (x) >> prod(x) ans. ans = 1 23 6 >> fliplrGo >> max(x) ans ans 2 1 3 Citons enfin quelques fonctions logiques. Les commandes a1%et any?servent & tester si les éléments dun veeteur sont nuls ou non. Si v est un vecteur de valeurs numériques, a11(v) 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(v) retourne vrai (1) si aut moins un élément du vecteur est différent de 0 et faux (0) si le vectour est composé exclusivement de 0. 3.4 Opérations et fonctions portant sur les matrices Si les opérandes sont des matrices, les opérations + (addition), - (soustraction), + (multiplication), ~ (exponentiation), sont alors les opérations matricielles usuelles. Ainsi ‘4B désigne le produit de la matrice A par la matrice B, AFB désigne la somme de ces deux matrices et A"2 le carré de la matrice A >> ali 23; 45 6] >> C= NB Ae c= 123 mi 456 32 32 >> Bs (11; 22; 33) >> 0-2 Be ans = aa 64a 644 22 1472 1472 33 > "Ges commandos peuvent Ggalement Fire utilisées aver une matrice, Dans ce cat la commande porte sur chaque veeteur colonne de la matrice Stéphane Balac - Débuter avec MATLAB 31 Si les dimensions des matrices A ct B sont incompatibles avec l'opération matricielle, MATLAB renvoi un message erreur >> MB 277 Error using > + Matrix dimensions must agree En plus des opérations matriciclles usuelles, il est possible d'effectuer des opérations entre matrices «lément par élément». Pour cela, il faut faire précéder Popérateur dun point (.). Ainsi si A ct B sont 2 matrices de méme dimension, on obtient la matrice dont le terme d'indices (i,j) est le produit des deux termes d’idices (i,j) des matrices A et B par a commande A.¥B. De méme la commande A."2 foumnit la matrice dont les termes sont les carrés des termes de la matrice A. Bien entendu les commandes &.+B ot A+B donnent le miéme résultat. >> Ae[1 2.3; 45 6) ans = Ae 148 123 4 10 18 456 >> Ar? >> Be[1 23; 123] ans Be 1 4 8 123 16 2536 123 > >> AaB Les fonctions matricielles les plus courantes sont, Stéphane Balac - Débuter avec MATLAB 32 aet(a) renvoie le déterminant de la matriee carrée & eig(a) renvoie les valeurs propres (eigenvalues) 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 valews propres de A et une matrice V dont les vecteurs colonnes sont les vecteurs propres correspondant. poly(A) renvoie les coclficients du polynéme caractéristique associé a la matrice carrée A. On sera vigilant a Yordre dans lequel sont rangés les coefficients le premier élément du vecteur est le coefficient du monézme de plus haut, dogré. Ainsi dans exemple suivant il faut lire p(A) = \° -64?—72—27, >> k= (1235456; 780); p= poly(a) pe 1-6-7227 anv (A) renvoie Pinverse 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 expn(A) renvoie lexponentielle matricielle de A. (On peut obtenir les différentes normes d'une matrice A grace & la commande norm, nora(A) renvoie la norme 2 de la matrice & nora(h,2) ‘meme chose que norm(A) norm(A,1) norme 1 de la matrice A, ||A] 1 = max ¥Y as nora(A,inf) none iin dea matice & [Af = gay, 7 la f norm(A, fro!) : norme de Frobenius de la mattice &|Alljro =f So. asl? ) (Ml |! f Ces fonctions matricielles incorporée de MATLAB peuvent étre utilisées avec un argu ‘ment qui est une matrice « sparse ». Les exceptions sont les fonctions rank, expr ct norm qui nécessitent de passer en stockage full (on exécutera donc rank(fu11(B)) par exemple) 3.5 Résolution de systémes linéaires La commande MATLAB \ (backslash) est la commande générique pour résoudre un systéme linéaire. L'algorithme mis en ceavre dépend de la structure de la matrice A du systéme. MATLAB utilise dans ordre les méthodes suivantes = Si Aest une matzice triangulaire, le systéme est résolu par simple substitution. = Si la matrice A est symétrique ou hermitienne, définie positive, la résolution est effectuée par la méthode de Choleski. ~ Si A est une matrice carrée mais n’entrant pas dans les deux cas précédents, une Stéphane Balac - Débuter avec MATLAB 33 factorisation LLU est réalisée en utilisant la méthode d’éimination de Gauss avec strategie de pivot partiel = Si An’est pas une matrice carrée, la méthode QR est utilisée Dans le cas des matrices stockées sous forme spaise, des algorithmes particuliers sont mis en ceuvre, Chacune des méthodes précédentes peut étre utilisée de maniére spécifique sgrice aux commandes chol, 1u, qr. Ll est également possible d’utiliser des méthodes itéra- tives. Les commandes cgs, bicg, bicgstab mettent par exemple en aruvre des méthodes de type gradient conjugué, >> as[t 253.4); belt a)"; 1 >> Ate 1 1 3.6 Les polynémes Sous MATLAB le polynéme de degré 1, p(2) = ayz” + ay 2") ++ tage + ao est délini par un vecteur p de dimension n+ 1 contenant les coefficients {a,}:-o,.. rangés dans Vordre décroissant des indices. C'est-i-dire que Von a p(1) = an, ..., p(t) = a0, La commande polyval permet d’évaluer le polynéme p (la fonction polyndmiale) en des points donnés. La syntaxe est polyval(p,x) oft x est une valeur numérique ott u veeteur. Dans le second cas on obtient un vecteur contenant les valeurs de la fonction polynémiale aux différents points spécifiés dans le vecteur x. Utilisée avee la commande fplot, Ia commande polyval permet de tracer le graphe de la fonction polynémiale sur un intervalle [2in,Fmas] donné. La syntaxe de Vinstruction est fplotCpolyval(L am, ..., a0], ? , Gemin , xmax]) Voiei par exemple comment définir le polynéme p(z) = 2? polynémiale est présenté 8 la figure 3. 1. Le graphe de la fonction >> p= C4, 0, 10; >> polyval (p, 0) 1 >> polyval (p, [-2,-1,0,1,21) 3 0 1 0 3 >> fplot(?polyval([ 1, 0, -1) . 0? , (3,3), grid > (On obtient les racines du polyndme p grace a V'instruction roots (p) Stéphane Balac - Débuter avec MATLAB 34 Fic, 3- Graphe de la fonction polynémiale p(z) = Liinstruction poly permet d'obtenir la représentation canonique p(2) = au2"-+ay12"-l4 + ai + ap dum polynéme de degeé n dont on connait les m racines (2i}sa1, n- Les coefficients {a;};-0,..» sont obtenus sous forme d'un vecteur p et sont rangés dans Vordre déeroissant des indices. C'est-i-dire que p(1) = a.m,..., pati) = a0 >> x = rests(p) =1.0000 1.0000 >> poly(r) 1.0000 0.0000 -1.0000 Stephane Balac - Débuter avec MATLAB 35 4 Les entrées-sorties 4.1 Les formats d’affichage des réels MATLAB dispose de plusieurs formats d’affichage des réels. Par défaut le format est le format court A 5 chiffres. Les autres principaux formats sont format long format long & 15 chiffres. format short & format court & 5 chiffres avec notation en virgule flottante. format long ¢ format long & 15 chiffres avec notation en virgule flottante MATLAB dispose également des formats format short g ct format long g qui utilise la « meilleure » des deux écritures & virgule fixe ou A virgule flottante. On obtiendra tous les formats d'affichage possibles en tapant help format. ‘On impose un format d’alfichage en tapant ‘instruction de format correspondante dans la fenétre de contréle, par exemple format long. Pour revenir au format par défaut on utilise la commande format ou format short >> pi ans = ans = 3. 1006e+01 3.1416 >> format short ¢ >> format Long >> pir > pi ans = ans = 31.006 3.14189265358979 >> format short >> format short ¢ >» >> pics 4.2. Affichage simple, la commande disp La commande disp permet d’afficher un tableau de valeurs numériques on de carac- teres. L’autre fagon dafficher un tableau est de taper son nom. La commande disp se contente d’afficher le tableau sans écrire le nom de la variable ce qui peut améliorer cer- taines présentations. >> A= magic(4); >> disp(A) 6 2 3 13 5 1 1 8 9 7 6 12 4 14 18 4 we 2 3 2 5 11 10 @ 2 7 6 12 Stéphane Balac - Débuter avec MATLAB 36 On utilise fréquemment la commande éisp avec un tableau qui est une chaine de caractéres pour afficher um message. Par exemple disp(’Calcul du déterminant de la matrice A’). On utilise également la commande disp pour afficher un résultat, Par exemple disp([’Le déterminant de la matrice A vaut ’, mun2str(det(A))]). On re marque que usage de la commande disp est alors un peu particulier. En effet un tablean doit tre d'un type dor Pun méme tableau ne peuvent done étre des chaines de caractéres et des valeurs mimériques. On a donc recours a la commande nun2str (« number to string ») pour convertir une valeur numérique en une chaine de caractéres. Par défaut 1a commande num2str affiche 4 décimales mais il est possible de lui spéeifier le nombre de décimales soubaité en second paramétre. De méme il est possible de lui specifier un format d’affichage particulier de la valeur numérique; on consultera la documentation MATLAB pour plus de détails. Attention, sila chaine de caractéres contient une apostrophe il est impératif de doubler Papostrophe. 4.3. Lecture La commande input permet de demander a l'utilisateur d'un programme de fournir des données. La syntaxe est var = input(? une phrase ’). La phrase une phrase cst affichée et MATLAB attend que Putilisateur saisisse une donnée au clavier. Cotte donnée peut étre une valeur numérique ou une instruction MATLAB. Un retour chariot provoque la fin de la saisic. Une valeur numérique est directement affectée & la variable var tandis qu'une instruction MATLAB est évaluce et Je résultat est affecté & la variable var. Il est possible de provoquer des sauts de ligne pour acrer le présentation en utilisant le symbole \n de la maniére suivante : var = imput(? \n une phrase : \n *). Pensez mettre un point virgule (;) 2 la fin de Vinstruction si vous ne souhaitez pas voir s'afficher var = Sous cette forme il est impossible d’avoir une donnée de type chaine de caractéres dans Ja mesure oft MATLAB essaie dinterpréter cette chaine de caractéres comme une instruction. Si l'on souhaite saisir une réponse de type chaine de caractéres on utilise la syntaxe var = input? une phrase ’,’s?). Signalons qu'un retour chariot (sans autre chose) initialise la variable var au tableau vide []. Voici un exemple d'utilisation de la commande input (on suppose que la variable res contient une valeur numérique). rep = input(? Affichage du resultat 7 o/n [0] ’,’s"); if isempty(rep), rep = '07; end Af rep == '0” | rep == 'y? isp([’Le resultat vaut ’, nundstr(res)]) end 4.4 Impressions dirigées par format La commande sprint permet limpression de variables sclon un modéle donné. Un modile d’édition se présente sous Ia forme du symbole pourcent (%) suivi d’indications permettant de composer le contenu du champ a imprimer, en particulier sa longueur en nombre de caractéres. Le modéle d'édition utilisé par MATLAB est le modéle dédition du langage C. Stéphane Balac - Débuter avec MATLAB 37 La syntaxe de la commande sprintf est sprintf (format, variables) — variables est le nom des variables & imprin dans format; = format est le format d’édition. Il s'agit d'une chaine de caractéres contenant les modales d’éditions des variables A imprimer. cr suivant le modéle d’édition spécifie Modéle d’édition de caractéres Un modéle d’édition de caractares est de la forme is oi % est le symbole de début de format et 5 le syimbole précisant que la donnée est de type chaine de caractéres. L est un entier donnant la Jonguicur total du champ (en nombre de caractéres). Par défaut le champ est justifié A droite (si la longueur de la chaine de caractéres est plus petite que la longueur L du champ, des espaces sont insérés avant la chaine de caractétes). Le symbole ~ (moins) juste aprés le symbole % permet de justifier A gauche. En Pabsence de entier L la longueur totale du champ est égale au nombre de caractéxes de la chain. >> sprintf(/¥s’, 71 fera beau a Brest’) ans = Al fera beau a Brest >> temps = ’il fera beau a Brest’; sprint #(’%s’, temps) il fera beau a Brest >> sprintf(’%30s’, temps) il fera beau a Brest 30s’, temps) Al fera beau a Brest >> sprintf (?meteo : Js’, temps) meteo : il fera beau a Brest > Modéle d’édition des réels Un modele d’'édition de réel est de la forme % + L.Dt, oft % est le symbole de début de format, L est un entier donnant la longueur total du champ (en nombre de caractéres, point virgule compris), D est le nombre de décimales a afficher ot ¢ spécifie le type de notation utilisée. Par défant le champ est justfié a droite (sila longueur de la variable est plus petite aque la longueur du champ L, des espaces sont insérés & gauche). Le symbole ~ (moins) permet de justifier & gauche. Le symbole + (plus) provoque Palichage systématique dun signe + devant les réels positif Les principales valeurs possibles pour & sont les suivantes Stéphane Balac - Débuter avec MATLAB 38 a pour les entiers ° pour tme notation a virgule flottante ott la partie exposant est delimitée par un e minuscule (ex : 3.1415¢+00) E ‘méme notation mais & remplace e (ex : 3.14188+00) t pour une notation a virgule fixe (ex : 3.1418) & a notation la plus compacte entre la notation a virgule flottante et la notation & virgule fixe est ulilisée >> x= pi/3; y= simGo; >> sprintf sin (¥8.6f) = 14.28", x,y) sin(1.047198) = 0.87 >> sprintf (sin (¥8.6f) = 14.28", x,y) exp(t.047198) = 8.668-01 > Utilisations particuliéres La commande sprintf est « vectorielle » : si la variable n'est pas scalaire le format impression est réutilisé pour tous les éléments du tableau, colonne par colonne, >> x= (ts10); >> sprintf Yd ,?,x) ans 1,2,3,4,5,6,7,8,8,10, >» {1 est possible d’utiliser les symboles suivant dans les chaines de caractéres \n provoque le passage A une nouvelle ligne \c insére une tabulation horizontale \p décale impression du champ suivant d'un caractére vers la gauche \r saut horizontal >> 2 =U; x = [1:20]; for i=tsLength(e), z= (2 ,x(4), log(x(i))]; ends >> s = sprinte(/4.1f | 48.66 \n?, 2) 1.0 | 0.0000008+00 2.0 | 6.9314728-01 3.0 | 1.0986128+00 4.0 | 1.386294E+00 5.0 | 1.609438E+00 6.0 | 1.791759E+00 7.0 | 1.9458108+00 ‘Stéphane Balac - Débuter avec MATLAB 39 8.0 | 2,079442E+00 9.0 | 2.197228E+00 10.0 | 2.302585E+00 Si Yon a besoin dafficher le caractére %, on le doublera %h pour qu'il ne soit pas interprété comme le début d'un format. La commande fprintf est l'analogue de sprintf pour imprimer de variables selon um modéle donné dans tn fichier Stéphane Balac - Débuter avec MATLAB 40 5 Programmer sous MATLAB 5.1 Scripts et fonctions 1 est possible d’enregistrer une séquence d’instructions dans un fichier (appelé un « Mofile ») ot de les faite exécuter par MATLAB. Un tel fichier doit obligatoirement avoir une extension de la forme -m (doi le nom M-file) pour étre considéré par MATLAB comme un fichier d’instructions. On distingue 2 types de M-fie, les fichiers de seripts et les fichiers de fonctions. Un script est un ensemble d’instructions MATLAB qui joue le véle de programme principal. Si le script est écrit dans Ie fichier de nom nor.m on lexéeute dans la fenétze MATLAB en tapant nom. Méme si l'on ne souhaite pas & proprement parler éerixe de pro- gramme, utiliser un script est tr2s utile, Il est en effet beaucoup plus simple de modifier des instructions dans un fichier a Vaide d’un éditeur de texte que de retaper un ensemble instructions MATLAB dans la fenétre de commande, Les fichiers de fonctions ont dewx roles. Ils permettent & Putilisateur de définir des fonctions qui ne figurent pas parmi les fonctions MATLAB incorporées (« built-in functions ») ot de les utiliser de la méme maniére que ces demiéres (ces fonctions sont nommées « fonctions utilisatenr »). Ils sont également un élément important dans la programmation applications oti les fonctions jouent le role des fonctions et procédures des langages de programmation usuels On définit la fonction fone de la manire suivante function [varsy,...,vars,] = fone(vares,...,varem) séquence @? instructions ot = varsy,...,varsy sont les variables de sortie de la fonction ; = varer,...,varém sont les variables d'entrée de la fonction — saquence d’ instructions est le corps de la fonction, Le fichier doit impérativement commencer par le mot-clé function, Suit entre crochets les variables de sortie de la fonction, le symbole =, Ie nom de la fonction et enfin les variables entrée entre parenthéses. $i la fonction ne posséde qu'une seule variable de sortie, les crochets sont inutiles. Il est impératif que la fonction ayant pour nom fone soit enregistrée dans un fichier de nom fonc.m sans quoi cette fonction ne sera pas « visible » par MATLAB, Dans l'exemple qui suit, on définit une fonction modulo qui calcule la valeur de a modulo nen prenant pour systéme de résidus 1,-+- ,n ant lien de 0,-+- ,n — I (systéme de résidus considéré par la fonction incorporée mod). Les lignes qui suivent doivent étre enregistrées dans un fichier de nom rodulo-m. function (r,q] = modulo(a,n) 4 Calcule 1a valeur de a modulo n en prenant pour systeme de residus A, , mau lieu de 0, 0.0, met appel : [r,q] = modulo(a,n) Arguments de sortie r: le residy q: Le quotient Stéphane Balac - Débuter avec MATLAB a1 @ = floor (a./a); r= a- mg 4 si le reste de 1a division entiere vaut 0, le residu vaut par convention n if == 0, r=; end Les lignes précédées du symbole % sont des lignes de commentaire. Les lignes de com- mentaire situées entre la ligne function ... et la ligne d’instructions sont affichées si Yon demande de Paide sur la fonction module. >> help modulo Caicule 1a valeur de a modulo n en prenant pour systene de residus ty ss.) mau lieu de 0, 0. , mt appel : [r,q] = modulo(a,n) Argunents de sortie x: le residu q: le quotient >» L’appel d'une fonction utilisateur s'effectue de la méme fagon que Papel de n‘importe quelle fonction MATLAB >> b= 10; m= 4; >> [rq] = modulo(b,m) 2 a 2 >> modulo(10,5) 5 > Remarques 11 n'y a pas de mot-clé (par exemple end) pour indiquer la fin de la fonction. La fonction est supposte se terminer a la fin du fichier. I] est toutefois possible de provoquer un retour att programme appelant dans le corps de la fonction grice & la commande return. On ne peut Gcrire qu'une seule fonction par fichier (qui doit porter le nom de ectte fonction). Toutefois dans la version 5 de MATLAB existe la notion de « sous-fonction ». Une sous-fonction est une fonction éerite dans le méme fichier qu’une autre fonction Stéphane Balac - Débuter avec MATLAB 2 (dite principale) et qui ne sera utilisable que par cette fonction principale (ane sous- fonction ne peut pas étxe appelée par un autre sous-programme que la fonction principale). Sile fichier ne commence pas par le mot-clé function on a tout simplement écrit un script! La gestion des variables d'entrée et de sortie est trés souple sous MATLAB, Si l'on nest intéressé que par le résidu ct pas par le quotient, on peut se contenter de ne mettre qu'une seule variable de sortie, v = modulo(10,4). Dans cet appel la variable v contiendra le résidu (la premiére variable de sortie). Par contre, méme si l'on ne souhaite recueillir que le quotient, on est obligé deffectuer un appel de Ia forme (r,q] = modulo(10,4) et done de définir une variable inutile. Aussi, d'une maniére générale, il est bon de ranger les variables de sortie par ordre « d'importance », Il est également possible d’appeler une fonction donnée avec moins de variables d'entrée que le nombre indiqué pour la définition ée la fonction (il faut bien entenda que le corps de Ia fonction soit programmé de sorte de prévoir cette éventualit) Il existe deux fonctions MATLAB utiles pour gérer cette situation nargin qui retourne le nombre de variables d’entrée utilisés lors de Pappel et nargout qui retourne le nombre de variables de sortie prévues lors de Papel. Voici un petit exemple vvenant illustrer ces possibiltés, function [A,rang] = matale(T,m,n) % Construit une matrice A de m lignes et n colonnes ayant des elements entiers generes de maniere aleatoire entre 0 et T. Calcule le rang de 1a matrice si 1’appel est effectue avec 2 argunents de sortie Si la matrice est carree, le paranetre n peut etre onis. Appels [Ayr] = Matate(T,m,2) [Ayr] = Mataie(T,m) A = Matale(T,m,n) A= Matale(T,m) Af nargin == 2 A = fix(Terand(m)) ; else A = fix(Terand(m,n)); end if nargout == 2 rang = rank(A); end Dans cet exemple, on gére les variables d’entrée de la fonction de sorte de ne pas avoir besoin de donner lors de lappel le nombre de lignes et de colonnes si la matrice est carrée. (On gere aussi les variables de sortie afin de ne pas calculer le rang de la matrice si aucune variable de sortie pour le résultat n'est prévue lors de l'appel Stéphane Balac - Débuter avec MATLAB 43 >> [A.x] = matale(20,3,4) re Ae 3 16 13 13 10 >> A = matale (20,3) 10 16 7) (8 ae 4 0 6 8 a 7 2 re 7 16 4 3 1 0 8 >> [Ayr] = matale(20,3) > he 12 0 18 5 4 8 308 8 Un point important conceme la gestion des variables entre le programme principal (ow Je workspace) et les fonctions de l'utilisateur. Toutes les variables définies a Vintérieur d'une fonction sont des variables locales a cette fonction. La commmnication avec des variables du programme prineipal (ou duu « workspace ») ou avec des variables d’autres fonctions se fait uniquement par les variables d’entrée ot sortie de la fonction. Une alternative existe toutefois : il est possible de déclarer certaines variables comme des variables globales. Une variable globale peut étre partagée entre un programme principal et plusieurs fonctions sans qu'il soit besoin de la spécifier parmi les vatiables d'entrée-sortie des différentes fonctions. On déclare une variable globale grace au mot clé global. Par exemple pour déclarer la variable numex globale on Gerit global nunex. Attention, la déclaration global numex doit étze reprise dans chaque fonction utilisant nunex comme variable. 5.2 Opérateurs de comparaison et opérateurs logiques Les opérateurs de comparaison sont égal a (x == y) > strictement plus grand que (x >y) < strictement plus petit que (x plus grand ou égal a (x > y) <: plus petit ou égal a (x < y) “ différent de (x “= y) Les opérateurs logiques sont ® et (x 8 y) I ou (x | y) - non (7 2) Les opérateurs de comparaizon et les opérateurs logiques sont utilisés essentiellement dans les instructions de contr6le, voir le paragraphe 5.3 Stéphane Balac - Débuter avec MATLAB 4 5.3 Instructions de contréle Les instructions de controle sous MATLAB sont trés proches de celles existant dans @autres langages de programmation, 5.3.1 Boucle FOR : parcours d'un intervalle Une premiére possibilité pour exécuter une séquence d’instruetions de maniére répétée consiste a effectuer une boucle pour les valeurs dun indice, inerémenté a chaque itération variant entre deux bornes données. Ce processus est mis en auvre par la « boucle for » Syntaxe for indice = borne_inf : borue_sup séquence d'instructions end ~ indice est une variable appelée V'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 a 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. Interprétation Si bome_inf est plus petit ou égal & borne_sup, le traitement séquence d'instructions cst exécuté (borne_sup — borne_inf + 1) fois, pour les valeurs de la variable indice égales 4 borne_inf, borne_inf-+1,--» ,borne_sup ~ 1, borne_sup. Si borne_inf est strictement plus grand que borne_sup, on passe & l'instruction qui suit immédiatement l'instruction de fin de boncle (end) Remarque Liindice de boucle ne prend pas nécessairement des valeurs entiéres. D'autre part il n'est pas néeessaire que indice de la bouele apparaisse dans le corps de la boucle; par contre il est interdit de modifier sa valeur sil apparait. Tl est possible d'imbriquer des boucles mais clles ne doivent pas se recouvsir. On peut utiliser un inerément (pas) autre que 1 (valeur par défaut). La syntaxe est alors borne_inf : pas : borne_sup. Le pas peut étre négatif. Attention a bien géxer la bore supéricure! Voici un exemple (idiot) venant ilustxer les possibilités de vatiations de Pindice de la boucle >> for r=1.1:-0.1:0.75 disp((’r =’, mum2str(r)]); end Stéphane Balac - Débuter avec MATLAB 45 Voici un exemple d'utilisation d'une bouele pour caleuler nl? >a >> nfac = >> for k = iin nfac = nfactk; end >> nfac afac = 24 5.3.2. Boucle WHILE : tant que . . . faire Une seconde possibilité pour exéeuter une séquence dinstructions de manigre répétée consiste & effectuer une boucle tant qu’une condition reste vérifiee. On arréte de boucler das que cette condition n'est plus satisfaite. Ce processus est mis en vuvre par la « boucle while », Syntaxe while expression logique séquence d'instructions end oa — expression logique est une expression dont le résultat peut Gtre vrai ou faux; ~ séquence d'instructions est le traitement effectuer tant que expression logique est Interprétation ‘Tant que expression logique est vraie le traitement séquence d'instructions est exécuté sous forme d’une boucle, Lorsque expression logique devient fanx, on passe & l'mstruction qui suit immédiatement I'instruction de fin de boucle (end) 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 a11(2)). Il est impératif que le traitement de la séquence dinstructions agisse sur le résultat de expression logique sans quoi on houele indéfiniment (- Voici comment calculer n!Savec une boucle while > kk 4; ty nfac = 1) Stéphane Balac - Débuter avec MATLAB 46 >> while k <= a nfac = nfactk; KS kt; end >> nfac nfac = 24 > 5.8.3 L'instruction conditionnée IF On a parfois besoin d'exécuter une séquence d’instructions seulement dans le cas ott ‘une condition donnée est vérifige au préalable. Différentes formes dinstruction conditionnée existent sous MATLAB Linstruction conditionnée la plus simple a la forme suivante Syntaxe Af expression logique séquence d'instructions ond ~ expression logique est une expression dont le résultat peut étre vrai ou faux; ~ séquence d'instructions est le traitement a effectuer si expression logique est vraie. Interprétation la séquence dinstructions n'est exécutée que si le résultat de Pévaluation de Pexpression logique est vraie (cest-i-dite vaut 1). Dans le cas contraire on exéeute Pinstruction qui suit le mot clé end. Dans le cas of Vexpression logique est vraie, aprés exécution de la séquence d'instructions on reprend le programme & Vinstmuction qui suit le mot clé end Remarque Contrairement 4 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 taxe 4f expression logique séquence d'instructions 1 else séquence d'instructions 2 Tip lecteur aon it calvuler wl plus implement ...Comme par exemple en exécutant prod({1 :n]) Stéphane Balac - Débuter avec MATLAB a7 ond — expression logique est ume expression dont le résultat peut étre vrai ou faux; — séquence d’instructions I est la séquence d'instructions & exéenter dans le cas oi expression logique est vraie ot séquence d’instructions 2 est la séquence d'instructions a exéeuter dans le cas 02 expression logique est faux. Interprétation Si expression logique est vraie la séquence d'instructions 1 est exécutée, sinon c'est la séquence d'instructions 2 qui est exécutée, Le déroulement du programme reprend ensuite 4 la premiére instruction suivant le mot clé end, Test bien entendu possible d’imbriquer des séquences instructions conditionnées (au sens oii la séquence d’mstruction conditionnée contient des sequences @instructions condi- tionnée). Pour une meilleure lisibilite, il est recommandé d’utiliser des indentations afin de mettre en évidence Pimbrication des séquences d'instructions conditiomnées. Lest possible d'etfectuer un choix en cascade Syntaxe 4f expression logique 1 séquence d'instructions 1 elseif expression logique 2 séquence d'instructions 2 elseif expression logique N séquence d'instructions N else séquence d'instructions par défaut end Interprétation Si expression logique 1 est vraie Ia séquence d'instructions 1 est exécutée ot le programme reprend ensuite a la premitre instruction suivant le mot clé end, sinon si expression logique 2 est vraie la séquence d'instructions 2 est exécutée ot le programme reprend ensuite & la premigre instruction suivant le mot clé end, etc. $i aucune des expressions logiques 1 8 N n'est vraie alors séquence d'instructions par défaut est exécutée. Remarque Attention a ne pas laisser d'espace entre else et if; le mot clé est elseif. Stéphane Balac - Débuter avec MATLAB 48 On utilise fréquemment um choix en cascade lors d'iitialisation de données. Par exemple on initialise une matrice A en fonction de la valeur d'une variable nurex (numéro dexemple) de la maniére suivante if mumex == 1 A = ones(n); elseif nunex A = magic(n); elseif numex A= rand(n); else error(*numero d’ exemple non prevu ...); end 5.3.4 Choix ventilé, Pinstruction switch Une alternative 4 l'utilisation dune stquence @instructions conditionnées pour effec- ‘ter un choix en cascade existe. Il s'agit de instruction switen. Syntaxe switch var case cat_i, séquence d'instrnctions 1 case cst2, sequence d’instructions 2 case cst_N , séquence d'instructions N othervise séquence d'instructions par défaut end on ~ var est une variable numérique ou une variable chaine de caractézes ; = est_1, ..., est, sont des constantes munérique ou des coustantes chamne de carac- teres ~ séquence d'instructions i est la séquence d'instructions a exécuter si var" esti Interprétation Si la variable var est égale A Pune des constantes est_1, ..., ¢st_N, (par exemple est_i) alors la séquence d'instructions correspondante (ici séquence d'instructions i) est exéeutée. Le programme reprend ensuite la premiére instruction suivant le mot-clé end. Si la Stéphane Balac - Débuter avec MATLAB 49 variable var n’est égale & aucune des constantes la séquence d'instructions par défaut est exéeutée, Remarque La variable var doit bien entendu étre du méme type que les constantes est_1, ..., c8t_N. I west pas nécessaire de prévoir wn cas par défaut (bien que cela soit préférable). $'il n'y. a pas de cas par défaut et si la variable var n'est égale & aucune des constantes est_1, -.., est_N, alors le programme continue & la premiére instruction suivant le mot-clé end. Si la séquence d’instructions A exécuter est la méme pour différents cas il est possible de les regrouper. La syntaxe est alors, case { cstk , cstl, ...} séquence d’instructions commune Reprenons exemple oit Yon soubhaite initialiser une matrice A en fonction de la valeur prise par une variable numérique nunex (numéro d’exemple). En utilisant un choix ventilé on obtient suiteh numex case 1, A= ones(a) case 2, A» magic(a); case (3,4), A= rand(a); otherwise error (numero 4? Yexemple non previ ..."); end Voici un exemple de choix ventilé portant sur une variable de type chaine de caractéres, rep = input(*Votre reponse (oui, non, chepas) =’) switch rep case (oui, ’0"}, @isp(’brave ...'); case {?non?,’n’} disp(?perdu ...°); case 'chepas’ disp(’c? "est pourtant facile ...”); end Stéphane Balac - Débuter avec MATLAB 50 5.3.5 Interruption d’une boucle de controle Test possible de provoquer une sortie prématurée @une boucle de cor tion break permet de sortir dune boucle for ou d'une houcle while. L'exteution se poursuit alors séquentiellement a partir de instruction suivant le mot clé end fermant la boucle. En cas de boucles imbriquées, on interrompt seulement "exécution de la boucle intérieure contenant instruction break. tréle, L'instruc- Linstruction return provogue 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. Linstruction error permet (arréter un programme et diafficher un message d’erreur La syntaxe est error(? message derreur *). L'instruction varning permet dalfficher tun mestage de mise en garde sans suspendre Iexéeution du programme, La syntaxe est varning(? message de mise en garde *). Il est possible d'indiquer 4 MATLAB de ne ppas afficher les messages de mise en garde d'un programme en tapant warning off dans la fenétre de commandes, On rétablit Vaffichage en tapant warning on, (On peut ainsi améliorer Ja fonction matale de la maniére suivante function (A,rang] = matale(T,m,n) Construit une matrice A dem lignes et n colonnes ayant des elenents entiers generes de maniere aleatoire entre 0 et T Calcule le rang de la matrice si l/appel est effectue avec 2 argunents 4 de sortie % Si la matrice est carree, le param ren peut etre onis Appels % (Ayr) = Matale(T,m,n) % tay] a) % A= Matale(T,m,n) % A= Matale(T,m) J si 1a fonction est appelee avec un nombre d?argunents 4’ entree 4 different de 2 ou 3, on arrete tout if nargin “= 2 & nargin “= 3, error(? La fonction matale doit avoir 2 ou 3 arguments d’’entree *); Af nargin == 2 A = fix(T+rana(m)); else A = fix(Terand(a,n)); Af nargout == 2 rang = rank(A); if nargin == 2 rangx = mj else Stephane Balac - Débuter avec MATLAB al rangx © min([m,n]); end if rang “= rangx, varning(” Le rang a’?est pas maximum °); end; end (On obtient alors les messages suivants >> A= matale(3); 277 Error using ==> matale La fonction matale doit avoir 2 ou 3 arguments d’entree >> A= matale(20,3) he 8 18 8 12 14 18 6 3 18 >> [Ayr] = matale(20,3) Warning: Le rang n’est pas maximum > In /home0/maths/balac/DOCMATLAB/matale.m at line 34 Ae 104038 1 18 30 120¢«8 2 La commande pause permet d’interrompre l'cxécution du programme. L’exécution nor male reprend dés que Putiisatenr enfonce une touche du clavier. L’mstruction pause(n) suspend l'exécution du programme pendant n secondes. 5.4 Un exemple complet Une technique de construction de carrés magiques dordre impair a été proposée par Manuel Moschopoulos au début du X/V*sidele, Cette technique est décrite dans [1] Notons i(x) le muméro de la ligne et e() le numéro de la colonne du carré sur lequel se n carré d'ordre impair n = 2k +1, la technique de Moscho- poulos peut se formuler comme suit - Initialisation de V'algorithme en plagant Punité dans la case immédiatement an dessous de la case centrale, autrement dit a l'intersection de la (k }-1)*colonne et de la (k 4 2)"ligne ia) = +2: el) = k+L - Connaissant la position (I(2), ¢(2)) de Pentier 2, on place Ventier 2+ 1 suivant les régles suivantes Stéphane Balac - Débuter avec MATLAB 52 six n'est pas un multiple de n, alors Ue+1) =1+l(z) (modulo n), ee +1) =1+e(2) (modulo n) six est multiple de n, alors etl) = 2412) (modulo n) c(e+1) = e(z) (modulo n) Dans ces régles pour la prise du modulo, le systéme de résidus que lon consi 1,2,..-,n et non pas 0,1,....2 1 La fonction magik met en oouvre la méthode de Moschopoulos. function M = magik(n) 4 % Calcule le carre magique d’ordre n selon 1a methode 4 de Moschopoulous. 4 Entree n: ordre du carre (entier impair) Sortie M: Le carve magique if rem(a,2) == 0, msg = ['1a methode de Moschopoulous ne construit que des carres’ .) @ ordre impair’); error (msg) k= (n-1)/2; 1) = k+2; c(1) = ket; MQ(1),6(1)) = 15 for x = 2:n.72 11) ,¢()) MAG) ,€G) % ou plus simpl end pos(x-1,L(x-1) ,e(x-1 2) ; ment M(pos(x,1(x-1) ,¢(x-1))) = x5 function (ly, cy] = pos(x,1x,cx,n) a 4% Retourne 1a position (indice de ligne ly et indice de colonne cy) i dans Le carre magique dordre nde l’entier y = xt1 selon la Stephane Balac - Débuter avec MATLAB 4 regle de Moschopoulous i Entree n : ordre du carre (ent x : Dentier considere Ix : indice de ligne de l’entier x dans le carre magique /. cx : indice de colonne de l’entier x dans le carre magique sr impair) Sortie ly : indice de Ligne de l’entier y=x+1 dans le carre magique cy : indice de colonne de l’entier y=xt1 dans le carre magique ° Af rem(x,n) Ly = modulo (2+1x,n) 5 cy = modulo(ex,n); else ly = modulo(t+1x,2); cy = modulo(ttex,a)} Voici qu s éléments des différentes lignes ainsi que la somme des éléments des différentes colonnes sont bien constantes. Pour calculer la somme des éléments diagonaux c'est un peu plus compliqué. On remarque que le carr magique construit différe du carré magique retourné par la fonction MATLAB incorporée magic. Iques exemples dutilisation de la fonction magik. On vétifie que la somme >> magik(4) 277 Error using ==> magix Ja methode de Moschopoulous ne construit que des carres d’ordre impair >> magik(5) mT 8 4 12 2 8 16 7 8 130 a8 10 18 1 14 22 23 6 19 2 15 >> sum(magik (5) ,1) 65 65 6565S >> sum(magik(S) ,2) 65 65 65 65 65 >> magic(5) Stephane Balac - Débuter avec MATLAB sf 7 om 1 8 8 23 5 7 14 16 4 6 13 2 2 10 12 19 2 3 18 228 ‘Toutes les mathématiques de premiére année en un seul volume ites Algébre et Analyse, Cours de Mathématiques de Premiére Année avec Exercices Corrigés > STEPHANE Batac, Frepéric STURM Collection Sciences Appliquées de 'INSA de Lyon Presses Polytechniques et Universitaires Romandes, Lausanne, 2008 (ISBN: 2-88074-558-6) heep://wew. ppur.org Stephane Balac - Débuter avec MATLAB 6 Graphisme 6.1 Gestion des fenétres graphiques Une instruction graphique ouvre une fenétre dans laquelle est affiché le résultat de cette commande. Par défaut, une nouvelle instruction graphique sera affichée dang la méme fenétre et écrasera la figure précédente. On peut ouvir une nouvelle fenétre graphique par la commande figure. Chaque fenttre se voit affecter un numéro. Ce numéro est visible dans le bandeau de la fenétre sous forme dun titre, Le résultat dune instruction graphique est par éfaut affiché dans la demiére fonétxe 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), on désigne le numéro de la figure. La commande close permet de fermer Ia fenétre graphique active. On ferme une fenétre graphique précédemment ouverte en. exécutant Ia commande close(n), oft n désigne le numéro de la figure. Il est également possible de fermer toutes les fenétres graphiques en tapant close all La figure 4 représente la fenétre graphique numéro 1 oit est afiché le graphe de la fone- tion cosinus entre 0 ot 2r, résultat de la commande fplot(? cos? [0 2*pi]). L’apparence de Ia fenétre graphique peut varier légérement suivant le systéme informatique utilisé. Sinn Elle Window Help Stephane Balac - Débuter avec MATLAB 56 6.2 Graphisme 2D 6.2.1 Tracer le graphe dune fonction ; la commande £plot La commande fplot permet de tracer le graphe dune fonction sur un intetvalle donné. La syntaxe est fplot('nomf?, [usin , xmax]) — nonf est soit le nom dune fonction MATLAB incorporée, soit une expression définis- sant une fonction de la variable x, soit Je nom d’une fonction utilisateur. = [emin , snax] est lintervalle pour lequel est tracé le graphe de la fonetion, Ilustrons par des exemples les trois facons dutiliser la commande fplot. On obtient le graphe de la fonction incorporée simus entre —2n et 2r par Pinstruction fplot(’sin’, [-24pi 2epi]) Pour tracer le graphe de la fonction h(z) = x sin(x) entre —2r et 2x, on peut définir la fonction utilisatcur h dans le fichicr hm de la maniére suivante® function y=h(x) yex.#sin(x) ; On obtient alors le graphe de la fonction / par Vinstruction fplot(*h’, [-2*pi 2xpi]) L'autze fagon de procéder est dexécuter l'instruction® fplot(’xtsin(x)’, (-24pi 2*pil). Dans les deux cas on obtient Ie dessin représenté A la figure 5. Test possible de tracer plusicurs fonctions sur la méme figure. Il faut pour cela utiliser la commande fplot de la maniére suivante fplot(? {nom_f1 , nomf2, nomf9]’, (x.min , xmax]) oltnomf_fi, nom_2, non_£3 est soit le nom d'une fonction MATLAB incorporée, soit une expression définissant une fonction de la variable x, soit Ie nom d'une fonction utilisateur. est également possible de gérer les bornes des valeurs en ordonnées, Pour limiter le sgraphe aux ordonnées comprises entre les valeurs y_min et y_max on passera comme second argument de la commande fplot le tableau (xmin , xmax , ymin , ymax ) Voici un exemple dont le résultat est affiché & la figure 6 >> fplot(? [sin(x)/x , cos()/x1’, [-5, 8, -1, 11) “attention de bien lire x.+sin(3) et non pas xesin(x) aon a le choie entre écrire x.4sin(x) of xesin(x) Stéphane Balac - Débuter avec MATLAB 87 5 = Graphe de la fonction A(x) On comprend tres exéeute la commande £pl valeurs en ordonnées si l'on ite Vintérét de gérer les bornes d »eos(x)/x?, (-5, 5]) pour tracer le graphe de la fonction cos(sr)/2 entre —5 et 5. La figure, qui n'est pas vraiment esthétique, n'est pas reproduite ici © 6.2.2 La commande plot La commande plot permet de tracer un ensemble de points de coordonnées (2...) i= 1,--,N. La syntaxe est plot (x,y) oi x est le vecteur contenant les valeurs 2, en abscisse et y est le vecteur contenant les valeurs y, en ordonnée. Bien entendu les vecteurs xt y doivent étre de méme dimension mais il peut s'agir de vecteurs lignes ow colonnes, Par défaut, les points (2), y) sont reliés entre eux par des segmer s de droites. Voici par exemple une autre fagon de tracer le graphe de la fonction A(x) = 2 sin(z) entre —2n et 2m, >> x=[-2epi:0.01:2epi] ; y = x-*sin(x); >> plot(x,y) > Essayex aussi >> xe[-2epi:L:2epil; y = x.¥sin(x); >> plot (x,y) Stephane Balac - Débuter avec MATLAB 1G. 6 ~ Graphe des fonctions sin(x)/x et cos(z)/z entre et 2m ton a caleulé Dans cet exemple on a defini un veeteur x de valeurs équi-réparties entre (avec un pas de 0.01 dans Ie premier cas et de 1 dans le deuxieme cas) Pimage par la fonction h de ces valeurs (vecteur y). On affiche les points de coordonnées (@), y@)) On peut spécifier A MATLAB quelle doit étre la couleur d'une courbe, quel doit étre le style de trait et/ou que! doit etre le symbole a chaque point (#;,y). Pour cela on donne un troisiéme parametre d’entrée a la commande plot qui est une ehaine de 3 caractéres de la forme *est” avec ¢ désignant la couleur du trait, s le symbole du point et t le style de trait. Les possibilités sont les suivantes y jaune point - trait plein m magenta o cercle pointillé court © cyan x marque x - pointillé long r rouge + plus -. pointillé mixte vert + atoile b bleu es carré # blanc 4 Losange k noir vy triangle (bas) triangle (haut) < triangle (gauche) > triangle (droit) Pp _ pentagone h hexagone Stephane Balac - Débuter avec MATLAB 59 Les valeurs par défaut sont = b,s = . ett © -cequi comespond a un trait plein blew reliant les points entre ewx. II n'est pas obligatoire de spécifier chacun des trois caractéres. On peut se contenter den spécifier un ou deux. Les autres seront les valeurs par défaut. La commande grid permet d’obtenir un quadrillage de Ia figure, voir par exemple la figure 4 IL est possible de tracer plusieurs courbes sur la méme figure en spécifiant plusieurs tableaux x1, y1, x2, y2, --+, comme paramétres de a commande plot. Si l'on souhaite que les courbes aient une apparence différente, on utilisera des options de couleurs et/ou de styles de traits distinets aprés chaque couple de vecteurs x,y. Voici un exemple dont le résultat est affiché a la figure 7. On trace sur Pintervalle (5,5) la fonction 2 cos x en trait plein blew ct la fonction zcos.z en trait pointillé rouge >> x = [-8:0.01:5]; >> y = x72. te08(x); 2 = x.4e08H); >> plot (x,y, "B-?.x,2,'8")5 Fic, 7— Résultat de la commande plov(x,y,%b-?.2,2,1F 5°) Voici un autre exemple amusant® >> =200; >> x = rand(1,N); y = rand(1,™); >> plot (x,y, bd”), whitedg ia commande wh permet de paster Is fenétse graphique en inverse vidéo Stephane Balac - Débuter avec MATLAB 69 6.2.3 La commande loglog Si x ot y sont deux vectours de méme dimension, la commande leglog(x,y) permet Wafficher le vecteur Log(x) contre le vecteur Log (y). La commande Leglog s'utilise de la ‘méme maniére que la commande plot. Voici un exemple dont le résultat est affiché a la figure 8. Quelle est la pente de la droite? >> x = [1:10:1000); y = x.73; >> loglog(x,y) > Fic. 8 ~ Résulta e la commande loglog(x,¥) 6.3 Améliorer la lisibilité d’une figure 6.3.1 Légender une figure Test recommandé de mettre une légende & une figure. La commande xLabel permet de mettre un texte en Iégende sous I'axe des abscisses. La syntaxe est xlabel(? légende *) pour obtenir le mot Légende en légende. La commande ylabel fait de méme pour l'axe des ordonnées. La commande title permet de donner un titre & la figure. La syntaxe est, title le titre’) pour obtenir comme titre le titre. Stephane Balac - Débuter avec MATLAB 61 ‘On peut aussi éerixe un texte donné A une position précise sur la figure grace & la commande text. La syntaxe est text(posx,posy,” un texte °) ot posx et posy sont les coordomnées du point (dans le systéme associé au déssin) oit doit débuter Vécriture du texte un texte, La commande gtext permet quant a elle de placer le texte a une position choisie sur la figure & Yaide de la souris. La syntaxe est gtext(? un texte *). Une mire, que Yon déplace en utilisant la sours, apparait. Il suffit dum « clic-souris » pour que le texte apparaisse A la position sélectionnée. I est possible avec ces commandes d’aificher ume valeur contenue dans une variable ‘au miliew de texte, Pour cela on construit un tableau de type chaine de caractéres en convertissant la valeur contenue dans la variable en une chaine de caractéres grace & la commande nusstr. Par exemple, supposons que la variable numex contienne le numéro de l'exemple traité, disons 5. On obtiendra pour titre de la figure Exenple numero § par instruction : title({’Exenple numero *, nur2str(nunex)]) L'exemple suivant dont le résultat est affiché A la figure 9 illustre utilisation des différentes commandes permettant de légender une figure. >> Ps; >> t= [0:.01:23; >> c= 12eexp(-24t) ~ Beexp(-64t); >> plov(t,e); grid >> label (temps en minutes!) >> ylabel('concentation en grame par litre’) >> itle(['evelution de 1a concentration du produit ’, nun2str(P), . au cours du temps *]) >> gtext concentration maximale') > 6.3.2 Afficher plusicurs courbes dans une méme fenétre 11 est possible d’afficher plusieurs courbes dans une méme fenétre graphique grace & Ja commande hold on. Les résultats de toutes les instructions graphiques exécutées aprés appel a la commande hold on seront superposés sur la fenétre graphique active. Pour rétablir la situation antériewre (le résultat d'une nouvelle instruction graphique remplace dans la fenétre graphique le dessin précédent) on tapera hold off. Voici un exemple d'utilisation de la commande held on, Le résultat est présenté & la figure 10. >> @ = exp(t); >> figure >> hold on >> fplot exp’, [-1 1)) >> fplot (log? , [1/e e]) >> plot((-1:0.01:e) , (-1:0.01:e]) >> grid >> held off > Stéphane Balac - Débuter avec MATLAB 62 Fic, 9 - Exemple de légendage d'une figure On dispose done de deux fagons de superposer plusieurs courbes sur une mémne figure, On peut soit donner plusieurs couples de vecteurs abscisses /ordonnées comme argument de la commande plot, soit avoir recours @ la commande hold on. Suivant le contexte on privilégiera l'une de ces solutions platot que Vautre Test possible de décomposer une fer rente sur chacune de ces sous-lenétres grace & la commande subplot. La syntaxe een sous-fenétres ot dafficher une figure difé est subplot (m,n, 1) ~ mest le nombre de sous-fenétres verticalement ; ~ nest le nombre de sous-fenétres horizontalement ~ 4 sort & spécifier dans quelle sous-fenétre doit s’effoctucr Vaffichage. Les fe numérotées de gauche & droite et de haut en bas. Liexemple suivant dont le résultat apparait a la figure 11 illustre l'utilisation de la commande subplot. res sont >> figure >> subplot(2,3,1), fplot(*cos’, [0 4epi]), title(*cosinus’), grid >> subplot(2,3,2), fplot(’sin’, (0 4¥pi]), title(’sinus’), grid >> subplot(2,3,3), fplot(*tan’, (-pi/3 pi/3]), title(tangente’), grid >> subplot(2,3,4), fplet aces’, [-1 1]), title(’arc-cosinus’), grid >> subplot(2,3,5), fplot(’asin’,(-1 1), title(’arc-simus’), grid Stephane Balac - Débuter avec MATLAB 63 Fic. 10 ~ Superposition de plusieurs courbes dans la méme fenétre graphique. >> subplot(2,3,6), fplot(atan’ ,{-sqrt(3) sqrt(@)]), title(*arc-tangente’), grid >» 6.3.3 Sauvegarder une figure La commande print permet de sauvegarder la figure d'une fenétre graphique dans un fichier sous divers formats d'images. La syntaxe de la commande print est on print -f -d désigne le numéro de la fenétze graphique. Si ce parametre n'est pas spécifié, Crest la fenétre active qui est prise en compte. est le nom du fichier dans lequel est sauvegardée la figure. Si aucune extension de nom rest donnée, ume extension par défaut est ajoutée au nom du fichier en fonction du format choisi (ps pour du PostScript, . jpg pour du jpeg, par exemple) cst le format de sauvegarde de la figure, Ces formats sont nombreux. On pourra obtenir la liste complete en tapant help plot. Les principaux sont Ps PostScript noir et blanc psc PostScript couleur eps PostScript Encapsulé noir et blanc epse PostScript Encapsulé couleur peg Format d'image JPEG eit Format d'image TIFF Stéphane Balac - Débuter avec MATLAB of { 7 fo Fig, 11 ~ Fenétre graphique décomposée en sous-fenétres 6.4 Graphisme 3D 4.1 ‘Tracer les lignes de niveau d’une fonction de 2 variables La commande contour permet de tracer les lignes de niveau d'une fonction de 2 va- riables réelles. Cette fonction peut étze définie par une expression MATLAR (par exemple x.sexp(-x."2-y."2)), owétre définie comme une fonction utilisateur. Pour tracer les lignes de niveau de la fonction g(x,y) pour 2 € [2mnins maz] & Y & [Yin Yas) On procede de la manitre suivante ~ ceéation d'un maillage, de maille de longueut f, du donnaine [Emin Emaar] Yon, Yo rice & la commande meshgra, OK,Y] = meshgrid(xmin sh :xmax, ymin ch :y_max). ~ Evaluation de la fonction aux noeuds de ce maillage, soit par appel & la fonction utiisateur définissant la fonction, Z= 6%) soit directement en définissant la fonction par une expression MATLAB ~ ASfichage des lignes de niveau grace a la commande contour, contour (X,Y,2) Ainsi pour tracer les lignes de niveau de la fonction (z, y) + ze“? +"") sur Je domaine 2] x [-2,2] en prenant um maillage de male de longueur h = 0.2, on exéeute >> OXY] © meshgria(-2:.2:2, -2:.2:2); >> Z = K.sexp(-X.-2-¥.-2); >> contour (X,¥,Z) Stephane Balac - Débuter avec MATLAB 65 On peut également écrire une fonction utilisateur gm, function x3 = g(x1,x2) x3-= xt texp(-x1.72-2.72); et exéeuter >> [XY] = meshgrid(-2:.2:2, -2:.2:2); >> Z= gh); >> contour (X,¥,2) > Dans les 2 cas on obtient le Ala figare 12 Fi 3. 12 - Exemple de visualisation des lignes de niveau par la commande contour. Le nombre de lignes de niveau est déterminé de maniére automatique & partir des valeurs extrémes prises par la fonction sur le domaine considéré. Pour imposer le nombre n de lignes de niveau a afficher, il suffit @appeler la fonction contour avec la valeur n comme quatritme paramétre, contour (X,¥,Z,n) existe deux maniéres dafficher les valeurs des lignes de niveau sur la figure. Si lou souhaite afficher les valeurs pour toutes les lignes de niveau, on utilise la commande clabel de la maniéze suivante Stephane Balac - Débuter avec MATLAB 66 >> [Ch] = contour(x,¥,Z,n) >> clabel (C,n) Si l'on souhaite afficher uniquement les valeurs de quelques lignes de niveau, on utilise la commande clabel de la maniere suivante >> [Ch] = contour(x,¥,Z,n) >> clabel(C,h, ’manual’) ‘On peut alors grace a la souris sélectionner les lignes de niveau pour lesquelles on souhaite afficher la valeur Ainsi pour tracer 30 lignes de niveau de la fonction (x,y) —+ (x — 1)? + 10 (2 — y}® sur le domaine (1, 1] x [-1,1] et pour choisir a aide de la souris les lignes de niveau pour lesquelles Pisovaleur doit étre affichée, on exécute >> (KY) = meshgrid(-2:.2:2, -2:.2:2); D> = (KA) 72 + 108(K.-2-¥).72; >> [C,h] = contour(X,¥,Z,30); >> clabel(C,h, ’manual’) > Le résultat est présenté & la figure 13, Fi. 13 ~ Exemple de visualisation des lignes de niveau par la commande contour lest possible de modifier la palette des couleurs en utilisant Ia commande colormap. En tapant help graph3d dans la fenétre de controle MATLAB, vous obtiendzez toutes les Stéphane Balac - Débuter avec MATLAB 67 palettes de couleurs disponibles. A vous de les tester pour obtenir le meilleur effet (~ La commande colormap (gray) permet dutiliser une palette en dégradé de gris, ce qui est trés utile si Yon souhaite une impression de Ia figure sur une imprimante noir et blane. La commande contourf s’utilise de la méme maniére que la commande contour, Elle permet dafficher, en plus des lignes de niveau, un dégradé continu de couleurs qui varie en. fonction des valeurs prises par Ia fonction, La figure 14 présente un exemple d'utilisation de la commande contourt obtenu de la maniro suivante >> [KY] = moshgrid(-2:.2:2, -2:.2:2); D> 25 (e1).-2 + 108(."2-9).72; >> contour (K,¥,2,30) >> colermap(cool); Fic. 14 Exemple de visualisation des lignes de niveau par la commande contourf, Stéphane Balac - Débuter avec MATLAB 68 6.4.2. Représenter une surface d’équation z= 9(2,y) La commande mesh permet de traver une surface d'équation 2 = g(x,y). La fonction 4 pent etre définie dizectement par une expression MATLAB ou étre définie comme une fonction utilisateur, Pour tracer Ta surface d’équation 2 = 9(2,4) pour 2 € [2yminy maz] et ¥V€ mins Ynae] on procede de la maniéxe suivante ~ création d'un maillage, de maille de longueur h, du domaine [sins tmaz] [mins tone] grace A la commande meshgria, [X,Y] = meshgrid(xmin ch :x.max, ymin sh :y_max). ~ Evaluation de la fonction aux noeads de ce maillage, soit par appel a la fonction utilisateur définissant Ja fonction, Z= 6% soit directement en définissant la fonction par d’uno expression MATLAB. = Affichage de la surface grace a la commande nesh, mesh (X,Y, 2) Ainsi pour tracer la surface d’équation z = xe~**+¥") sur le domaine [2,2] x [-2, 2] avec um maillage de maillage de longueur h = 0.2, on exécute >> (XY) = meshgrid(-2:.2:2, -2:.2:2); >> Z = Xsexp(-K.-2-¥.72); >> mesh(X,¥,2) Si la fonction est définie comme une fonction utilisateur dans le fichier g.m, function x3 = g(x1,x2) x3 = xt exp(-x1.72-2.72); con exéente >> DULY] = meshgrid(-2:.2:2, -2:.2:2); >> Z= eV); >> contour (K,Y,2) Dans les 2 cas on obtient le résultat présenté figure 15. Par défaut les valewss extyémes en 2 sont déterminées automatiquement & partir des extremums de la fonction sur le domaine spécilié. Il est possible de modifier ces valeurs (et également les valeurs extrémes en abscisses ct ordonnées) par la commande axis dont la syntaxe est axis (x min x max ymin ymax z_min z_max), Si vous n’étes pas satisfait du résultat, l'instruction axis auto restaure la figure originale, La figure 16 montre par exemple le résultat de Vinstruction axis({ -2 2 -2 2 -2 21) lest également possible de modifier le point de vision grace a la commande view. La commande view a deux arguments qui sont Pangle de vision horizontal et Pangle de vision vertical en degré. Par défaut ces angles ont repectivement les valeurs —37.5° et 30”. La figure 17 montre par exemple le résultat de Vinstruction view(37.5,30) ‘Stéphane Balac - Débuter avec MATLAB 69, > [U,V] = meshgrid(O:.2:2*pi, 0:.2:2); >> K = Vscos(U); >> Y = Vesin(U); >> Z = 200; >> surf (X,¥,2) Si la fonction est définie comme une fonction utilisatenr dans le fichier 6m, function [xt, x2, x3) = G(u,v) xt = veteos(u); x2 = v-tsin(w); x3 = 2h; on exéente >> (U.N) = meshgrid(0:.2:2epi, 0:.2:2); >> OGY,Z] = 6; >> surf (X,¥,2) Dans les 2 cas on obtient le résultat présenté figure 19, Stéphane Balac - Débuter avec MATLAB 3 Fic. 19 ~ Exemple de visualisation d’une surface paramétrée grace 4 la commande surf Stephane Balac - Débuter avec MATLAB ™ Références [1] dean Luc Cuaserr, ed. Histoire d'algorithmes, du caillou @ ta puce. Regards sur la science, Belin, 1994, [2] Kersar Siemon, 1993. Matlab Tutorial http ://awu mines. utah. edu/gg_computer_seninar/aatlab/natlab. hts ‘Toutes les mathématiques de premiére année en un seul volume Algébre et Analyse, Cours de Mathématiques de Premiére Année avec Exercices Corrigés STEPHANE BaLac, FREDERIC $ a Collection Sciences Appliquées de 'INSA de Lyon Presses Polytechniques ct Universitaires Romandes, Lausanne, 2008 (ISBN: 2-88074-558-6) heep://wew. ppur.org Stephane Balac - Débuter avec MATLAB abs, 14, 29 aces, 30 acosh, 30 aide en ligne, 10 all, 31 angle, 14, 29 ans, 11 any, 31 argument, 29 arrondi, 29 asin, 30 asinh, 30 atan, 30 atanh, 30 axis, 69 boule for, 45 boucle while, 46 break, 51 ca, 12 ceil, 29 choix ventilé, 49 chol, 34 clabel, 66 clear, 8, 28 close, 56 colormap, 67 con}, 29 conjugue, 29 contour, 65 contourf, 68 cos, 30 cosh, 30 cross, 30 déterminant, 33, delete, 12 det, 33 diag, 23 diay, 10 dir, 12 disp, 36 76 division entire, 28 doc, 11 edit, 12 cig, 33 eps, 28 error, 51 exp, 29 expa, 33, exponentiation, 28, 31 ‘exponentielle, 29 cexponentielle matricielle, 33 eye, 21 facteurs premiers, 29, factor, 29 factorisation LU, 34 fenétre graphique, 56 Figure, 56 fix, 29 fliplr, 31 floor, 29 fonction utilisateur, 41 fonctions hyperboliques, 29 fonctions trigonométriques, 29 for, 45 format, 36 formats d’affichage des réels, 36 tplot, 4, 57 fprint?, 40 full, 24 gcd, 28 grid, 60 text, 62 hold off, 62 hold on, 62 i, 14, 28 if, 47 imag, 14, 29 inf, 28 input, 37 instruction conditionnée, 47 inv, 33 inverse, 33 ischar, 13 isempty, 15 islogical, 13 isreal, 13 5,14, 28 lem, 28 Length, 16 lignes de niveau, 65 Linspace, 18 oad, 9 Log, 29 110g10, 29 logarithme, 29 Loglog, 61 ookfor, 11 ya, 34 M-file, 41 méthode de Choleski, 33 méthode de gradient conjugué, 34 méthode QR, 34 magic, 21 matrice crouse, 24 matrice par blocs, 20 matrice tridiagonale, 23 max, 31 mean, 31 mesh, 69 neshe, 70 neshgrid, 65, 69, 73 meshz, 70 message d’erreur, 12, 51 message de mise en garde, 51 nin, 31 nod, 41 modéle d’édition, 37 module, 29 NaN, 28 nargin, 43 nargout, 43 nz, 24 nore, 33, norme, 33 nun2stz, 37, 62 ones, 18, 21 palette des couleurs, 67 Stéphane Balac - Débuter avec MATLAB partie imaginaire, 29 partie réelle, 29 pause, 52 pi, 28 plot, 58 plus grand commun divisewr, 29 plus petit multiple commun, 29 poly, 33, 35 polynéme, 34 polynéme caractéristique, 33 polyval, 34 print, 64 prod, 31 produit scalaire, 30 produit veetoriel, 30 ar, quit, 7 racine carrée, 29 racines d'un polynome, 34 rand, 18, 21 rang, 33 rank, 33 real, 14, 29 realmax, 28 realmin, 28 ren, 28 return, 51 roots, 34 ound, 29 sauvogarder une session, 9 save, 9 script 4 sign, 29 sin, 30 sinh, 30 size, 19 sort, 31 sous-fonction, 42 sparse, 25 spdiags, 27 speye, 27 sprand, 27 sprint, 37,39 spy, 24 sart, 29 stremp, 16 subplot, 63 sum, 31 surf, 73 switch, 49 systéme linéaire, 33 tan, 30 ‘tank, 30 text, 62 title, 61 trace, 33 trace, 33 transposée, 24 tril, 23 triu, 23 type, 12 valeur absolue, 29 valeurs propres, 33 variables globales, 44 variables locales, 44 vecteur, 16 veeteurs propres, 33 view, 69 warning, 51 while, 46 whivebg, 60 ho, 8 hos, 8 ‘workspace, 8 xlabel, 61 ylabel, 61 zeros, 18, 21 Stéphane Balac - Débuter avec MATLAB

You might also like