` TP1 : INTRODUCTION A MATLAB
Rsum. Matlab est un logiciel de calcul numrique, utilis dans de nombreux domaines e e e e dapplication. Il est bas sur le calcul matriciel. Matlab est dailleurs un raccourci pour Mae trix Laboratory. Le but de ce document est daider les dbutants en Matlab, en introduisant e les commandes les plus courantes.
1. Lacc`s e Pour lancer lexcution de Matlab, tapez dans une fentre xterm : matlab6.5. Lintere e face graphique de Matlab appara alors. A droite, la partie o` lon entre les commandes. t u Le caract`re )) signie que Matlab attend une instruction. A gauche, en haut, les variables e denvironnement, en bas, les derni`res commandes tapes. Regardez le contenu des menus e e droulants. e Exercice 1. Excutez lintroduction de Matlab, chargez laide. Bref, faites un petit tour du e propritaire selon le tableau ci-dessous... e intro help demo info lance une introduction a Matlab ` produit une liste de toutes les commandes par th`mes e dmonstration donnant une reprsentation des fonctionnalits de bases de Matlab e e e information sur la boite a outils disponibles `
2. Laide dans Matlab Mieux vaut apprendre a se reprer tout seul que de demander en permanence a son voisin ` e ` comment faire. Ne serait-ce quau cas o` il faudrait utiliser dans lexamen une fonction dont u on ne se souvient que vaguement quelle est sa syntaxe... ouvre une fentre contenant la liste des commandes e Matlab ainsi que leurs documentations help donne la liste de toutes les commandes par th`mes e help nom dcrit la fonction nom.m e lookfor nom recherche une instruction a partir du mot cl nom ` e helpwin
Exercice 2. Trouvez la fonction qui donne les valeurs propres dune matrice. Tapez help de cette fonction.
` TP1 : INTRODUCTION A MATLAB
3. Commandes gnrales e e 3.1. Gestion des chiers. Vous pouvez utiliser la petite fentre en haut a droite, ou a e ` ` dfaut : e pwd cd rep dir delete ache le nom du rpertoire courant pour Matlab e change le rpertoire courant pour Matlab qui devient rep e fournit le catalogue dun rpertoire e eace des chiers ou des objects graphiques
3.2. Calculs lmentaires. Dans la partie commandes de linterface, ee )) 5+8 Rsultat : )) 13 e Pour conserver le rsultat, il faut lassigner dans un objet : e )) a=5+8 )) a Pour ne pas faire acher le rsultat, mettez ; a la n de la commande : e ` )) a=5+8; 3.3. Constantes prdnies. e e pi 3.1415... eps 2.2204e-016 Inf nombre inni NaN nest pas un nombre ; exprime parfois une indtermination e
3.4. Historique. Matlab conserve lhistorique des commandes. Il est donc possible de rcuprer e e des instructions dj` saisies (et ensuite de les modier dans le but de les rutiliser) : ea e , , , permet de se dplacer dans les lignes de commandes e tapes dans la fentre de commandes e e
3.5. Variables denvironnement. Matlab garde en mmoire les variables qui ont t cres. e e e ee On les voit en haut, a gauche, lorsque Matlab dispose dune interface graphique. Sinon, on ` peut les acher et les eacer par la ligne de commande : who whos donne la liste des variables prsentes dans lespace de e travail donne la liste des variables prsentes dans lespace de e travail ainsi que leurs proprits ee donne la liste des chiers .m et .mat prsents dans le e rpertoire courant e
what
clear var1 . . . varn eace les variables var1 , . . . varn de lespace de travail clear eace toutes les variables cres dans lespace de travail e
` TP1 : INTRODUCTION A MATLAB
Exercice 3. (1) Tapez la commande a=1:7;. Tapez les commandes a, who et whos. (2) Utilisez pour modier a : a=1:2;. (3) Tapez la commande b=a+2;. Rxcutez les commandes who et whos en utilisant . ee e Tapez clear et b. 4. Les types de donnes e Matlab traite un seul 1 type dobjet: les matrices ! Les scalaires sont des matrices 1 1, les vecteurs lignes des matrices 1 n, les vecteurs colonnes des matrices n 1. 4.1. Construction explicite. On peut former des vecteurs et des matrices en entrant leurs coecients. scalaires )) s=30 vecteurs numriques e )) x=[1;2;3] (les ; sparent les lments dun vecteur colonne) e ee )) x=[1,2,3] (les , ou les blancs sparent les lements dun vecteur ligne) e e )) x )) y = [x,x,x] )) z = [x x x] matrices )) M=[11 12 13 14;21 22 23 24; 31 32 33 34; 41 42 43 44] (o` les ; sparent les lignes dune matrice) u e Construction a partir de plusieurs vecteurs de mme longueur : ` e )) y=[11;22;33]; )) mat1=[x y] vecteurs de cha de caract`res ne e La cha de caract`res est un vecteur ligne. Pour le crer, on entre les caract`res en ne e e e commenant et en terminant par (quote). c )) ch=matlab les nombres complexes Dans Matlab, un nombre complexe est de la forme : z = a + ib. )) c=2+i les polynmes o Matlab reprsente un polynme sous forme dun vecteur ligne contenant les coee o cients classs dans lordre des puissances dcroissances. Par exemple le polynme P e e o dexpression P (x) = x2 6x + 9 est reprent par e
1. ou presque... Voir lappendice !
` TP1 : INTRODUCTION A MATLAB
)) P=[1 -6 9] Exercice 4. Entrez les dirents vecteurs et matrices et donnez la longueur et la taille de e chacun (Utilisez help pour trouver les fonctions qui donnent longueur et taille). 4.2. Cration rapide. Certaines commandes permettent de crer plus rapidement des vece e teurs prcis : e )) l1=1:10 (Un vecteur contenant les entiers de 1 a 10) ` )) l2=[Link] )) l3=10:-1:1 )) l4=1:0.3:pi )) l1(2)=l3(3) )) l4(3:5)=[1,2,3] )) l4(3:5)=[] )) l5=linspace(1,5,5) )) help linspace )) who )) whos )) clear l1 l2 l3 l5 )) who )) clc (eace le contenu de la fentre de commande) e )) clear NB : Une ligne de commande commenant par le caract`re % nest pas excute par Matlab. c e e e Cela permet dinsrer des lignes de commentaires. Et il faut commenter ses programmes, ... e surtout ceux de lexamen ! Exercice 5. Construire : (1) une suite partant de 8 et allant a 5 par pas de 0.25. ` (2) une suite dcroissante dentiers de 15 a 3. e ` (3) une suite de longueur 100 de a . ` 4.3. Oprations vectorielles. Les tableaux suivants rsument certaines commandes coue e ramment utilises. e Vecteurs n:m n:p:m linspace(n,m,p) lenght(x) x(i) x(i1:i2) x(i1:i2)=[] [x,y] x*y x*y nombres de n a m par pas de 1 ` nombres de n a m par pas de p ` p nombres de n a m ` longueur de x i-`me coordonne de x e e coordonnes i1 a i2 de x e ` supprimer les coordonnes i1 a i2 de x e ` concatner les vecteurs x et y e produit scalaire des vecteurs lignes x et y produit scalaire des vecteurs colonnes x et y
` TP1 : INTRODUCTION A MATLAB
Matrices size(A) A(i,j) A(i1:i2,:) A(i1:i2,:) =[] A(:,j1:j2) A(:,j1:j2)=[] A(:) diag(A) nombre de lignes et de colonnes de A coecient dordre i,j de A lignes i1 a i2 de A ` supprimer les lignes i1 a i2 de A ` colonnes j1 a j2 de A ` supprimer les colonnes j1 a j2 de A ` concatner les vecteurs colonnes de A e coecients diagonaux de A
Matrices particuli`res e zeros(m,n) ones(m,n) eye(n) diag(x) magic(n) rand(m,n) randn(m,n) matrice nulle de taille m,n matrice de taille m,n dont tous les coecients valent 1 matrice identit de taille n e matrice diagonale dont la diagonale est le vecteur x carr magique de taille n e matrice de taille m,n a coecients [Link] loi uniforme sur [0,1] ` matrice de taille m,n a coecients i.i.d. de loi normale N (0,1) `
Exercice 6. [Extraction de composantes.] Entrez la matrice )) A=[1 2 3 ; 2 3 1 ; 3 1 2 ] Quels sont les rsultats des commandes suivantes? e )) A([2 3],[1 3]) )) A([2 3],1:2) )) A([2 3],:) )) A([2 3],end) )) A(:) Exercice 7. Crez des matrices particuli`res. Exemple de cration dune matrice par blocs : e e e )) C=[A, zeros(3,2); zeros(2,3), eye(2)] Rpliquez le vecteur colonne [1; 3; 6] pour en faire une matrice 319, de deux mani`res : en e e utilisant ones et en eectuant une multiplication matricielle, puis en trouvant la commande ad hoc de rplication. e Exercice 8. Ecrire la matrice carre M dordre 12 contenant les entiers de 1 a 144 rangs e ` e par ligne. Extraire de cette matrice les matrices suivantes : la sous-matrice forme par les coecients a ij pour i = 1,...,6 et j = 7,...12 ; e celles des coecients aij pour (i,j) {1,2,5,6,9,10}2 ; celle des coecients aij pour i + j pair.
` TP1 : INTRODUCTION A MATLAB
5. Les oprations matricielles et les fonctions e 5.1. Les oprations matricielles. e A rank(A) inv(A) expm(A) det(A) trace(A) poly(A) eig(A) [U,D]=eig(A) + * ^ .* .^ A\b b/A ./ transpose de A e rang de A inverse de A exponentielle de A dterminant de A e trace de A polynme caractristique de A o e valeurs propres de A vecteurs propres et valeurs propres de A addition, soustraction multiplication, puissance (matricielles) multiplication, puissance terme a terme ` solution de Ax = b solution de xA = b division terme a terme `
Exercice 9. Essayez des fonctions sur la matrice A. Par exemple, quels sont ses valeurs et vecteurs propres? Puis, construisez une matrice C de mme taille que A. Essayez A+C, A*C, A.*C. e Ensuite, dnissez la matrice B comme tant la matrice A a laquelle on a ajout le vecteur e e ` e colonne [1; 2; 3]. Dterminez son noyau. Y a-t-il une fonction prdnie dans Matlab qui e e e dtermine le noyau dune matrice? Le cas chant, y a-t-il des dirences entre les mthodes e e e e e employes pour le calcul du noyau? e Exercice 10. Rsolution dun syst`me sous-dimensionn : e e e 2x1 + x2 3x3 = 1 x1 2x2 + x3 = 2
(1) Ecrivez le syst`me sous la forme matricielle Ax = b (o` vous dnissez A et b) et e u e calculez le rang de la matrice A. (2) Dnissez la matrice B comme tant la matrice A a laquelle on a ajout le vecteur e e ` e colonne b. (3) Calculez le rang de la matrice B. Conclusion? (4) Dnissez le vecteur c = [1; 1; 1] et dterminez limage du vecteur c par la matrice e e A. (5) Rsolvez lquation Ax = b. e e NB : A\b est quivalent a inv(A)*b si A est inversible. e `
` TP1 : INTRODUCTION A MATLAB
5.2. Les fonctions. e Fonctions elmentaires sqrt sin asin round abs exp cos acos floor angle log tan atan ceil conj
Certaines fonctions de Matlab sappliquent a lensemble dun vecteur. Lorsquon les ap` plique a des matrices, elles op`rent colonne par colonne. ` e Exercice 11. Construire un vecteur quelconque et essayer les fonctions ci-dessus. Le tableau suivant dcrit le rsultat de quelques unes de ces fonctions lorsquelles sont e e appliques a un vecteur x : e `
Fonctions vectorielles max(x) maximum min(x) minimum sort(x) tri par ordre croissant [y, I] = sort(x) retourne en plus les indices des lements de x e find(x) retourne les indices non nuls de x [y, I] = find(x) retourne des lignes (dans le vecteur I) et des colonnes (dans le vecteur J) des lements non nuls du x e sum(x) somme des lments de x ee cumsum(x) vecteur contenant la somme cumule des lments de x e ee prod(x) cumprod(x) diff(x) mean(x) median(x) std(x) produit des lments de x ee vecteur contenant le produit cumul des lments de x e ee vecteur des dirences entre deux lments conscutifs de x e ee e moyenne des lments de x ee mdiane e cart type e
Exemple 1. Regardez leet des instructions suivantes. )) x=rand(1,5) )) mean(x) )) std(x) )) median(x) )) sort(x)
` TP1 : INTRODUCTION A MATLAB
)) )) )) )) )) )) )) )) )) )) ))
A=rand(3) sort(A) [B, I]=sort(A) sort(A) max(A) max(A) max(max(A)) sum(A) cumsum(A) prod(A) diff(A)
)) D=A([1,2],1:3) )) sum(D,1) )) sum(D,2) Exercice 12. Soit X une matrice 2 n contenant les coordonnes de n points du plan. e Comment faire pour obtenir une matrice o` les points sont ordonns par ordre croissant des u e abscisses? Exercice 13. Calculer 10!. Exercice 14. (1) Soit le vecteur de dimension 8 de composantes : 3.2, 4.8, 3.3, 3.2, 3.1, 4.2, 3.2, 3.3. Entrez le vecteur y = (yi )i=1,...,8 correspondant. (2) Construisez a laide des fonctions prcdentes la suite des moyennes mobiles, ` e e yn = 1 n
n
yi .
i=1
Extrayez y8 . Donnez une fonction qui calcule directement y 8 a partir de y. `
Exercice 15. Tirez 20 nombres alatoirement dans lintervalle [0,1]. Quelle est la valeur mie nimale du vecteur et la position du coecient qui la ralise? Vriez. e e 6. Oprateurs relationnels et logiques e Ils permettent de relier logiquement deux matrices. Oprateurs relationnels <, <=, >=, == (galit), = (dirent) e e e e Oprateurs logiques e & (et), | (ou), ou not (non)
NB : Attention de ne pas confondre = qui sert a aecter une valeur a une variable et == ` ` qui sert a tester lgalit. ` e e
` TP1 : INTRODUCTION A MATLAB
Les oprateurs relationnels peuvent tre utiliss avec des scalaires ou des matrices. Le e e e rsultat dvaluation dune expression relationnelle est 1 (vrai) ou 0 (faux). Appliqus a une e e e ` matrices, ils rendent une matrice de mme dimension, forme de 1 et de 0. e e Exemple 2. u=4 u==4 u<=12 Reprenez la matrice A=[1 Ar=(A<=2) 2 3; 2 3 1; 3 1 2] en tapant A=[ .
[B,I]= find(A==1) (Retourne les coordonnes gales a 1, ainsi que leur position.) e e ` Exercice 16. Reprenons le vecteur y. Pour rappel, tapez y. (1) Faites rpondre Matlab a la question suivante : existe-t-il une coordonne du vecteur e ` e y infrieure a 3.3? e ` (2) Construisez un vecteur logique z tel que la i-`me coordonne de ce vecteur sera 1 si e e la i`me coordonne du vecteur y est a lextrieur de lintervalle [8 8 ,8 + 8 ] o` e e ` e y y u 8 est la racine carre de la variance dchantillonnage. e e Exercice 17. (1) Tirez 100 nombres alatoirement (et uniformment) dans lintervalle [0,1] et groupeze e les dans un vecteur x = (xi )i=1,...,100 . (2) Prenez yi = 2 xi pour tout i = 1 . . . ,100. (3) Prenez la partie enti`re de ces nombres (` laide de la fonction floor) : z i = [yi ]. e a Ceci dnit un vecteur z. (Au passage, notez quil existe plusieurs fonctions parties e enti`res, avec des comportements dirents, ceil par exemple...) e e (4) Donnez la frquence de 1 sur lchantillon z. Pouvait-on sattendre a ce rsultat? e e ` e
Rinitialisez lespace de travail en tapant clear (eacement des variables denvironnement) e puis clc. 7. Reprsentation graphique des rsultats. e e 7.1. Reprsentations de points dans le plan. Il existe plusieurs possibilits pour reprsenter e e e un ensemble de points (x(i),y(i)). Les plus utilises sont numres ci-dessous. e e ee trac dune courbe ou dun nuage de points e trac sous forme dun histogramme e diagramme en btons a trac en escalier des valeurs discr`tes e e reprsente des fonctions e trace des histogrammes
plot(x,y,s) bar(x,y,s) stem(x,y,s) stairs(x,y) fplot hist
10
` TP1 : INTRODUCTION A MATLAB
s est un param`tre facultatif constitu dune cha de caract`res qui spcie le type de e e ne e e trac (couleur, dirents tracs en pointills, symboles pour le trac de points). Par dfaut, e e e e e e le trac est continu. Tapez help plot pour avoir la liste des valeurs possibles pour s. e 7.2. Gestion de la fentre graphique. e hold on hold off clf figure(n) close close all subplot(n,m,p) les prochains tracs se superposeront aux tracs dj` eectus e e ea e le contenu de la fentre graphique active sera eac lors du prochain trac e e e eace le contenu de la fentre graphique active e ache ou rend active la fentre graphique numro n e e ferme la fentre graphique active e ferme toutes les fentres graphiques e partage la fentre graphique active en m n espaces graphiques e et slectionne le p-i`me. e e
7.3. Axes et lgendes. e axis([xmin xmax ymin ymax]) grid grid off title(titre) xlabel(titre) ylabel(titre) legend(titre1,titre2,...) text(x,y,texte) gtext(texte) pour dnir les chelles des axes e e quadrillage du graphique titre pour le graphique lgende pour laxe des abscisses e lgende pour laxe des ordonnes e e lgende pour chaque courbe du graphique e texte explicatif a la position (x,y) ` texte positionn a laide de la souris e`
NB : Si a est une variable contenant le nombre 2, la commande text(x,y,[le resultat est num2str(a,3)]) achera le texte le resultat est 1.41 a partir de la position ` x,y de la fentre graphique. e Exemple 3. x= -pi :0.1:3*pi; y=x.*sin(x); plot(x,y) clf plot(x,y) axis([-pi,3*pi,-6,9]) xlabel(x) ylabel(y) title(graphe de la fonction x sin(x) sur lintervalle [ num2str(x(1)) , num2str(x(end)) ]]) plot(x,y,x,2*y) plot(x,[y;2*y]) plot(x,y,r--,x,2*y,g+) fplot([x*sin(x),2*x*sin(x)],[-pi,3*pi])
` TP1 : INTRODUCTION A MATLAB
11
fplot(x*sin(x),[-pi,3*pi],b-) hold on fplot(2*x*sin(x),[-pi,3*pi],yo) hold off t=0:0.1:2*pi; plot(sin(t),sin(2*t)) plot(sin(t),sin(2*t),c-) Exercice 18. Soit f et g les fonctions dnies sur lintervalle [0,10] par : e x x f (x) = exp , g(x) = cos . 25 10 Tracez ces deux fonctions (` laide de fplot) dabord dans une mme fentre graphique mais a e e sur des graphes dirents, puis dans une mme fentre graphique et sur le mme graphe. e e e e 7.4. La sauvegarde dune gure. Une gure peut tre sauvegarde sous plusieurs formats : e e sous un format propre a matlab avec lextension .fig (pour les versions rcentes ` e de Matlab). Pour cela, cliquer sur la commande Save as du menu File de la fentre e graphique et entrer un nom de chier avec lextension .fig dans lencadr qui appara e t. Un tel chier peut tre visualis en utilisant la commande Open du menu File. e e sous un format PostScript en utilisant la commande Export du menu File dune fentre graphique, ou, plus manuellement, en tapant print -dps nomchier. Dans ce e cas, un chier [Link] est cr dans le rpertoire courant. On peut visualiser les ee e chiers PostScript en utilisant le logiciel GhostView (gv), limpression sen faisant par la commande linux lpr.
Exercice 19. (1) Tirer 100 couples de points (x,y) alatoirement dans le carr [0,1] [0,1]. e e (2) Reprsenter le nuage de points obtenus dans une fentre graphique. e e (3) Calculer le centre de gravit G du nuage de points. e (4) Ajouter en rouge au nuage de points le centre de gravit. e (5) Sauvegarder la gure sous le nom [Link]. Fermer la fentre graphique. Ouvrir e une nouvelle fentre graphique et faire rapparaitre le chier [Link]. e e 7.5. Les histogrammes. La reprentation dun histogramme peut se faire a laide des fonc` tions hist ou histo. Nous dcrivons la fonction hist : e hist(y,C) dessine lhistogramme pour les valeurs du vecteur y rparties en C classes e si C est un scalaire, ou sur les classes centres sur les valeurs du vecteur C si C est un e vecteur. Par dfaut, C vaut 10. e [N,C]=hist(y,C) ne dessine pas dhistogramme mais retoure les vecteurs N et C o` C u est le vecteur des milieux des classes et N est le nombre de valeurs de y appartenant a chaque classe. Lhistogramme sobtient par bar(C,N). `
Exercice 20. Reprendre lexercice prcdent et faire acher dans une mme fentre graphique e e e e deux histogrammes, un pour les abscisses et lautre pour les ordonnes des points tirs. e e
12
` TP1 : INTRODUCTION A MATLAB
8. Utilisation de fichiers. 8.1. Les chiers de sauvegarde. La commande diary nomchier cre un chier (journal de e bord) intitul nomchier qui garde la trace de toutes les commandes que vous avez tapes dans e e la fentre de commandes ainsi que les rponses de lordinateur. diary off permet darrter e e e lcriture du journal de bord, tandis que diary on permet de la reprendre. e save nomchier var1 ... varn save nomchier save -ASCII nomchier var1 ... varn load nom-f sauve la valeur des variables var1 ... varn dans un chier binaire [Link] sauve lensemble des variables existant dans lespace de travail de Matlab dans un chier binaire [Link] sauve la valeur des variables var1 ... varn dans un chier texte nomchier permet de rcuprer toutes les donnes sauvegardes e e e e dans le chier [Link]
Exercice 21. Sauvegardez x, y et le centre de gravit G dans un chier binaire [Link]. e Ouvrez ce chier sous Linux (avec Emacs par exemple). Dans Matlab, avec la commande clear, eacez x, y et G. Puis, chargez le chier [Link] an de les rcuprer. Vriez la e e e rcupration. e e 8.2. Les programmes script (ou chiers dinstructions). Ce sont des chiers texte avec une extension .m. Ils contiennent des suites dinstructions Matlab qui sont excutes les unes e e apr`s les autres. e Exemple 4. Sauvez dans le rpertoire courant les lignes suivantes sous le nom losange.m : e x=[0 -1 0 1 ; -1 0 1 0 ] y=[-1 0 1 0 ; 0 1 0 -1] plot(x,y) La commande losange achera x, puis y, puis tracera un losange. Si ce chier est plac e dans un rpertoire accessible 2 , la commande losange devient une commande Matlab comme e toutes les autres. 8.3. Les chiers de fonctions. Comme les chiers dinstruction, ce sont des chiers texte avec une extension .m. Leur syntaxe est particuli`re. Ils contiennent la dnition dune fonce e tion et portent le nom de cette fonction. Exemple 5. function d=densnorm(x) % densnorm : densite de la loi N(0,1) % densnorm(x) retourne (1/sqrt(2*pi))*exp(-x2/2) d=(1/sqrt(2*pi))*exp((-x.2)/2);
2. voir ci-dessous le paragraphe Gestion du path
` TP1 : INTRODUCTION A MATLAB
13
Si ce chier est plac dans un rpertoire accessible, la fonction densnorm devient une fonce e tion Matlab comme toutes les autres. Le texte plac en commentaire est le contenu de laide e pour la nouvelle fonction.
Exercice 22. Utilisez la fonction ci-dessus pour tracer (avec plot) la densit de la loi nore male centre rduite entre -5 et 5 en faisant calculer 100 points. Aurait-on pu utiliser fplot? e e Calculez P(5 X 1.96) o` X est une variable alatoire de loi N (0,1). u e 8.4. Dialogue avec lutilisateur. disp(var) ache le contenu de var rep=input(texte) ache la ch de caract`re texte et donne la main a lutine e ` lisateur pour quil entre la valeur de la variable rep pause(n) arrte lexcution dun programme pendant n secondes ; par e e dfaut (sans n), reprend lexcution du programme lorsque e e lutilisateur appuie sur une touche du clavier keyboard arrte lexcution dun programme et donne la main a lutie e ` lisateur jusqu` ce quil tape presse la touche Entre a e
Exemple 6. Essayez les commandes suivantes : n=input(entrez le nombre de simulations) disp([Vous avez tap : num2str(n)]) e
Exercice 23. Ecrire une fonction simule.m qui prend n en argument et : (1) construit un vecteur de n = 100 nombres alatoires (y i )i=1,...,n issus dune loi normale e de moyenne 2 et de variance 1, (2) renvoie la moyenne et la variance de lchantillon observ, e e (3) spare la fentre graphique en deux espaces graphiques et superpose respectivement e e sur chacun deux : lhistogramme de (yi )i=1,...,n et la densit de la loi normale de moyenne 2 et de e variance 1, donne un titre a la gure et ache la moyenne et la variance, ` la fonction de rpartition empirique (utiliser la fonction sort) et la fonction de e rpartition thorique (utiliser la fonction pnorm), et donne un titre a la gure. e e ` Faites tourner le programme pour dautres valeurs de n, plus grandes ou plus petites. Indication : la premi`re ligne du chier de fonction est function [m,v] = simule(n). e
14
` TP1 : INTRODUCTION A MATLAB
9. Les commandes structures e 9.1. Linstruction for. La syntaxe en est la suivante : for variable = vecteur instructions end Les colonnes du vecteur sont aectes, lune apr`s lautre a la variable variable et pour e e ` chacune de ces valeurs, les instructions sont excutes. Remarquez quil faut privilgier les e e e oprations vectorielles a lutilisation de boucles. e ` Exemple 7. Ces quelques lignes calculent n! pour n = 1 a 100. fact = zeros(1,100); ` n=100; fact(1)=1; for k=2:n fact(k)=fact(k-1)*k; end Mais on peut aussi taper simplement : n=100; fact=cumprod(1:n); Lexcution du premier programme prend signicativement plus de temps que lexcution e e du deuxi`me programme. Pour le voir, et comparer lecacit des algorithmes, on peut utiliser e e tic (` placer en dbut de programme) et toc (` placer en n de programme ) qui permettent a e a de compter le temps cpu coul. e e Exercice 24. Excutez les deux programmes ci-dessus en utilisant les commandes tic, e toc an de comparer leur temps dexcution respectif. e
9.2. Les intructions conditionnelles. La mani`re la plus brute de procder est dutiliser e e un bloc if ... then ... else ... end. La syntaxe en est la suivante : if conditions instructions end Les instructions ne sont excutes que si les conditions sont vries, plus prcisment e e e e e e si conditions a une valeur dirente de 0. Une variante plus labore est : e e e if conditions instructions else instructions end
(excutes si les conditions sont vries) e e e e (excutes si les conditions ne sont pas vries) e e e e
Ou encore (avec des embo tements) :
` TP1 : INTRODUCTION A MATLAB
15
if conditions1 instructions (excutes si les conditions1 sont vries) e e e e elseif conditions2 instructions (excutes si les conditions1 ne sont pas vries e e e e mais si les conditions2 le sont) else instructions (excutes si ni les conditions1 ni les conditions2 ne sont vries) e e e e end Exemple 8. Le programme suivant simule le lancer dune pi`ce. e p=0.5; u=rand; if u<p disp(pile) else disp(face) end
NB : Rappelons quune proposition logique (par exemple, (x>0 & x<10)) a pour valeur 1 si elle est vraie et 0 sinon. Dans les calculs, on peut donc viter dutiliser linstruction if en e introduisant des indicatrices densembles. Exercice 25. En tenant compte de cette remarque, simuler la ralisation dune variable e alatoire de loi de Bernoulli de param`tre p. Puis, apr`s cet chauement, crire un programme e e e e e script EstimeParam.m qui : (1) simule un 1000-chantillon de variables alatoires de Bernoulli de param`tre 0.2, e e e (2) ache le nombre de succ`s contenus dans ce 1000-chantillon, e e (3) et trace la courbe des moyennes mobiles en fonction du rang. Excuter le programme. Que remarque-t-on? Quel est le thor`me qui explique le phnom`ne? e e e e e Exercice 26. Nous allons censurer des variables. Soit u une ralisation dun 15-chantillon e e X1 , . . . ,X15 de loi uniforme sur [5,1]. Mettez les observations plus petites que 2 a 10. ` Ceci forme v, ralisation dun 15-chantillon Y 1 , . . . ,Y15 . Quelle est la loi commune aux Yi ? e e 9.3. Linstruction while. Ce format de boucle permet de sarrter conditionnellement (et e non plus a rang x, comme dans une boucle for). La syntaxe en est la suivante : ` e while conditions instructions end Les instructions sont excutes tant que les conditions sont vries. e e e e Exemple 9. Soit f une fonction continue. La fonction suivante recherche par dichotomie une valeur approche a e pr`s dune solution de lquation f (x) = 0 dans lintervalle [a, b], lorsque e ` e e
16
` TP1 : INTRODUCTION A MATLAB
f (a) et f (b) sont de signes dirents (ce qui forme une condition susante dexistence de ce e point dannulation x). function s=dicho(f,a,b,e) % s=DICHO(f,a,b,e) % f : chaine de caracteres contenant le % nom dune fonction (definie a % laide dun fichier .m de type % function) % a,b : bornes de lintervalle de recher % che( a<b ) % e : precision avec laquelle on veut la % valeur approchee de la solution % de f(x)=0 d=b-a; ya=feval(f,a); yb=feval(f,b); if ya==0 s=a; elseif yb==0 s=b; elseif ya*yb<0 while (d>e) x=(b+a)/2; y=feval(f,x); if y==0 s=y; return elseif y*ya<0 b=x; yb=y; else a=x; ya=y; end d=b-a; end s=x; else error(la fonction ne change pas de signe) end Pour mmoire, on donne les instructions de rupture de squence. Il vaut cependant mieux e e programmer susamment proprement pour sen dispenser. Exercice 27. Ecrire une fonction y = Puiss(n,M) qui tant donn un entier n et une valeur e e maximale M > n, calcule les puissances enti`res de ce nombre, les agr`ge dans le vecteur y e e et sarrte lorsque le rsultat dpasse la valeur maximale e e e
` TP1 : INTRODUCTION A MATLAB
17
break termine lexcution de la boucle la plus proche e return Termine lexcution dun chier script sans aller jusqu` sa n e a error(message) ache la cha de caract`res message et interrompt lexcution du prone e e gramme en cours Rfrences e e
[1] M. Mokhtari et A. Mesbah Apprendre et maitriser Matlab. Springer. [2] S. Lemaire. Documents pour la prparation a lagrgation dOrsay. e ` e [3] B. Laurent. Documents pour les tps de Matlab de la Ma se de mathmatiques ingnierie tr e e
Questions et probl`mes supplmentaires pour utilisateurs avertis e e Renseignez-vous, via laide intgre a Matlab, sur les sujets suivants : e e ` les types de donnes et la conversion dun type a lautre, e ` la gestion des chemins dacc`s (i.e. le path). e
Exercice 28. Essayez de mettre les mots chat, chien, oiseau et 45 dans un mme e objet Matlab. Remarquez que Matlab refuse que ledit objet soit de type vecteur : la commande )) [chat; chien; oiseau; 45] provoque une erreur. Pourquoi? Quel type faut-il choisir alors? Ajoutez a lobjet ainsi form ` e un cinqui`me lment : la valeur de , avec 9 dcimales. Rcuprez ensuite la valeur numrique e ee e e e e du quatri`me lment dans un scalaire x. Enn, crivez une procdure qui mette bout a bout e ee e e ` les premi`res lettres de chacun des trois mots, puis les deuxi`mes, etc. e e Exercice 29. Crez un rpertoire de travail TP2 et ajoutez-le au path. Fermez votre session et e e rouvrez-la. Dmarrez Matlab. TP2 est-il toujours dans la liste des chemins? Si non, crez un e e chier pathdef.m (Menu File puis Set path) dans votre rpertoire de dmarrage. A chaque e e lancement de Matlab, il vous sura de tapez la commande pathdef pour que de multiples chemins deviennent accessibles. Ceci permet de classer correctement ses documents dans une arborescence claire.