HLMA405 TP1 Introduction à MATLAB L UE HLMA405 contient 11 séances de travaux pratiques. Pendant ces TP, nous aborderons les grands thèmes de l analyse numérique matricielle via le logiciel propriétaire MATLAB. Ce dernier est un logiciel extrêmement complet, mais payant. Vous pouvez soit casser votre tirelire, soit l utiliser sur les PC de l Université, soit utiliser une alternative gratuite : GNU/Octave disponible à l adresse https://www.gnu.org/software/octave/. Octave utilise exactement les mêmes commandes que MATLAB, mêmes si celui-ci demeure beaucoup moins complet, ce dernier suffit pour couvrir l ensemble des TP de cette UE. 1 Organisation Cette feuille concentre les commandes de base pour utiliser MATLAB. Des remarques et exercices sont proposés pour mieux comprendre les éventuelles erreurs auxquelles vous serez confronté. Accordez une attention particulière aux remarques précédées d un A retenir, celle-ci doivent être bien comprise! Avant de se lancer dans MATLAB, nous allons commencer par créer les dossiers oú l on sauvegarde tous nos travaux faits en séance de TP. Exercice 1. Lancez un terminal via le menu déroulant (ou Ctrl Alt T sous *ubuntu) et saisissez la ligne suivante : mkdir -p ~/hlma405/tp{intro,2,3,4,5,6,7-8,9,10,11} et exécutez la avec la touche Entrée. Ceci va créer un dossier hlma405 à l intérieur duquel vont se trouver plusieurs sous-dossiers TP. Pour cette première séance, placez vous dans le sous-dossier TPintro en faisant : puis Entrée. cd ~/hlma405/tpintro/ Remarque. Ne pas oublier le symbole tilde ~! Celui-ci designe votre répertoire utilisateur Remarque. Evitez les espaces dans les noms de fichiers et dossiers, préferez l underscore ou le tiret -. 2 Lancer MATLAB Pour lancer MATLAB, ouvrez un terminal (souvent Ctrl Alt T sous *ubuntu) et taper en minuscules matlab & pour lancer MATLAB (cela peut prendre du temps suivant les pc). Pour fermer MATLAB de force, ouvrez un terminal et tapez killall matlab puis Entrée. Remarque. Le symbole & permet de lancer l application en fond et garder la main sur le terminal afin d y exécuter d autres commandes. Si vous l omettez, l application se lancera toujours, mais le terminal ne sera pas utilisable. Exercice 2. Une fois placé dans le dossier TPintro, lancer MATLAB. 1
3 Les fenêtres de MATLAB MATLAB se divise en plusieurs zones : (Dir) Current directory : le dossier dans lequel vous vous trouvez. C est ici oú vous chargez/sauvegardez vos fichiers. (CW) Command Window : zone oú l on exécute des commandes MATLAB. (WS) Workspace : Liste des objets MATLAB en mémoire. (CH) Command History : L historique des commandes tapées dans Command Window. (Ed) Editor : Éditeur qui permet de créer des scripts MATLAB. A retenir. Vérifiez toujours que vous êtes bien dans le bon dossier dans (Dir)! Dans le cas contraire, vous aurez certainement une erreur quand vous chercherez à exécuter un script. A retenir. Il est préférable d utiliser la zone (CW) que pour faire des petits calculs et exécuter des scripts. Ainsi, pour traiter un exercice, il est préférable de créer un script avec l Editeur (Ed) puis de l exécuter dans (CW). 4 Commandes Les commandes qui vont suivre peuvent-être exécutées directement dans (CW), après les >> ou dans un script via l éditeur (Ed). Pour accéder aux commandes que vous avez entrées précédemment, vous pouvez utiliser les touches et du clavier une fois placé dans (CW). 4.1 Les basiques Dans ce qui suit, quelques mots-clés de base de MATLAB commande pwd cd clear help disp input descripton Renvoie le dossier courant Change le dossier courant. Exemple : cd ~/hlma405/tp3/ Efface un objet précis ou tous les objets en mémoire, tous les objets de (WS) sont effacés de la mémoire. Exemple : clear b, efface l objet b tandis que clear seul, efface toute la mémoire affichée dans (WS)! Donne des informations sur une commande. Exemple : help det renvoie des information sur la fonction déterminant det. premet d afficher un texte Exemple : disp( Le résultat est: ). invite à saisir une donnée au clavier Exemple : n=input( saisissez un entier ). A retenir. La commande help répondra à bon nombre de vos questions. Pensez-y avant de poser une question! Le symbole % permet d écrire des commentaires, tout ce qui suit un % sera ignoré par MATLAB. Le point-virgule ; permet de ne pas afficher de réponse de sortie. pwd ans = / home / moi pwd ; % ne retourne rien 2
4.2 Opérations classiques Pour définir un objet on utilise l opérateur =. On se place dans (CW) et on exécute par exemple a=9 pour assigner la valeur 9 à la variable a. On peut utiliser les opérateurs classiques (+,-,*,/) sur les nombres pour définir des variables : Addition : a=9+10 Soustraction : a=3-10 Multiplication : a=3*4 Division : a=3/4 ou mêmes s aider des fonctions mathématiques usuelles : min,max,mean,std,sum,abs,real,imag,conj,round,sqrt,exp,log,log10,sin,tan,sin,asin,atan,sinh,cosh,tanh et de constantes connues comme pi et i (partie imaginaire) : a= sin (pi) b= 1+i moduleb = sqrt (b* conj (b)) e= exp (pi*i) f= (1/ sqrt (2))*(1+ i) m= max (1,3) j= 0.5 E -10 % saisie par ecriture scientifique Exercice 3. Utiliser l aide pour avoir des détails sur les fonctions qui vont sont inconnues Comme en maths, certaines opérations ne sont pas définies, dans ce cas vous serez averti d un NaN ou d un Inf : a= 1/0 % renvoie un avertissement suivi de ans = Inf ( Infini ) b= 0/0 % renvoie un avertissement suivi de ans = NaN ( Not a Number ) 4.3 Opérations logiques On peut tester des conditions grace aux opérateurs logiques : a==b : teste si a est égal à b a~=b : teste si a est différent de b a<b : teste si a est strictement inférieur à b. a>b a<=b a>=b (cond1) & (cond2) : teste si cond1 ET cond2 sont vérifiées (cond1) (cond2) : teste si cond1 OU cond2 est vérifiée ~(cond) : teste si le contraire de cond est vraie (ou si cond est fausse). Remarque. Faites attention quand il s agit de tester la condition a==0. Bien souvent, quand on manipule des approximations de nombres, cette condition est rarement satisfaite. Préferez plutôt abs(a)<=eps avec eps petit (eps=1e-15 par exemple). On peut penser par exemple au cas oú l on vérifie x = 0. 4.4 Boucles et conditions 4.4.1 Condition if La syntaxe pour une condition if est la suivante : if condition1 elseif condition2 3
elseif else end confition3 Exercice 4. Créer un script qui renvoit le nombre de racines réelles d un polynôme de degré 2, celui-ci peut-être vu comme un vecteur ligne P=[a b c] faisant référence au polynôme P (X) = ax 2 + bx + c. 4.4.2 Boucle for La syntaxe pour une boucle for est la suivante : for i=a: b: c % i va parcourir le vecteur a: b: c % operations utilisant i end Exercice 5. En utilisant une boucle for, calculer la factorielle de 18 4.4.3 Boucle while La syntaxe pour une boucle while est la suivante : while end condition Exercice 6. Avec une boucle while et la fonction isprime, comptez le nombre de nombres premiers inférieurs à 1000. 5 Algèbre linéaire MATLAB se base sur une représentation matricielle des données. Il est possible de définir, à la volée, des matrices de dimensions arbitraires. Un nombre est vu comme une matrice 1 1. Dans ce qui suit, nous donnons quelques raccourcis pour définir des matrices et les opérations les plus courantes. A retenir. Sur MATLAB, les indices des coefficients des matrices commencent à 1. 4
commande x=a:b x=a:h:b description crée un vecteur ligne x commencant par a finissant par b avec un pas égal à 1 crée un vecteur ligne x commencant par a finissant par b avec un pas égal à h Exemple : a=0:0.5:1 renvoie a=[0 0.5 1] ones(n,m) définit une matrice n m pleine de 1. eye(n) définit la matrice identité I n. rand(n,m) définit une matrice n m avec des coefficients aléatoires dans [0, 1]. diag(u) définit une matrice carrée diagonale à partir du vecteur u. v(i) accède au coefficient i du vecteur ligne/colonne v. A(i,j) accède au coefficient (i, j) de la matrice A. A(i,:) affiche la ligne i de la matrice A. A(:,j) affiche la colonne j de la matrice A. A(2:6,1:4) extrait le bloc (A ij ) 2 i 6 1 j 4 inv(a) renvoie la matrice inverse de A. de la matrice A. trace(a) renvoie la trace de A. norm(a) renvoie une norme de A (faire help norm pour voir les normes disponibles). eig(a) renvoie les éléments propres de A. det(a) renvoie le déterminant de A. size(a) renvoie les dimensions de A. cond(a) renvoie le conditionnement de A. diag(a) renvoie les coefficients sur la diagonale de A. Opérations sur les matrices : Pour définir des matrices, on utilise les crochets []. Une matrice peut-être définie à la main, c-à-d directement avec ses coefficients comme suit % On peut definir une matrice A1 de taille 3 x4 ligne par ligne % ( pratique pour eviter les erreurs dans le cas de matrices diagonales ) A1 =[ [1 3 4 1]; [1 1 1 9]; [0 0 1 pi] ]; % ou d une traite A2 =[ [1 3 4]; [0 1 0]; [1 1 1]; [0 0 1] ]; Le point-virgule permet d aller à la ligne au sein de la matrice. La touche Entrée pendant la saisie. Exercice 7. Extraire le bloc 3 2 de A1 contenant π. Un vecteur de R n est vu comme une matrice n 1 (ou 1 n) : v =[ 1; 2; 3; 4] % definit un vecteur colonne v =[ 1 2 3 4 ] % definit un vecteur ligne permet d aller à la ligne Exercice 8. Créer un vecteur unite contenant les racines N ième de l unité Les opérations usuelles de l algèbre linéaire sont accessibles grace aux commandes suivantes commande description A+B somme des matrices A et B (de même tailles!). A-B différence des matrices A et B. A*B multiplication matricielle des matrices A et B. A.*B multiplication termes à termes des matrices A et B. A^n puissance nième d une matrice carrée. A.^n puissance nième termes à termes de A. A\b solution du système Ax = b oú A est une matrice n m et b R n A transposée de A. 5
Exercice 9. Assembler la matrice R de rotation de π 3 autour de l axe y dans R3. Sans utiliser MATLAB, parmi les deux commandes R*[0;3;0] et R.*[0;3;0], laquelle est valide? Le vérifier. A retenir. Bien faire la différence entre * et.*! 6 Visualisation MATLAB permet de tracer très facilement des courbes à partir de vecteurs. Le petit script suivant épargne un long discours : x = -10:0.01:10; % abscisses separes de 0.01 y=x.^2; % on met au carre chacune ( grace a.^) des composantes de x plot (x, y) % on trace la ligne qui relie les points plot (x,y, * ) % cette fois on affiche uniquement les points avec des etoiles * On peut aussi tracer sur un même graphe plusieurs courbes ainsi qu un titre, des labels, etc : h =0.1; % intervalle des abscisses x = -10: h :10; % abscisses separes de 0.1 y1 =x.^2; % on met au carre chacun des x y2 = sin ( x); % on calcule les sinus des x plot (x,y1, b-,x,y2, r- ) % on trace x vs y1 en trait continu bleu % et x vs y2 en trait continu rouge sur % le meme graphe title ( Fonction carre et sinusoidale ); % donne un titre xlabel ( abscisses x ); % ylabel ( ordonnees y ); % donne des noms aux axes legend ( fct carre, fct sin ); % une legende dans une petite boite Exercice 10. A partir de l exercice précedent sur les racines de l unité, calculer la différence entre le périmètre du cercle et du polygone obtenu. Afficher la décroissance par rapport à N sur un graphe. Pour les surfaces en 3D, on doit faire appel à d autres fonctions : x =[ 0: 0. 1: 1]; % vecteur qui contient les x y=x; % vecteur qui contient les y [X, Y]= meshgrid (x, y); % meshgrid va construire le produit cartesien de x et y % et stocker les abscisses dans une matrice X et les ord - % - onnees dans une matrice Y. Z= sin (X.^2+ Y.^2) % z = sin (x ^2+ y ^2) pour chaque point (x,y) du maillage mesh (X,Y,Z) % trace la surface z= sin (x ^2+ y ^2) 7 Les scripts Un script MATLAB est un fichier d instructions MATLAB, son extension doit finir par.m. Une fois exécuté dans (CW), les commandes sont exécutées les unes après les autres. Une fois que vous êtes dans le bon dossier, utilisez l Editeur (Ed) pour créer un script MATLAB, sauvegardez le sous la forme monscript.m. Pour exécuter le script, il suffit d écrire le nom du fichier en omettant l extention dans (CW), c est-à-dire : monscript Exercice 11. Ecrire un script fonctions.m qui trace les fonctions x x 4 x + 1 et x sin(cos(x)) et rouge et bleu et l exécuter. Exercice 12. Soit N points ((x i, y i ) 1 i N définis aléatoirement, écrire un script qui calcule le polynôme, de degré N 1, passant par tous ces points, puis le tracer. [Etapes : définir les points x i et y i avec rand, assembler la matrice du système linéaire grâce à vander, résoudre avec l opérateur \, puis tracer avec plot ] 6
7.1 Les fonctions Pour définir une fonction mafonction sous MATLAB, il faut commencer par créer un script mafonction.m dans (Ed). La fonction peut être définie avec la syntaxe suivante : function y= mafonction (x, t) % operations pour calculer y a partir de x et t endfunction Ici, les variables d entrées sont x,t et la variable de sortie est y. A retenir. Le nom de la fonction doit obligatoirement correspondre avec le nom du fichier. Exercice 13. Ecrire une fonction qui prend en entrée une liste de points (sous forme de matrice n 2) et qui renvoie l aire (algébrique) sous la courbe de la fonction affine par morceaux passant par ces points. On peut aussi définir sous MATLAB des fonctions à la volée très rapidement. Exemple : f=@( x)( x ^2+1) % definit la fonction x --> x ^2 + 1 f (2) % on evalue f en x=2 ans = 5 % reponse attendue Pour des fonctions à plusieurs variables il suffit d adapter légèrement f=@(x,y,z )([ x ^2; y ^2; z ^2]) % definit la fonction f: (x,y,z) --> (x^2,y^2,z ^2) f (1,2,1) % on evalue en (x,y,z )=(1,2,1) ans = 1 4 1 % renvoie (1,4,1) 7