Vous êtes sur la page 1sur 43

Chapitre 1 ` Matlab Initiation a

M ATLAB est un logiciel de calcul et de visualisation, dont les entit es de base sont des matrices : M ATLAB est une abr eviation de Matrix Laboratory. M ATLAB est un langage interpr et e : il propose des facilit es de programmation et de visualisation, ainsi quun grand nombre de fonctions r ealisant diverses m ethodes num eriques. La meilleure fac on dapprendre a ` utiliser ce logiciel est de lutiliser vous m eme, en faisant des essais, en commettant des erreurs et en essayant de comprendre les messages derreur qui vous seront renvoy es. Ces messages sont en anglais ! Ce document est destin ea ` vous aider pour quelques premiers pas avec M ATLAB. Les sections et sous-sections signal ees par (*) donnent des compl ements qui pourront vous e tre utiles a ` lavenir, mais peuvent e tre r eserv ees pour une lecture ult erieure.

1.1 Pour commencer


Nos salles de TP utilisent un environnemment Linux. Pour acc eder au logiciel M ATLAB, vous avez plusieurs possibilit es : - Vous pouvez utiliser les ic ones du menu d eroulant de KDE, et suivre les arborescenses a ` partir du menu CRI. Vous aurez acc` es a ` plusieurs versions de M ATLAB. Les sessions compl` etes mettent en uvre une machine virtuelle java. Elles peuvent se r ev eler un peu trop lourdes lorsquil y a de nombreux utilisateurs. Elles ouvrent une fen etre du type de celle repr esent ee a ` la gure 1.1. - Vous pouvez acc eder aux m emes versions a ` partir dun terminal. Cest cette fac on de proc eder que nous vous recommandons. Elle vous permet en effet de mieux organiser votre travail. Vous devez : ne sur la barre de t ouvrir un terminal (ic ches de votre e cran), cr eer un r epertoire pour le TP en cours. Aujourdhui, vous aller cr eer le r epertoire InitMatlab en entrant la commande : mkdir InitMatlab vous rendre dans ce r epertoire : cd InitMatlab lancer par exemple une session compl` ete : 1

` MATLAB CHAPITRE 1. INITIATION A


matlab -jvm

F IG . 1.1 Exemple de session matlab avec le support java (matlab -jvm). Vous reconna trez votre fen etre de travail par le prompt : >> Vous pourrez quitter M ATLAB en tapant dans cette fen etre : >> quit Dans la suite de cette s eance, vous e tes invit es a ` tester les instructions pr esent ees en les tapant apr` es le prompt. Les instructions et variables M ATLAB sont donn ees dans une typographie de machine a `e crire. Les op erations math ematiques et valeurs repr esent ees par ces variables sont e crites en italiques. Un certain nombre de chiers vous sont fournis. Vous pourrez les r ecup erer en utilisant un navigateur et en vous rendant a ` ladresse : http ://www-gmm.insa-toulouse.fr/huard/InitMatlab/

1.2 Utiliser les aides en ligne


1.2.1 La recherche par mot clef
La commande lookfor est une commande de recherche par mot clef. Elle permet de retrouver toutes les fonctions M ATLAB dont les commentaires introductifs contient une chaine de caract` eres donn es.

1.2. UTILISER LES AIDES EN LIGNE

Si, par exemple, je cherche une fonction permettant de tracer un histogramme, je peux entrer linstruction : lookfor histogram En r eponse, jobtiens la liste suivante : HIST Histogram. HISTC Histogram count. ROSE Angle histogram plot. On utilise ensuite la commande help pour plus de pr ecisions. Cette commande afche les commentaires de la fonction indiqu ee. Ces commentaires contiennent lobjet de la fonction ainsi que les diff erents formats dappel. Ils contiennent e galement une rubrique See Also qui donne les noms de fonctions dont lobjet est en rapport avec la fonction consid er ee. Ces commentaires sont afch es sur la fen etre de travail.

F IG . 1.2 Page daccueil de la fen etre ouverte par helpwin.

1.2.2 La recherche par navigation


La fonction helpwin ouvre une fen etre qui donne acc` es a ` ces commentaires sur une fen etre s epar ee. Lacc` es est arborescent, partant dun classement par domaine dapplication jusqu` a laide de chaque fonction. Le lien est fait avec les aides des renvois sugg er es par la rubrique See Also.

` MATLAB CHAPITRE 1. INITIATION A

La gure 1.2 nous montre sa page daccueil. On peut cliquer sur une ligne pour continuer sa recherche... La commande helpdesk donne acc` es a ` une documentation hypertexte compl` ete support ee par le navigateur internet. Il suft alors de se laisser guider dans sa recherche. Cette aide nest pas accessible lorsque lon utilise M ATLAB sans le support java.

1.3 Variables et Matrices


1.3.1 Matrices
Dans M ATLAB, toutes les variables repr esentent des matrices. Par exemple, on multiplie deux matrices a et b par a*b, et le produit de deux scalaires s ecrit de la m eme fac on : ils sont interpr et es comme des matrices 1X1. On peut d enir une matrice dans M ATLAB de plusieurs fac ons : par la liste de ses e l ements, en la g en erant par une suite dinstructions et de fonctions, en la lisant dans un chier ext erieur. Si lon repr esente la touche enter de votre clavier par le symbole , les instructions suivantes : >> A = [3 2 -2 ;-1 0 1 ;1 1 0] et >> A = [ 3 2 -2 -1 0 1 1 1 0 ] cr eent la m eme matrice 3X3. Dans la suite, le symbole ne sera plus indiqu e. Le symbole = d esigne lop erateur daffectation. Il permet de xer ou de changer la valeur dune variable. En ayant e xecut e lune ou lautre de ces commandes, vous aurez remarqu e que M ATLAB afche la valeur de la variable A que vous venez de d enir. Vous pouvez e viter lafchage en faisant suivre la commande dun point-virgule. Ne la retapez pas pour le v erier ; en utilisant la ` eche ascendante de votre clavier , vous pouvez rappeler la commande >> A = [3 2 -2;-1 0 1;1 1 0] et ajouter le point-virgule >> A = [3 2 -2;-1 0 1;1 1 0] ; M ATLAB distingue les majuscules et les minuscules ; si vous tapez : >> a vous recevrez le message :

1.3. VARIABLES ET MATRICES


??? Undefined function or variable a.

Lensemble des variables actives peut e tre consult e gr ace aux commandes whos et who : >> t = 1; >> whos Name Size Bytes A 3x3 72 Grand total is 9 elements using 72 bytes La commande clear permet de d etruire une variable. >> who Your variables are: A t >> clear t >> who Your variables are: A La commande clear all r einitialise lenvironnement (en d etruisant toutes les variables actives). L enum eration des e l ements dune matrice ou dun vecteur peut e tre implicite. Essayez par exemple : >> m = [-3:3] >> x = [1:-0.25:-1] Les matrices m et x sont des matrices a ` une ligne (vecteurs-lignes). M ATLAB vous fournit les dimensions dune variable par la fonction size : >> size(m) ans = 1 7 Si lon veut un vecteur, on peut taper >> m = m ou >> x = x(:) Lapostrophe d enit la transposition : A repr esente la matrice AT . Les deux points imposent le format colonne :

Class double array

` MATLAB CHAPITRE 1. INITIATION A

` laffichage. >> format compact % pour eviter les sauts de ligne a >> A ans = 3 -1 1 2 0 1 -2 1 0 >> A(:) ans = 3 -1 1 2 0 1 -2 1 0 On peut aussi cr eer directement un vecteur en s eparant les composantes par un pointvirgule : >> b = [3 ; 0 ; 2 ] ; size(b)

Un coefcient quelconque dune matrice est r ef erenc e par ses indices de ligne et de colonne, dans cet ordre. Par exemple, linstruction : >> A(1,2) renvoie la r eponse : ans = 2 ans est le nom dune variable qui rec oit le dernier r esultat dune instruction ou dune suite dinstructions lorsquil na e t e affect ea ` aucune variable. On peut faire safcher la valeur dune variable sans afchage de son nom ni de ans >> disp(A(1,2)) Certaines fonctions de M ATLAB cr eent des matrices particuli` eres. Les quelques matrices suivantes sont parmi les plus couramment utilis ees : eye(n) renvoie la matrice identit e, habituellement not ee In en math ematiques ; essayez eye(4), ones(n,m) renvoie une matrice a ` n lignes et m colonnes dont tous les coefcients sont des 1, zeros(n,m) matrice a ` n lignes et m colonnes dont tous les coefcients sont des 0 ; elle sert beaucoup pour les initialisations. linspace(a,b,n) cr ee une matrice ligne de n points r eguli` erement espac es sur lintervalle [a, b] (bornes comprises). rand cr ee une matrice al eatoire. Essayez >> B = rand(3,4). Dans quel intervalle sont choisis les coefcients de cette matrice ? La commande help permet de recevoir des informations (en anglais !) sur une fonction ; essayez : >> help linspace, >> help rand

1.3. VARIABLES ET MATRICES

1.3.2 Op erations usuelles


M ATLAB permet deffectuer les op erations usuelles en e tendant leur d enition aux matrices selon les r` egles de lalg` ebre lin eaire. Laddition et la soustraction ne m eritent aucun commentaire particulier, sinon que les tailles des matrices doivent e tre e gales, essayez : >> >> >> >> 3+5 ans -2 A + ones(3) m + x La derni` ere commande aura entrain e cette r eponse cinglante : ??? Error using ==> + Matrix dimensions must agree. M ATLAB autorise que les dimensions ne soient pas e gales lorsquune des variables est un scalaire. A + 1 fournit la m eme valeur que A + ones(3). La multiplication de deux variables sera possible si les matrices quelles repr esentent respectent les r` egles de concordance des dimensions : >> >> >> >> >> 3*4 c = A*b C = A*B b*c b*c

Comme les variables A et B repr esentent respectivement des matrices 3 3 et 3 4, la variable C repr esente une matrice 3 4, mais la commande B*A susciterait un message derreur de dimensions. On peut aussi remarquer que le produit scalaire des vecteurs b et c sobtient directement par b*c , alors que b*c d enira une matrice 3 3 (de rang 1 !). M ATLAB autorise que les dimensions ne concordent pas lorsquune des variables repr esente un scalaire. M ATLAB distingue la division a ` gauche et la division a ` droite : >> 3/4 ans = 0.7500 >> 3\4 ans = 1.3333

` MATLAB CHAPITRE 1. INITIATION A

Ainsi cette division doit elle sinterpreter comme le produit par linverse de la variable situ ee du c ot e vers lequel penche la barre : 3/4 repr esente 3 1 alors que 3 \ 4 repr esente 4 1 4. Cette id ee se g en eralise aux variables repr esentant des matrices : 3 >> x = A\b ; >> A*x - b Comment interpr eter le dernier r esultat renvoy e par la machine ? Vous aurez compris que la variable x contient la solution du syst` eme lin eaire A x = b. Au passage, vous remarquerez que cette nouvelle affectation de la variable x e crase la pr ec edente. Quelle reexion vous sugg` ere le r esultat de : >> b/A On peut se demander ce que repr esente la matrice M d enie par >> M = A\eye(3) M ATLAB autorise le produit et les divisions par un scalaire. L el evation a ` une puissance donn ee est d enie par le symbole >> >> >> >> 23 A2 A0 A(-1) Vous avez retrouv e la matrice M . Les r` egles de priorit e des op erations sont conformes a ` celles qui sont utilis ees dans la plupart des langages de programmation. Elles sont donn ees par le tableau suivant : Niveau de priorit e Op eration 1 puissance 2 multiplication et division 3 addition et soustraction A niveau de priorit ee gale, les op erations sont effectu ees de la gauche vers la droite. Les parenth` eses vous permettent dorganiser les priorit es dans vos calculs. Leur utilisation est recommand ee pour e viter les ambiguit es et risques derreurs. >> >> >> >> >> >> 2 + 32 2 + 3*32 2 + (3*3)2 (2 + 3*3)2 A2\A A*A\A : essayez

1.3. VARIABLES ET MATRICES

1.3.3 Op erations sur les tableaux


Une matrice peut e tre vue comme un tableau de valeurs, ind ependament de lalg` ebre lin eaire. M ATLAB permet de travailler avec les valeurs contenues dans un tableau. Pour laddition et la soustraction, il ny a pas de diff erence entre matrice et tableau de valeurs. Pour la multiplication, les divisions et l el evation a ` une puissance, on fait pr ec eder le symbole dop eration dun point. Les tableaux doivent avoir la m eme taille : >> >> >> >> >> >> A.2 M.*A b./c C.*B A.*B A.[2 1 2 ; 2 0 1 ; 1 1 1]

On remarquera que A. 2 e l` eve a ` la puissance 2 chaque e l ement de A. Cest un raccourci pour A. (2*ones(3)).

1.3.4

Manipulations sur les matrices

M ATLAB permet de manipuler les matrices par blocs : Essayez par exemple : C = [ones(3), rand(3,2) ; rand(2,3), eye(2)] On peut ensuite en extraire la sous-matrice form ee des trois derni` eres colonnes : C1 = C(:,3:5); et on retrouve ones(3) en faisant afcher C(1 :3,1 :3). M ATLAB propose quelques fonctions qui facilitent certaines manipulations. La fonction diag extrait la diagonale dune matrice, sous forme dun vecteur, ou cr ee une matrice diagonale, a ` partir dun vecteur ; essayez par exemple les instructions suivantes : >> >> >> >> R = rand(5); diag(R) diag(ans) diag(diag(R))

Largument g en eral de diag est double ; entrez : >> help diag Vous constatez que lon peut ainsi extraire dune matrice ses e l ements dune parall` ele a ` la diagonale. Essayez :

10 >> >> >> >>

` MATLAB CHAPITRE 1. INITIATION A


diag(R,1) diag(R,-2) d = ones(4,1); M = 2*eye(5)-(diag(d,1)+diag(d,-1))

tril renvoie la partie triangulaire inf erieure dune matrice, e l ements diagonaux compris. Elle admet aussi plusieurs arguments >> tril(R) >> tril(R,1) triu renvoie la partie triangulaire sup erieure dune matrice. reshape reformate une matrice, cest-` a-dire change le nombre de lignes et de colonnes, en prenant les e l ements colonne par colonne. repmat cr ee une grande matrice en recopiant une matrice donn ee selon le format fournit.

1.4 Boucles et tests


Les principales instructions de contr ole propos ees par M ATLAB sont for, while et if ; elles fonctionnent a ` peu pr` es comme leurs e quivalents dans les autres langages de programmation.

1.4.1 La boucle for


La boucle for doit respecter la syntaxe suivante : for compteur = expression instructions end Generalement, expression est un vecteur de la forme d ebut :incr ement :fin et compteur prend successivement toutes les valeurs de expression pour e xecuter instructions. Les instructions suivantes permettent de calculer une valeur approch ee de ex , pour x = 10, en utilisant la formule : n xk x e (1.1) k!
k =0

>> >> >> >> >> >>

x = 10; n = 50; s = 1; terme = 1; for k = 1:n, terme = x*terme/k ; s = s + terme ; end; s

1.4. BOUCLES ET TESTS

11

On pourra v erier plus tard que la valeur obtenue, s 2.2026 104 est assez proche de e10 . Plusieurs boucles peuvent e tre embo t ees. Comme M ATLAB est un language interpr et e, il faut essayer d eviter les boucles quand cest possible. Pour cela on peut utiliser des 1 , boucles implicites. Pour construire la matrice H = (hi,j ) M3 (R) avec hi,j = i+j1 on peut utiliser les instructions suivantes : >> n = 3; >> H = zeros(3); >> for i = 1:n for j = 1:n H(i,j) = 1/(i+j-1); end; end; >> H Notez que lon a initialis e la variable H. Cest recommand e lorsque cest possible. Notez e galement que lon a indent e les boucles : cest recommand e pour une meilleure lisibilit e! On peut aussi construire H de la fac on suivante : >> >> >> >> >> J J I E H = = = = = 1:n; repmat(J,n,1); J; ones(n); E./(I+J-E);

Remarque 1 Dans le premier exemple dutilisation de for, la boucle tenait dans une ligne. Dans ce cas, une virgule doit s eparer linitialisation de la boucle de linstruction suivante. Dans la second exemple, puisque lon va a eapparait ` la ligne, le prompt de M ATLAB ne r que lorsque la boucle est correctement termin ee.

1.4.2 La boucle while


Linstruction while respecte la syntaxe suivante : while expression instructions end expression d esigne le r esultat dune op eration logique. Elle est construite en utilisant des op erateurs relationnels et logiques.

12

` MATLAB CHAPITRE 1. INITIATION A

Op erateurs relationnels Op erateur gal e diff erent sup erieur inf erieur ou e gal Symbole == = > <=

Op erateurs logiques Op erateur et logique non logique ou logique Symbole & |

Les instructions seront e x ecut ees tant que expression sera vraie. Toute valeur diff erente de 0 est assimil ee au 1 logique, cest-` a-dire au vrai. Essayez >> >> >> >> >> x = [1 -1 1] ; y = [1 1 -1]; x>0, (x>0),x>0 x>=y x>0 & y>0 x>0 | y>0

Les instructions suivantes permettent de trouver approximativement le plus petit nombre positif repr esent e dans larithm etique utilis ee par M ATLAB : >> x = 1 ; while x>0 , xm = x; x = x/2; end; xm

1.4.3 Le choix conditionnel if


Linstruction if respecte la syntaxe suivante : if expression instructions end Les instructions ne seront e x ecut ees que si expression est vraie. Il est possible de proposer une alternative, en indiquant les instructions a `e xecuter lorsque expression est fausse : if expression instructions 1 else instructions 2 end Il est e galement possible dembo ter les choix propos es : if expression1 instructions 1 elseif expression2 instructions 2

1.4. BOUCLES ET TESTS


else instructions 3 end

13

1.4.4 Utiliser un chier de commandes


Les exemples dutilisation de la boucle for nous ont amen es a `e crire plusieurs lignes de commandes. Lorsque lon veut recommencer lex ecution dun de ces exemples en modiant la valeur dun param` etre, il faudra rappeler toutes les lignes qui suivent sa d enition : cest le cas si lon veut e valuer (1.1) pour une autre valeurs de x ou de n. Cette op eration devient tr` es d esagr eable lorsque lon a emboit e des boucles ! De m eme que vous utilisez un brouillon avant de rendre un devoir, de fac on a ` pouvoir faire des ratures, changer les expressions o` u vous avez d etect e une erreur, vous pouvez e diter un chier de commandes M ATLAB dont vous vous servirez comme dun brouillon. Un tel chier sappelle un M-chier. Il devra e tre enregistr e sous le nom de votre choix avec le sufxe .m. diteur : M ATLAB vous en propose un Pour e crire ce chier, vous devez utiliser un e auquel vous pouvez acc eder en vous servant des ic ones de la fen etre. Nous allons illustrer cette possibilit e en traitant un exemple qui utilise la boucle while et le branchement if : il sagit de tester la conjecture de Syracuse. On part dun nombre entier diff erent de 1. Sil est impair, on le multiplie par 3 et on ajoute 1 ; sinon, on le divise par 2. On recommence avec ce nouveau nombre tant quil nest pas e gal a ` 1. Dans ce cas, en effet, on reproduira ind eniment le cycle { , 1, 4, 2, 1, }. Quelque soit le nombre entier dont on part, on nit toujours par obtenir la valeur 1. Cest en tous cas ce que montre lexp erience, car personne na jamais trouv e de contre exemple. Mais, on a jamais pu d emontrer quil devait en e tre ainsi ! On vous propose de tester cette conjecture. Lobjectif de lexercice est d ecrire un programme M ATLAB qui propose a ` lutlisateur de donner un nombre entier diff erent de 1, et a ` partir de ce nombre, de compter le nombre dit erations de la suite de Syracuse avant quelle natteigne la valeur 1. On prendra la pr ecaution de limiter le nombre dit erations a ` 1000 pour e viter que le programme ne tourne ind eniment. Cela pourrait se produire en cas derreur de saisie. Pour cela, vous allez commencer par e diter le chier dans lequel vous e crirez ce programme. Vous pouvez utiliser le chier qui vous est fournit sous le nom de Syracuse.m et qui contient le squelette de programme qui est donn e au tableau 1.1. Il vous faut remplacer les points de suspension par des instructions appropri ees. Voici quelques indications : - La fonction input permet de proposer a ` lutilisateur de rentrer un entier n initial. - Le symbole % permet de placer des commentaires. - Le nombre dit erations sera donn e par la variable compteur.

14

` MATLAB CHAPITRE 1. INITIATION A

% Syracuse :

Tester la conjecture de Syracuse

n = input(Entrez un entier superieur a 1 : ) ; compteur = 1 ; % Compteur des it erations while ... & ... if rem(n,2) ... n = ... ; else n = ... ; end compteur = compteur +1; end compteur

TAB . 1.1 Programme Syracuse.m - la boucle while sera cotr ol ee par deux expressions logiques, qui autoriseront son e x ecution tant que n restera diff erent de 1 et compteur inf erieur ou e gal a ` 1000. - Le test sur la parit e de n utilise la fonction rem (abr eviation de remainder) qui donne le reste de la division enti` ere par 2 : ce reste vaut 1 si n est impair et 0 sinon. Remarque 2 On ne sest pas trop brid e en limitant le nombre des it erations a ` 1000. Pour des valeurs initiales inf erieures ou e gales a ` 10 000, la suite la plus longue est obtenue pour une valeur initiale de 6171. Sa longueur est 262.

1.5 Fonctions de base


1.5.1 Fonctions scalaires
Ce sont les fonctions usuelles ; par exemple : sin cos tan exp log rem abs sqrt sign round tanh acosh

Ces fonctions font partie des fonctions e l ementaires propos ees par M ATLAB. Pour en avoir la liste, vous pouvez taper : >> help elfun Comme la liste est longue, vous pouvez contr oler son d element : >> more on, help elfun, more off

1.5. FONCTIONS DE BASE

15

Le d element se fait ligne a ` ligne (en tapant une touche quelconque) ou par pages de 20 lignes (en tapant la barre despacements). Vous pouvez maintenant comparer la variable s calcul ee en utilisant la formule (1.1) avec e10 ; >> s - exp(10) Quelle commande devrez-vous entrer pour obtenir la valeur absolue de lerreur relative ? Ces fonctions traitent les variables matricielles comme des tableaux de nombres ; si la variable A repr esente une matrice A, la variable S = sin(A) repr esentera une matrice S dont les coefcients sont si,j = sin(ai,j ). Pour lexponentielle et la racine carr ee, qui poss` edent une version matricielle, M ATLAB propose les fonctions expm et sqrtm. Le cas des polyn omes est un peu particulier : un polyn ome peut e tre d eni par ses coefcients : on utilise dans ce cas une matrice ligne : par exemple, le polyn ome Q(x) = x3 + 2x2 3 sera repr esent e par : >> Q = [1 2 0 -3]; Sa valeur au point x = 1.2 sera fournie par : >> polyval(Q,1.2) Les racines du polyn ome Q seront fournies par la fonction roots. A linverse, on peut aussi d eterminer les coefcients dun polyn ome a ` partir de ses racines en utilisant la fonction poly : >> r=[1 2 3]; K = poly(r) >> polyval(K,r) Ces instructions assignent a ` K la valeur [1 -6 11 -6] qui d enit le polyn ome K (x) = x3 6x2 + 11x 6. Le polyn ome ainsi calcul e a toujours le coefcient de son terme de plus fort degr ee gal a ` 1. Comme les fonctions usuelles polyval traite les matrices comme des tableaux, Il faudra utiliser la fonction polyvalm pour e valuer un polyn ome de matrice. Comparez polyval(K,A) et polyvalm(K,A). Certaines fonctions sp eciales sont e galement propos ees par Matlab : par exemple, les fonctions de Bessel de premi` ere esp` ece not ees J (x) sont donn ees par la fonction besselj dont le format dappel le plus courant est, pour le param` etre entier nu et la variable x : y = besselj(nu,x) ; Vous pouvez retrouver linformation sur le format dutilisation par : >> help besselj La liste de ces fonctions sp eciales vous sera renvoy ee par la commande : >> more on, help specfun, more off

16

` MATLAB CHAPITRE 1. INITIATION A

1.5.2 Fonctions vectorielles


Ces fonctions sont plutot destin ees a ` agir sur des vecteurs, lignes ou colonnes. Elles sont tr` es utiles a ` lanalyse des donn ees. Citons par exemple : max min sum prod mean std sort find

dont vous trouverez lobjet par la commande help lorsquil nest pas e vident. Elles agissent aussi sur les matrices, mais colonne par colonne. Essayez par exemple : >> >> >> >> b = rand(3,3) ; c = max(b) ; d = max(max(b)); b,c,d sort(c) sort(b)

Vous pouvez modier le chier Syracuse.m pour retrouver le r esultat annonc ea ` la remarque 2 en utilisant une boucle for et la fonction max.

1.5.3 Fonctions matricielles


Citons en quelques-unes : eig : valeurs et vecteurs propres dune matrice, inv : inverse, expm : exponentielle de matrice, size : dimensions de la matrice, norm : norme (2 par d efaut, mais aussi 1 ou ), rank : rang. Une liste un peu plus compl` ete, mais non exhaustive, de ces fonctions vous est fournie en annexe. Une liste compl` ete est fournie en r eponse a ` la commande >> more on, help matfun, more off

1.6 Graphiques
1.6.1 Visualisation des courbes en 2D
M ATLAB permet de tracer facilement le graphe de fonctions scalaires. Cela se fait a ` laide de la fonction plot . Elle prend en argument des paires de vecteurs de m eme dimension. Voici par exemple le moyen dobtenir le graphe de la fonction cos 3x sur lintervalle [0, 2 ] : >> x = [0:0.01:2*pi] ; y =cos(3*x) ; plot(x,y); Le format de base de la fonction plot est en fait le suivant :

1.6. GRAPHIQUES
plot(x,y,s) ;

17

o` u x contient les absisses, y les ordonn ees, et s est une chaine de 1 a ` 3 caract` eres : s=ctm, pour la couleur (c) et le style (tm), qui peuvent e tre choisis dans le tableau suivant :

Couleur y m c r g b k w jaune magenta cyan rouge vert bleu noir blanc : -. -+ o * x

Style trait continu (t) pointill es (t) trait-point (t) tirets (t) plus (m) cercles (m) e toiles (m) croix (m)

Les style de trac e suivis de (t) sont des trac es continus, avec une interpolation entre les points fournis, alors que pour les autres on utilise des marqueurs pour ne repr esenter que les points (xi , yi ). On peut combiner ces deux styles. On peut tracer les graphes de plusieurs fonctions simultan ement. Essayez maintenant : >> z = sin(2*x);plot(x,y,x,z); On peut alors l egender notre graphique de la fac on suivante : >> legend(cos(3x),sin(2x)); On peut e galement obtenir ces deux courbes par la succession de commandes : >> plot(x,y); >> hold on; >> plot(x,z); La seule diff erence est que cette fois, les deux graphes sont trac es avec la m eme couleur. hold on g` ere le graphique courant de fac on que les commandes graphiques a ` suivre vont sajouter a ` ce graphique. hold off est a valeur par d efaut : dans ce cas une nouvelle commande plot effacera le graphique existant. Les axes sont d enis automatiquement ; on peut choisir les bornes des coordonn ees du graphe a ` laide de la fonction axis . Essayez par exemple : >> axis([-1 5 -1.5 1.5]); Pour la suite de notre travail, il est pr ef erable que vous entriez maintenant la commande :

18 >> hold off;

` MATLAB CHAPITRE 1. INITIATION A

Le format de la fonction plot permet bien s ur de repr esenter facilement des courbes param etriques : >> plot(y,z); On obtient, pour les valeurs d enies plus haut, une courbe connue sous le nom de courbe de Lissajoux. Les instructions suivantes vont r eduire l eg` erement l echelle, donner un titre et un nom aux axes, et faire appara tre une grille sur le fond : >> >> >> >> >> axis([-1.1 1.1 -1.1 1.1]) title(Courbe de Lissajoux); xlabel(x : axe des absisses); ylabel(y : axe des ordonnees); grid

Vous obtiendrez limpression sur papier dun graphe en utilisant la commande print qui enverra limpression sur limprimante a ` laquelle est reli e votre ordinateur. Cest la derni` ere de vos gures qui sera imprim ee.

Exercice On consid` ere la fonction d enie par F (x) = 0.01 exp x + 10 cos x 3 x. (1.2)

On vous demande d ecrire un M-chier ExempleCourbe.m pour tracer la courbe repr esentant cette fonction sur lintervalle [1, 10], en utilisant ses valeurs aux points k xk = 1 + , 0 k 1100. Vous xerez la taille de la fen etre de visualisation de 100 fac on que les absisses soient comprises entre 1 et 11 et les ordonn ees entre 50 et 200. Vous pourrez compl eter cette gure en y ajoutant les axes et un titre. Ces axes peuvent e tre trac es ` a la main en utilisant les fonctionnalit es de la fen etre graphique (voir les ic ones). Vous les obtiendrez aussi en terminant votre programme par les instructions donn ees dans lencadr e ci-dessous.
... hold on ; plot([0,9],[0,0],9,0,>) plot([0,0],[-20,150],0,150,) hold off ;

1.6. GRAPHIQUES
Exercice

19

Vous allons cr eer un chier qui repr esente la fonction de Bessel de param` etre = 0 sur lintervalle [0, 50], et v erier graphiquement que ses racines sur cet intervalle sont bien approch ees par les expressions (1.3) rj (2 j 1) + , 1 j 15. 2 4 Vous appellerez ce chier VisuRacBess.m. Il devra contenir des instructions pour : - d enir les absisses x (utiliser la fonction linspace), - d enir le param` etre et calculer les y = J (x), en utilisant la fonction fzero. Cette fonction r esoud les e quations non lin eaires. Lalgorithme utilis e combine plusieurs m ethodes, dont celles de la s ecante et de bissection. On doit fournir une valeur pour initialiser les it erations, et il est bon de disposer dune valeur assez voisine de la solution cherch ee. On se servira donc des expressions (1.3). - repr esenter sur la m eme gure les y et laxe des x, - calculer les rj , (d enir un tableau R en utilisant une variable J = [1 :15] ; ), - repr esenter sur la gure pr ec edente les points (rj , 0) par le symbole . On voudrait pouvoir donner un titre a ` cette gure, et pour cela repr esenter les lettres grecques et : cela peut se faire de la fac on suivante : title(La fonction J_{\nu } pour \nu = 0); On peut souhaiter des caract` eres un peu plus grands pour ce titre : title(La fonction {\nu } pour \nu = 0,Fontsize,12); La taille de fonte est pr ecis ee par la propri et e Fontsize, suivie de la valeur choisie. A Cette instruction utilise les r` egles du langage L TEXqui est un langage de programmation de traitement de texte particuli` erement bien adapt e a ` la gestion des formules math ematiques. Elle appelle quelques commentaires : Le caract` ere permet de mettre en position dindice les caract` eres entre accolades qui le suivent. A Le caract` ere \ permet a `L TEX de reconna tre ses commandes. Vous en trouverez quelques-unes dans le tableau 1.2.

1.6.2 Visualisation des courbes en 3D (*)


La fonction qui permet de repr esenter une courbe dans lespace R3 est plot3. Sa syntaxe est plot3(x,y,z,s) ; et cette fois x, y et z sont des vecteurs de m eme dimension contenant les trois coordonn ees. Essayez : >> theta = pi*[-4:0.04:4]; r = linspace(1,6,201); >> x = r.*(1+cos(theta)); y = r.*sin(theta); z = r; >> plot3(x,y,z,k*); grid;

20

` MATLAB CHAPITRE 1. INITIATION A

minuscules grecques

majuscules grecques

symboles math ematiques

Commande Symbole Commande Symbole Commande

Symbole

\alpha \beta \gamma \omega \lambda \pi \rho \nu

\Delta \Theta \Gamma \Omega \Lambda \Phi \Psi \Sigma

\leq \geq \int \infty \sim \partial \in \rightarrow

TAB . 1.2 Principaux symboles math ematiques reconnus par M ATLAB.

1.6.3 Visualisation des surfaces (*)


M ATLAB permet de repr esenter des surfaces donn ees en coordonn ees cart esiennes ou sous forme param etrique. La forme param etrique peut s ecrire : x = x(s, t) y = y (s, t) z = z (s, t) o` u les param` etres s et t parcourent un certain domaine. Plusieurs fonctions permettent cette repr esentation, parmi lesquelles mesh repr esente un treillis, et surf une surface pleine. Elles ont le m eme format dappel : surf(X,Y,Z,C) ; X,Y et Z sont des matrices de m emes dimensions contenant les coordonn ees de points de la surface. C permet de d enir les couleurs et peut e tre omis. Nous allons repr esenter le 2 2 c one dequation x + y 2xz = 0 en utilisant la repr esentation param etrique donnee pour (, ) ] , [] 0, 12[ par : x = (1 + cos ), y = sin , z = . On peut proc eder de la fac on suivante : >> n = 31 ; theta = pi*[-n:2:n]/n ; r = linspace(0,12,n); >> X = r*(1+cos(theta)) ;

1.6. GRAPHIQUES
>> Y = r*sin(theta) ; >> Z = r*ones(size(theta)); >> surf(X,Y,Z);

21

Il est important de remarquer que X, Y et Z sont des matrices de m eme taille ! La surface repr esent ee laisse apparaitre les traces dune grille qui la recouvre. Laspect de la surface est contr ol e par la variable shading, dont les valeurs possibles sont faceted (valeur par d efaut), flat (supprime le treillis), et interp (adoucit les transitions). Essayez : >> shading interp; Les couleurs sont d enies par une matrice C de m eme taille que celles des coordonn ees, et par d efaut, cette matrice est C=Z, de sorte que dune certaine fac on, la couleur est proportionnelle a ` laltitude du point de la surface. Tout cela d epend du choix dune palette graphique. Essayez : >> C = rand(size(Z)) ; surf(X,Y,Z,C); La palette de couleurs de la fen etre de visualisation est d enie par la variable colormap. Sa valeur par d efault est jet . Essayez : >> colormap(cool); La liste des palettes disponibles est fournie avec celle de toutes les fonctions ou variables de contr ole dun graphique 3D par la commande : >> more on, help graph3d, more off Examinons a ` pr esent le trac e dune surface donn ee par son e quation cart esienne z = f (x, y ). En g en eral, on dispose dune famille de valeurs de x et dune famille de valeur de y stock ees dans 2 vecteurs, respectivement x et y. On va devoir construire deux matrices X et Y telles que les colonnes de X et les lignes de Y soient constantes : ces matrices seront utilisees pour le calcul des valeurs de f . On peut utiliser la fonction meshgrid . Ainsi, pour repr esenter la surface d equation z = exp(x2 y 2 ) , 2 < x, y < 2, on pourra proc eder comme suit : >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X .* exp(-X.2 -Y.2); >> surf(Z); Si on ne souhaite que le treillis, on remplace la fonction surf par mesh. Si lon souhaite des isolignes, on utilise la fonction contour3 ; par exemple : >> v = linspace(0,max(max(Z)),20); contour3(Z,v);

22

` MATLAB CHAPITRE 1. INITIATION A

1.6.4 La notion dobjets graphiques (*)


Diff erents objets et leur identication Lorsque que lon trace une gure, par exemple la courbe repr esentant la fonction y = sin x sur lintervalle [3.5, 3.5], on utilise une fonction graphique de M ATLAB. On peut le faire simplement de la fac on suivante : >> x = linspace(-3.5,3.5) ; >> y = sin(x); >> plot(x,y); Les commandes pr ec edentes auront cr ee la gure 1.3
1

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

1 4

F IG . 1.3 Une gure obtenue par la commande de base plot. La fonction plot que lon a utilis e a g en er e un assez grand nombre de donn ees. Ces donn ees sont les caract eristiques de notre gure. Le syst` eme de repr esentation graphique de M ATLAB est un syst` eme orient e objet, et les donn ees qui caract erisent une gure sont relatives aux diff erents objets qui la constituent. Certaines de ces donn ees peuvent e tre pr ecis ees lors de lappel de la fonction : on peut choisir le type de trac e, sa couleur ... Dautres pourraient l etre en utilisant des fonctions qui le permettent : legend, xlabel... Si lon avait voulu modier la position la taille de la fen etre graphique, il aurait cependant fallu utiliser la fonction figure avant la fonction plot et xer les valeurs de la propri et e Position.

1.6. GRAPHIQUES

23

Pour g erer une fen etre graphique, il convient de pouvoir identier ces objets, avant de xer ou de modier leurs propri et es. Cette identication se fait par les handles, litt eralement les poign ees pour les attraper ! La premi` ere e tape consiste a ` r ecup erer ces handles. La fonction findobj le permet. Voici ce que peut fournir son appel : >> h = findobj h = 0 1.0000 151.0015 152.0022 Il ne sagit pas ensuite dutiliser les valeurs afch ees, mais de se rappeler que h est un vecteur de 4 composantes dont chacune est un handle. Quels sont les objets ainsi identi es ? >> get(h,type) ans = root figure axes line La premi` ere composante dont la valeur est 0 est la racine, cest-` a-dire l ecran. La seconde est le fen etre. Son handle est e galement d esign e par la fonction gcf (get current gure). Cette structure est arborescente : a ` partir de la racine, on peut trouver une ou plusieurs fen etres ; dans chaque fen etre, un ou plusieurs syst` emes daxes, et dans chacun dentre eux, un ou plusieurs courbes. Modier les propri etes Chaque type dobjet g` ere certaines propri et es. On va commencer par modier la taille de la fen etre. Pour cela, il faut modier la propri et e Position. Pour voir comment elle est d enie, nous r ecup erons sa valeur. >> get(h(2),Position) ans = 181 457 560 420 Vous naurez pas les m emes valeurs. Ces valeurs repr esentent respectivement la distance la fen etre au bord gauche de l ecran, sa distance au bord inf erieur de l ecran, sa largeur et sa hauteur. Elles sont donn ees en Pixels. Pour modier la taille de cette fen etre, il faut conna tre la taille de l ecran. Cest une propri et e de la racine :

24 >> get(h(1),ScreenSize) ans = 1 1 1280

` MATLAB CHAPITRE 1. INITIATION A

1024

On peut pr ef erer travailler en coordonn ees relatives avant de xer cette taille : >> set(h(2),Units,normalized,Position,[0.1 0.3 0.6 0.4]) Pour conna tre lensemble des propri et es relatives a ` lobjet figure, il suft de taper get(h(2)). Pour obtenir la liste de ces propri et es avec les valeurs autoris ees, lorsquelles sont pr ed enies, on tape set(h(2)). Lobjet h(3) est de type axes. On peut lister le champ de ses propri et es avec leur valeur actuelle : >> get(h(3)) Nous allons supprimer lencadrement, modier les limites de laxe des y , xer les positions et valeurs des ticks de laxe des x : >>set(h(3),Box,off) >>set(h(3),Ylim,[-1.1 1.1]) >>set(h(3),Ytick,[]) >>set(h(3),Xtick,[-pi -pi/2 0 pi/2 pi]) >>set(h(3),XtickLabel,-pi|-pi/2|0|pi/2|pi)
A On remarquera que les symboles L TEX ne sont pas pris en compte pour e tiqueter les ticks. Une propri et e du nom de Title gure dans la liste des propri et es de lobjet axes et sa valeur est un nombre r eel. Il sagit l` a encore dun handle, car le titre est lui m eme un objet graphique.

>>htit = get(h(3),Title) >>set(htit) >>set(htit,string,Fonction sinus,FontSize,12) >>set(htit,Color,[1 0 0]) La couleur obtenue est le rouge. La d enition des couleurs peut se faire par un tableau de 3 valeurs comprises entre 0 et 1 qui donnent respectivement les poids relatifs du rouge, du vert et du bleu. (syst` eme rgb). Le blanc est [1 1 1] et le noir [0 0 0]. On peut aussi modier certaines propri et es de lobjet de type line On en obtient la liste par get(h(4)). Pour conna tre les possibilit es offertes au niveau des types de trac e, >>set(h(4),Linestyle) >>set(h(4),Marker)

1.7. M-FICHIERS
Fonction sinus

25

pi

pi/2

pi/2

pi

F IG . 1.4 Figure modi ee gr ace a ` la manipulation des hanlde. On peut alors proposer >>set(h(4),Linestyle,none,Marker,+) >>set(h(4),Markersize,4) >>set(h(4),Ydata,cos(x)) La gure apr` es modication ressemblera, sauf pour les couleurs, a ` la gure 1.4. Il faudrait quand m eme modier son titre ...

1.7 M-chiers
1.7.1 Scripts et fonctions
Bien que lon puisse faire beaucoup de choses en travaillant directement dans la fen etre de commandes de M ATLAB, nous avons d eja constat e que quil e tait souvent plus pratique dutiliser des M-chiers. Ils permettent - de corriger plus facilement ses erreurs, - de garder un travail en cours pour le reprendre plus tard, - dex ecuter plusiers fois un programme en modiant certains param` etres, - d echanger son travail avec des camarades. Jusqua pr esent, ces chiers e taient des chiers dinstructions, ou chiers scripts. Un chier script est un chier contenant une suite dinstructions M ATLAB directement e x ecutables. Ces instructions sont e x ecut ees en utilisant les variables de lespace de travail, ou en cr eant des variables dans cet espace. M ATLAB utilise e galement des M-chiers. En fait, un grand nombres des fonctions que nous avons rencontr ees sont e crites dans des M-chiers. Il sagit de chiers fonction. Vous pouvez e galement cr eer vos propres fonctions. Un chier fonction a sa premi` ere ligne dinstruction e x ecutable qui commence par le mot clef function. Il peut recevoir des variables en entr ee, mais utilise ces variables

26

` MATLAB CHAPITRE 1. INITIATION A

en dehors de lespace de travail. Aucune des variables cr ee es ou modi ees lors de son e x ecution nest visible depuis lespace de travail a ` moins quelle ne soit une variable en sortie de la fonction ! Nous allons illustrer la diff erence entre ces deux types de chiers sur un exemple. Si le fonction f est sufsament r eguli` ere, la formule de Taylor permet dobtenir une valeur approch ee de sa d eriv ee en un point x, pour un pas h, suivant h f (x + h) f (x) = f (x) + f (x) + O(h2 ) h 2 f (x). (1.4)

% % % %

Fichier ScriptDn1 pour calculer function Res = Fonc1Dn1(h); la derivee numerique de sinus % Derivee numerique de sinus au point 1 pour le pas % au point 1 en fonction du h = 0.01. % pas h. x = 1; Dn = (sin(x+h) -sin(x))./h; Res = Dn;

x = 1; h = 0.01; Dn = (sin(x+h) -sin(x))./h;

TAB . 1.3 Fichier script et chier fonction. Le tableau 1.3 montre le contenu du chier script ScriptDn1.m et du chier fonction FoncDn1.m Une fois ces deux chiers sauvegard es dans votre espace de travail, vous pourrez tapez les commandes quivantes : >> >> >> >> >> >> clear all ScriptDn1 who Err = abs(Dn-cos(1)) clear all FoncDn1

M ATLAB nest pas content et il vous le dit : ??? Input argument "h" is undefined. Error in ==> FoncDn1 at 6 Dn = (sin(x+h) -sin(x))./h; Lerreur est comment ee ; M ATLAB vous indique le num ero de la ligne o` u elle sest produite. A pr esent, nous fournissons le pas en appel de la fonction

1.7. M-FICHIERS
>> pas = 0.01 ; FoncDn1(pas) ans = 0.5361 >> Err = abs(Dn-cos(1)) ??? Undefined function or variable Dn. >> who Your variables are: ans pas

27

>> Der = FoncDn1(pas); >> Der-ans On peut faire quelques remarques : - Le chier script s ex ecute sans quon lui fournisse darguments. Le chier fonction a besoin quon lui fournisse les arguments quil ne cr ee pas, ici le pas. - Le nom de la variable affect ee de la valeur de ce pas dans lespace de travail na pas dimportance ; cest sa valeur qui est pass ee. - Les variables cr ee es par l ex ecution du script sont vues dans lespace de travail. Celles qui sont cr ee es lors de l ex ecution de la fonction ne le sont pas. Ce sont des variables locales. Largument en sortie prend le nom quon lui donne dans la session M ATLAB.

1.7.2 Fonctions
Fonctions simples Nous avons d ej` a rencontr e la fonction F (x) = 0.01 ex + 10 cos x 3 x. Dans ce cas, on dispose de deux fac ons pour cr eer une fonction M ATLAB qui calcule les valeurs de F : - comme la fonction F peut se d enir en une seule ligne, on peut le faire avec la fonction inline >> F1 = inline(0.01*exp(x)+10*cos(x)-3*x) - de fac on plus g en erale, on peut e diter un chier que lon va appeler F2.m qui devra commencer par le mot-clef function : vous pouvez le d enir de la fac on suivante function y = F2(x) ; y = 0.01*exp(x)+10*cos(x)-3*x; La premi` ere d enition est a ` utiliser lorsque lon nenvisage pas dutilisation ult erieure de cette fonction. La d enition au moyen dun chier permet de la conserver. Cependant, ainsi quelle est r edig ee, cette fonction a encore le d efaut que son objet nest pas imm ediatement lisible ; on risque de lavoir oubli e quand on aura besoin de la r eutiliser. Il faut donc la commenter. Cela se fait sur des lignes qui commencent par le symbole % . Ce symbole transforme en commentaires tous les caract` eres qui le suivent dans la ligne courante. Entre autres

28

` MATLAB CHAPITRE 1. INITIATION A

commentaires, vous devrez toujours indiquer le format dappel de la fonction. Voici comment je vous sugg` ere d ecrire ce chier : function y = F2(x) ; % fichier fonction definissant la fonction F2(x) qui sert dexemple % au polycopie dinitiation a Matlab. % Lappel se fait selon : % >> y = F2(x); y = 0.01*exp(x)+10*cos(x)-3*x; Ces commentaires sont plac es imm ediatement apr` es la premi` ere ligne (de d eclaration). De cette fac on, ils constitueront la r eponse fournie par M ATLAB a ` la commande : >> help F2 Les variables internes dun chier fonction sont locales ; elles ne sont pas vues depuis lespace de travail. Corollairement, les variables de lespace de travail que vous souhaitez utiliser dans une fonction doivent e tre pass ees en argument. La commande global permet de d enir des variables globales. Elles doivent e tre d eclar ees globales au d ebut de la fonction et dans lespace de travail. Exercice eriv ee est de la La formule (1.4) est dite dordre 1 car lerreur dapproximation de la d forme O(h). On peut obtenir une formule dordre 2, cest-` a-dire avec une erreur en O(h2 ) en utlisant la formule f (x + h) f (x h) h2 = f (x) + f (x) + O(h3 ) 2h 6 f (x). (1.5)

On vous demande d ecrire une fonction Fonc2Dn1.m qui calcule la d eriv ee approch ee de la fonction sinus au point x = 1 pour le pas h en utilisant la formule (1.5) Vous e crirez e galement un script TestDn.m dans lequel : - vous d enirez le vecteur des pas, pas = 10.(-[1 : 16]); - vous calculerez les d eriv ees approch ees pour ces pas en utilisant les deux fonctions ; - vous calculerez les erreurs Err1 et Err2 commises dans chaque cas ; - vous repr esenterez ces erreurs en fonction du pas avec des coordonn ees logarithmiques : loglog(pas, Err1, b-+, pas, Err2, r-*) ; - vous pourrez r e echir et commenter cette gure ! Fonctions de plusieurs variables On peut passer plusieurs arguments a ` une fonction. Supposons que lon souhaite cr eer une fonction M ATLAB qui calcule la fonction F(a, b) pr esentant un pic peu marqu e au

1.7. M-FICHIERS
point a et un pic plus marqu e au point b : F(a, b) (x) = 1 2 + . (x a)2 + 0.01 (x b)2 + 0.002

29

Les param` etres a et b seront des variables de la fonction que lappellera par exemple Foncapics. On peut encore proc eder de deux fac ons. - la premi` ere utilise la fonction inline : Essayez. la seconde consiste a ` cr eer le chier Foncapics.m, par exemple : function y = Foncapics(x,a,b); % Cette fonction pr esente un pic peu marqu e pour % x=a et un pic plus marqu e pour x= b. % Lappel se fait selon % >> y = Foncapics(x,a,b); % x est une matrice ; a et b sont des scalaires. y = 2./((x-a).2+0.01) + 1./((x-b).2+0.002); Exercice Cr ee z les fonctions Fonc1Dn2.m et Fonc2Dn2.m qui calcule la d eriv e de la fonction sinus en un point x et pour un pas h a ` xer par lutilisateur. Exercice (*) Modiez les fonctions pr ec edentes de fac on que lon puisse passer un vecteur x et un vecteur h en arguments. Le format dappel devra pr eciser : % Pour un vecteur x de longueur nx et un vecteur h % de longueur nh les d eriv ees seront calcul ees dans % une matrice Dn telle que size(Dn) = [nx, nh]. Vous pouvez utiliser la fonction repmat. Passage dune fonction en argument On veut maintenant calculer lapproximation de la d eriv ee dune fonction a ` choisir par lutilisateur. La fonction Fonc1Dn3.m r ealise cet objectif. Les restrictions dutilisation sont donn ees dans le commentaire. function Dn = Fonc1Dn3(fonc,x,h); % Approximation ` a lordre 1 de la d eriv ee de la

30

` MATLAB CHAPITRE 1. INITIATION A

% fonction fonc au(x) point(s) x pour le pas h. % Appel se fait selon : % >> Dn = Fonc1Dn3(fonc, x, h) % Variables en entree : % - fonc est le nom de la fonction, % - x est scalaire ou vecteur, % - h, scalaire, est le pas du calcul. xp = x + h; y = feval(fonc,x); yp = feval(fonc,xp); Dn = (yp - y)/h; Le passage dune fonction en argument m erite quelques commentaires : - si fonc.m est une fonction pr ed enie de M ATLAB (par exemple sin) ou le nom dun chier de fonction (par exemple F2), on pourra e crire lun ou lautre des deux appels ci-dessous : >> Dn = Fonc1Dn3(F2, x, pas); >> Dn = Fonc1Dn3(@F2, x, pas); - si fonc est le nom dune fonction d enie par inline, (par exemple F1), on devra formuler lappel selon : >> Dn = Fonc1Dn3(F1, x, pas); A vous de cr eer la fonction Fonc2Dn3.m pour une approximation a ` lordre 2. Arguments optionnels en entr ee (*) Le nombre de variables en entr ee nest pas n ecessairement x e. La fonction FoncDn4 propose de choisir lordre de la formule dapproximation de la d eriv ee que lon va utiliser. On xe par d efaut cet ordre a ` 1. On utilise les fonctions pr ec edentes pour calculer les approximations de la d eriv ee. function Dn = FoncDn4(fonc, x, h, ordre); % % % % % % % % % % Approximation ` a lordre 1 ou 2 de la d eriv ee de la fonction fonc au(x) point(s) x pour le pas h. Appel : >> Dn = FoncDn4(fonc, x, h); ou >> Dn = FoncDn4(fonc, x, h, ordre); Variables en entree : - fonc est le nom de la fonction, - x est scalaire ou vecteur, - h, scalaire, est le pas du calcul. - ordre est optionnel ; par defaut, ordre = 1.

if nargin ==3

1.7. M-FICHIERS
ordre = 1; end switch ordre case 1 Dn = Fonc1Dn3(fonc, x, h); case 2 Dn = Fonc2Dn3(fonc, x, h); otherwise Dn = []; disp(Ordre non valable); return end

31

Cette fonction appelle quelques commentaires : - nargin renvoie le nombre de variables utilis ees dans lappel a ` la fonction. - le branchement d enit par switch, case, end na pas e t e pr esent e pr ec edemment. Il permet de choisir parmi plusieurs instructions suivant la valeur dune variable, ici ordre. Essayez de le remplacer par un test multiple utilisant if, elseif ... - les fonctions appel ees, ici Fonc1Dn3.m et Fonc2Dn3.m doivent e tre d enies dans le m eme r epertoire que la fonction qui les appelle. Nombre variable darguments (*) La fonction dont on veut calculer la d eriv ee peut d ependre de param` etres, comme la fonction F(a, b) ci-dessus. On utilisera dans ce cas la fonction varargin, comme le montre lexemple ci-dessous : function Dn = Fonc1Dn5(fonc,x,h,varargin); % % % % % % % % % Approximation ` a lordre 1 de la d eriv ee de la fonction fonc au(x) point(s) x pour le pas h. Appel : >> Dn = Fonc1Dn5(fonc, x, h, p1, p2,...) ; Variables en entree : - fonc est le nom de la fonction, - x est scalaire ou vecteur, - h, scalaire, est le pas du calcul. - p1, p2, eventuels parametres de fonc

xp = x + h; y = feval(fonc,x,varargin{:}); yp = feval(fonc,xp,varargin{:}); Dn = (yp - y)/h;

32

` MATLAB CHAPITRE 1. INITIATION A

varargin d esigne une liste de longueur quelconque de variables qui peuvent e tre de tout format ; elle est g er ee comme une cellule de tableaux. Les cellules de tableaux sont un des moyens propos es par M ATLAB pour g erer une collection de variables de types et formats diff erents. Les lignes suivantes d enissent une cellule de tableaux et font safcher quelques-uns de ses e l ements : >> C ={1:3, rand(2),coucou}; >> C{1} ans = 1 2 3 >> c = C{3} c = coucou Les e l ements dune cellule sont ordonn es comme ceux dune matrice, par ligne et par colonne ; on y fait r ef erence par lutilisation daccolades au lieu de parenth` eses. Exercice Ecrivez une fonction Fonc2Dn5.m qui fournisse une approximation a ` lordre 2 de la d eriv ee de la fonction argument en autorisant cette fonction a ` d ependre de param` etres. Ecrivez ensuite une fonction FoncDn6.m qui permette de choisir lordre, mais ne limpose pas. Son appel se fera selon >> Dn = FoncDn6( fonc, x, h, ordre, p1, p2, ...) Lorsque lon ne veut pas xer lordre et que la fonction fonc d epend de param` etres, on passera la matrice vide [] pour la variable ordre. Plusieurs arguments en sortie On peut red enir la fonction F2 de fac on quelle fournisse aussi la d eriv ee F de la fonction F : F (x) = 0.01 ex 10 sin x 3. Cela peut se faire de la fac on suivante : function [y, yprime] = F2bis(x); % fichier fonction d efinissant la fonction % F(x) = 0.01*exp(x)+10*cos(x)-3*x; % ainsi que sa derivee. % Lappel se fait selon : % y = F2bis(x); % et renvoie alors seulement les valeurs de F, ou selon % [y, yprime] = F2bis(x); y = 0.01*exp(x)+10*cos(x)-3*x; yprime = 0.01*exp(x) -10*sin(x) -3;

1.7. M-FICHIERS

33

Les deux arguments en sortie sont plac es entre crochets. Dans les deux formats dappel, on calcule F (x) et F (x). On peut ne faire calculer que F (x) si lon ne veut pas les valeurs de la d eriv ee : function [y, yprime] = F2ter(x); % fichier fonction d efinissant la fonction % F(x) = 0.01*exp(x)+10*cos(x)-3*x; % ainsi que sa derivee. % Lappel se fait selon : % y = F2ter(x); % et renvoie alors seulement les valeurs de F, ou selon % [y, yprime] = F2ter(x); y = 0.01*exp(x)+10*cos(x)-3*x; if nargout==2 yprime = 0.01*exp(x) -10*sin(x)-3; end

1.7.3 Fichiers de sauvegarde


Il est possible de sauvegarder des variables de lespace de travail en vue dune utilisation ult erieure. Cela se fait a ` laide de linstruction save. Le format le plus simple est le suivant : save nomfichier X Y Z Les variables X, Y et Z seront sauvegard ees dans un chier nomfichier.mat. On peut les retrouver par lappel : load nomfichier Les chiers que vous avez ainsi sauvegard es apparaissent dans le r epertoire courant sous le nom nomfichier.mat. Ces chiers ne sont lisibles que par M ATLAB. Vous pouvez souhaiter exporter vos donn ees pour les utiliser dans une autre circonstance. Il faut alors cr eer un chier ASCII. On peut le faire en simple (par d efaut) ou double pr ecision. Essayez : >> >> >> >> >> >> >> >> >> >> >> A = rand(1,3); save data1 A save data2.txt A -ascii save data3.txt A -ascii -double clear all load data1 load data2.txt whos data2 - A load data3.txt data3 - A

34 Exercice

` MATLAB CHAPITRE 1. INITIATION A

Nous aurons besoin, pour un prochain TD, de disposer dun certain nombre de racines de l equation J0 (x) = 0. Nous allons cr eer un chier contenant les valeurs approch ees des 200 plus petites racines de cette e quation. Pour ce faire, vous modierez le chier VisuracBess.

1.7.4 Lecture de donn ees ext erieures


M ATLAB peut lire des chiers cr ee s par dautres logiciels. Nous allons prendre lexemple de chiers cr ee s par E XCELL. Ces chiers peuvent vous e tre fournis sous plusieurs formats : pour les chiers .xls, vous pourrez utiliser les fonctions xlsread ou importdata ; pour les chiers .txt, vous pourrez utiliser les fonctions textread ou importdata. Exercice Vous pouvez recopier a ` ladresse indiqu ee en introduction les chiers Traction.xls et Bruits.txt. Vous allez lire ces chiers depuis M ATLAB. Pour chacun deux, vous allez r ecup erer une matrice de deux colonnes. La premi` ere colonne est constitu ees dabsisses, et la seconde dordonn ees. Vous repr esenterez les courbes repr esentant chacun de ces e chantillons.

35

36

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Chapitre 2 Annexe : lexique non exhaustif

Caract` eres sp eciaux et op erateurs logiques Symbole = () [] . .. ... ; , % : Usage instruction daffectation utilis ees pour marquer la priorit e dune expression arithm etique ; contiennent les variables en entr ee des fonctions utilis e pour former matrices et vecteurs ; contient les variables en sortie des fonctions point d ecimal r epertoire au-dessus du r epertoire courant continue une suite dinstructions a ` la ligne suivante termine une ligne ; evite lafchage s epare les e l ements ou instructions dune ligne et les variables dune fonction commentaires utilis es pour la g en eration de vecteurs lignes d el ements r eguli` erement espac es, par d efaut avec un incr ement entier, sinon avec un incr ement a ` pr eciser ; d esigne lensemble des indices dun tableau selon une de ses dimensions force le format vecteur colonne se place avant et apr` es une chaine de caract` eres permet de d enir a ` lint erieur dune chaine de caract` eres identicateur de fonction depuis la version 6 permet lexecution dune commande du syst` eme dexploitation ET logique ; op` ere e l ement par e l ement pour les tableaux avec faux valant 0 et toute valeur non nulle valant vrai OU logique NON logique OU exclusif, semploie sous la forme xor(A, B) fonction vectorielle logique qui vaut 1 si un e l ement du vecteur est non nul et 0 sinon ; elle op` ere sur chaque colonne pour une matrice et semploie sous la forme any(A) fonction vectorielle logique qui vaut 1 si chaque e l ement du vecteur est non nul ; semploie et op` ere comme la pr ec edente pour les tableaux

( :) @ ! & | xor any

all

37

Op erateurs arithm etiques Symbole + * .* \ .\ / ./ ^ .^ . Usage addition soustraction produit matriciel ; les dimensions doivent e tre compatibles (sauf le cas dun scalaire) produit e l ement par e l ement ; les deux variables doivent avoir les m emes dimensions division a ` gauche, ou solution de syst` eme(s) lin eaire(s) : C = A \ B si A*C=B division a ` gauche, e l ement par e l ement division a ` droite, ou solution de syst` eme(s) lin eaire(s) : C = B/A si C*A=B division a ` droite, e l ement par e l ement puissance de scalaire ou de matrice puissance de chaque e l ement dun tableau conjugu ee transpos ee transpos ee Op erateurs relationnels Symbole < <= > >= == = Usage inf erieur, compare e l ement par e l ement des tableaux de m eme taille et prend pour valeur un tableau de cette taille , de coefcients 1 (vrai) ou 0 (faux) inf erieur ou e gal, op ere comme le pr ec edent sup erieur sup erieur ou e gal e gal diff erent Variables et fonctions dint er et g en eral Symbole help helpdesk what type lookfor ans whos save load clear Usage aide en ligne acc` es a ` une documentation hypertexte de Matlab, g er ee par Netscape sous Unix fournit la liste des M-chiers du repertoire courant afche le contenu dun M-chier indique les occurences dune chaine de caract` eres dans laide en ligne r esultat de la derni` ere instruction lorsquil nest pas affect e afche la liste des variables courantes, et leur format sauvegarde une ou plusieurs variables de la session dans un chier retrouve les variables sauvegard ees pr ec edemment supprime une ou plusieurs variables de la session

38

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Variables et fonctions dint er et g en eral Usage d enit une fonction ; en pratique, on enregistre les instructions qui la d enissent dans un M-chier de m eme nom que la fonction (muni du sufxe .m) feval e value une fonction dont le nom est donn e en argument nargin nombre de variables en entr ee dune fonction nargout nombre darguments en sortie dune fonction varargin liste darguments variable en entr ee varargout liste darguments variable en sortie ; d enit une cellule de tableaux global d enit des variables globales pause arr` ete la session en attente dune r eponse de lutilisateur disp afche une variable sans donner son nom, ou un texte find fournit les indices des e l ements non nuls dun tableau for initialise une boucle de r ep etition dune suite dinstructions pour des valeurs dune variable (compteur) sp eci ees par un vecteur while boucle de r ep etition dune suite dinstructions tant quune condition reste vraie if instructions e x ecut ees sous condition else sutilise avec if elseif sutilise avec if end cl ot le corps dinstructions de for, while et if break arr` ete l ex ecution des boucles for ou while size dimensions dun tableau length longueur dun vecteur linspace cr ee un vecteur de composantes uniform ement r eparties entre deux valeurs logspace cr ee un vecteur de composantes r eparties logarithmiquement entre deux valeurs fliplr inverse lordre des colonnes dun tableau flipud inverse lordre des lignes dun tableau reshape change les dimensions dun tableau ( avec les m emes e l ements) repmat cr ee un tableau en reproduisant une matrice selon les dimensions sp eci ees cat cr ee une matrice par concatenation cell cr ee une cellule de tableaux struct cr ee une structure de matrices format pr ecise le format dafchage echo controle lafchage des commandes e x ecut ees more controle le nombre de lignes de chaque page afch ee tic ouvre le compteur de dur ee dexecution dune suite de commandes toc ferme le compteur ouvert par tic cputime compteur de temps CPU cd change le repertoire de travail quit termine une session Matlab Nom function

39

Arithm etique, polyn omes et manipulation de donn ees Usage pr ecision relative de larithm etique virgule-ottante utilis ee unit e imaginaire des nombres complexes valeur absolue ou module dun nombre complexe argument dun nombre complexe racine carr ee partie r eelle partie imaginaire conjugu e complexe plus grand diviseur commun plus petit multiple commun arrondi a ` lentier le plus proche arrondi vers 0 arrondi vers arrondi vers reste apr` es division enti` ere : rem(x,y)= x-fix(x./y).*y reste sign e : mod(x,y)=x-floor(x./y).*y plus grande composante dun vecteur ; pour une matrice, la fonction renvoie un vecteur ligne form e des maxima de chaque colonne min plus petite composante dun vecteur sort trie les composantes dun vecteur selon lordre croissant mean moyenne des composantes dun vecteur sum somme des composantes dun vecteur std e cart-type des composantes dun vecteur cov matrice de covariance prod produit des composantes dun vecteur cumsum sommes cumul ees des e l ements dune matrice selon une dimension a ` pr eciser poly construit un polyn ome de racines donn ees roots racines dun polyn omes polyval evalue un polyn ome donn e par ses coefcients conv produit de polyn omes, ou convolution de vecteurs deconv division polyn omiale ou d econvolution de vecteurs polyder fournit le polyn ome d eriv e fzero r esoud une e quation non lin eaire fsolve r esoud un syst` eme d equations non lin eaires fmin recherche le minimum dune fonction dune variable fmins recherche le minimum dune fonction de plusieurs variables diff op erateur aux diff erences ; permet de construire les diff er ences nies ou divis ees Nom eps pi i,j abs angle sqrt real imag conj gcp lcm round fix ceil floor rem mod max

40

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Alg` ebre lin eaire Nom zeros ones eye rand randn diag tril triu inv lu chol qr null orth rank eig svd pinv det cond condest norm trace expm sqrtm Usage matrice de 0 matrice de 1 matrice identit e matrice al eatoire, de coefcients uniform ement distribu es sur [0, 1] matrice al eatoire, de coefcients normalement distribu es extrait la diagonale dune matrice, ou cr ee une matrice diagonale ou bande extrait la partie triangulaire inf erieure dune matrice extrait la partie triangulaire sup erieure dune matrice inverse dune matrice (par r esolution de syst` emes lin eaires) factorisation lu dune matrice, avec strat egie de pivot partiel factorisation de Choleski dune matrice sym etrique d enie positive factorisation orthogonale-triangulaire dune matrice fournit une base orthonorm ee du noyau fournit une base orthonorm ee de limage rang dune matrice tous les e l ements propres dune matrice carr ee valeurs et vecteurs singuliers dune matrice pseudo-inverse dune matrice d eterminant nombre de conditionnement pour la r esolution des syst` emes lin eaires, en norme 2 estimation du conditionnement dune matrice carr ee, en norme 1 norme dune matrice (plusieurs normes sont propos ees) trace dune matrice exponentielle de matrice racine carr ee matricielle dune matrice carr ee

Analyse Nom exp, log, log10 sin, asin, sinh, asinh cos, acos, cosh, acosh tan, atan, tanh, atanh cot, acot, coth, acoth sec, asec, sech, asech csc, acsc, csch, acsch besselj, bessely, besselh besseli, besselk gamma, gammainc beta, betainc erf, erfinv Usage exponentielle de base e, logarithme n eperien et de base 10 sinus, arcsinus, sinus hyperbolique et argsh cosinus,... tangente,... cotangente,... secante,... cosecante,... fonctions de Bessel fonctions de Bessel modi ees fonctions gamma fonctions beta fonction derreur (ou fonction de Gauss) et sa r eciproque

41

Graphiques et visualisations Nom figure plot fplot bar hist pie polar subplot hold axis title legend text xlabel semylogy plot3 bar3 meshgrid mesh hidden surf surfnorm contour meshc clabel quiver contour3 view colormap colorbar getframe movie image print Usage cr ee une nouvelle fen etre de visualisation graphe lin eaire en dimension 2 graphe dune fonction entre deux valeurs graphe en rectangles verticaux histograme graphe en camembert graphe en coordonn ees polaires permet de partitionner une fen etre de visualisation conserve le graphique courant d enit les bornes des axes afche un titre (chaine de caract` eres a ` fournir) afche une l egende sur la gure afche un commentaire (chaine de caract` eres a ` fournir) en un point donn e par ses coordonn ees pr ecise le nom de la variable en absisse graphique avec une echelle logarithmique en ordonn ee graphe lin eaire en dimension 3 graphe en parall` elogrames verticaux construit un jeu de coordonn ees pour la visualisation tridimensionnelle dune fonction de 2 variables visualise une surface maill ee en dimension 3 fait apparaitre (off) ou disparaitre (on) les parties cach ees dune surface maill ee visualise une surface ombr ee (en couleurs) en dimension 3 repr esente les normales aux surfaces en dimension 3 repr esente les isolignes dune surface en dimension 2 combine mesh et contour fait apparaitre les valeurs des isolignes repr esente des gradients par des ` eches repr esente les isolignes dune surface en dimension 3 sp ecie le point de vue dun graphe en dimension 3 d enit le jeu de couleurs afche une e chelle des couleurs forme un vecteur colonne a ` partir dun graphique en vue dune animation execute lanimation visuelle avec la matrice pr ec edente cr ee une image en interpretant les valeurs des coefcients dune matrice imprime un graphique, ou le sauvegarde en format post-script

42

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Analyse num erique Nom spline interp1 interpn quad quadl ode45 ode113 ode23s ode15s fft ifft fft2 Usage spline cubique dinterpolation interpolation de donn ees en dimension 1 interpolation de donn ees en dimension n int egration num erique par la m ethode de Simpson int egration num erique par une methode adaptative de Lobatto r esolution approch ee d equations ou de syst` emes diff erentiels non raides par m ethodes de Runge-Kutta emboit ees dordre 4-5 r esolution approch ee d equations ou de syst` emes diff erentiels non raides par des m ethodes dAdams-Bashforth-Moulton de type PECE dordre variable r esolution approch ee d equations ou de syst` emes diff erentiels raides par la m ethode de Rosenbrock dordre 2 r esolution approch ee d equations ou de syst` emes diff erentiels raides par une m ethode de diff erentiation r etrograde dordre variable transform ee de Fourier rapide en dimension 1 transform ee de Fourier rapide inverse en dimension 1 transform ee de Fourier rapide en dimension 2

Matrices creuses Nom sparfun sparse full speye spdiags nnz issparse spy symmmd symrcm pcg gmres luinc cholinc eigs Usage fournit une liste de fonctions qui sappliquent aux matrices creuses convertit au format creux une matrice pleine, ou cr ee une matrice creuse convertit au format plein une matrice creuse matrice identit e en format creux cr ee une matrice diagonale ou une matrice bande en format creux nombre d el ements non nuls vrai si la matrice est sous format creux visualise la r epartition des coefcients non nuls dune matrice renum erotation par lalgorithme du degr e minimum renum erotation par lalgorithme Cuthill et Mac-Kee inverse r esolution dun syst` eme lin eaire de matrice sym etrique d enie positive par la m ethode du gradient conjugu e pr econditionn e r esolution dun syst` eme lin eaire par la m ethode GMRES factorisation LU incompl` ete dune M-matrice creuse factorisation de Choleski incompl` ete dune H-matrice creuse quelques e l ements propres dune matrice carr ee

Chapitre 3 Bibliographie
Matlab Guide, D. J. Higham, N. J. Higham, SIAM, 2000. Introduction to Scientic Computing, A Matrix-Vector Approach Using MATLAB, C.F. Van Loan, MATLAB curriculum Series, 1997. Apprendre et Ma triser Matlab, versions 4 et 5 et SIMULINKr , M. Mokhtari, A. Mesbah, Springer, 1997.

43

Vous aimerez peut-être aussi