Académique Documents
Professionnel Documents
Culture Documents
Guide M ATLAB
Introduction
Ce court guide dintroduction M ATLAB a pour but de tenter de faciliter vos premiers contacts avec ce logiciel et de vous servir de rfrence lorsque vous complterez vos travaux pratiques dans le cadre du cours MTH2210. Le but nest pas de vous fournir un guide complet des commandes M ATLAB, mais plutt de vous donner les outils ncessaires, sans plus, an de pouvoir fonctionner dans ce cours. En dautres termes, tout ce dont vous avez besoin est l. Sinon, des informations supplmentaires vous seront donnes dans lnonc des problmes rsoudre. Ce guide prend en compte que vous tes des aspirants ingnieurs, i.e. que vous tes dj rompus linformatique et que vous tes sufsamment curieux pour faire un effort personnel an de devenir comfortable utiliser cet outil. La prsentation est donc la plus directe possible et nous ne ferons aucune introduction sur lutilisation de linterface graphique de M ATLAB. Explorez! Plusieurs caractristiques de M ATLAB en font un outil simple et puissant. M ATLAB est un langage interactif, i.e. ds que vous entrez une commande, vous avez une rponse immdiate du logiciel. M ATLAB soccupe de dterminer le type et la taille des variables mises en mmoire, ce qui facilite la tche du programmeur en lui permettant dexprimenter et de se concentrer sur le problme rsoudre. Tous les types de M ATLAB sont bass sur la notion de matrice. Un scalaire est une matrice de taille 1 1, un vecteur est une matrice de taille n 1 ou 1 n, etc. Un autre concept de base de M ATLAB est que si vous vous demandez quel est le calcul quune commande excutera, en gnral il sagit de lopration la plus naturelle. Finalement, lapprentissage de lapproche vectorielle de M ATLAB sera utile pour ceux qui auront utiliser des ordinateurs architecture vectorielle ou parallle. La premire section de ce guide est un court tutoriel, qui peut tre vu comme votre premire session M ATLAB. Il couvre les commandes et la philosophie de base de M ATLAB. Vous trouverez ensuite un court catalogue de commandes M ATLAB, sous la forme dun tableau. Ce format a pour but de vous permettre de trouver rapidement la commande dont vous avez besoin. Pour chaque commande, un exemple dutilisation est donn, avec un commentaire ou une illustration du rsultat. Une courte bibliographie est donne en annexe, pour ceux qui veulent aller plus loin dans leur apprentissage de M ATLAB. Lorsque ce document est consult en ligne laide du logiciel Acrobat, les hyperliens dirigeront votre fureteur vers les documents pertinents. Ce guide est dynamique. Je suis ouvert toute suggestion de correction ou de modication. Des mises-jour de ce document seront rendues disponibles sur une base rgulire. Consultez la date de ldition pour voir si le document a t mis jour. Dans le but de crer des textes acadmiques, techniques et scientiques de qualit, ce document est protg par une license Creative Commons .
Guide M ATLAB
Tutoriel
Les premiers pas
Une fois M ATLAB lanc, nous sommes en prsence de linvite ( prompt ) de M ATLAB :
>>
Notons quil nest pas ncessaire de dclarer le type ou la taille de a. Nous voyons aussi un des avantages de travailler avec un langage interactif : nous avons une rponse immdiate de M ATLAB.
>> A=2 A = 2 >> a a = 1 >> A A = 2 % un autre scalaire, i.e. une matrice de taille 1x1
On va chercher les composantes des tableaux de la mme faon quavec les autres langages :
>> c(2) ans = 4 >> A(1,2) ans = 2 >> A(3) ans = 2 % la deuxime composante de c
Si nous nassignons pas le rsultat dun calcul une variable, M ATLAB met le rsultat dans la variable ans ( answer ), que nous pouvons utiliser au mme titre que les autres variables :
>> ans(1)+sin(1)+pi ans = 5.9831 % MATLAB peut tre utilis comme une calculatrice
M ATLAB nous donne plus de libert que les autres langages pour accder aux composantes des tableaux :
>> c([2,3]) ans = 4 5 >> A([2,3,4]) ans = 3 2 % les deuxime et troisime composantes de c
Lopration prcdente peut vous sembler plus intuitive si nous utilisons la commande sub2ind :
>> indices=sub2ind(size(A),[2,1,2],[1,2,2]); >> A(indices) ans = 3 2 4
Une condition boolenne peut aussi tre utilise pour accder aux composantes voulues :
>> A(A>3) ans = 4 % les composantes de A suprieures 3
Guide M ATLAB
>> A(mod(A,2)~=0) ans = 1 3 % on recherche les entres impaires
Dans lenvironnement M ATLAB, une expression boolenne vraie est gale 1 et une expression fausse est gale 0. Les oprateurs boolens sont similaires ceux rencontrs en C, soient == , , & et | pour nen nommer que quelques-uns. Il est facile de modier les matrices :
>> A(1,1)=0 A = 0 2 3 4 >> A(3,3)=9 A = 0 2 3 4 0 0 % noubliez pas que les indices commencent 1
Nous sommes aussi assurs que les autres nouvelles composantes seront initialises 0 . M ATLAB nous donne aussi des outils puissants pour modier les tableaux. Voici deux exemples :
>> A([6,8])=[7,5] % puisque les entres sont stockes par colonne A = 0 2 0 3 4 5 0 7 9 >> A(sub2ind(size(A),[1,3,1],[1,1,3]))=1 % quel est le rsultat?
Nous verrons dautres exemples la section suivante. Si nous ne nous souvenons plus des variables que nous avons utilises :
>> whos Name A B C a ans b c d indices Size 3x3 3x2 3x3 1x1 2x1 1x2 3x1 1x5 1x3 Bytes 72 48 72 8 16 16 24 40 24 Class double double double double double double double double double array array array array array array array array array
Nous voyons que tous les objets crs sont des matrices avec des composantes stockes comme des rels en format double prcision IEEE, mme si nous avons dni ces tableaux laide dentiers.
Guide M ATLAB
Loprateur :
Un outil puissant de M ATLAB est loprateur : :
>> x=1:10 % cration dun vecteur ligne form de 10 entiers x = 1 2 3 4 5 6 7 8 9 10 >> x=10:-1:1 % rebours x = 10 9 8 7 6 5 4 3 2 1 >> x=0:0.1:0.5 % avec un incrment de 0.1 plutt que 1 x = 0 0.1000 0.2000 0.3000 0.4000 0.5000
On peut utiliser loprateur : pour extraire plusieurs composantes dun vecteur ou dune matrice :
>> d=x(2:4) % on va chercher les composantes 2, 3 et 4 du vecteur x d = 0.1000 0.2000 0.3000 >> B=A(2:3,2:3) % soutirons une sous-matrice 2x2 de la matrice A B = 4 5 7 9 >> e=A(2,:) % ou si on veut extraire la deuxime ligne de A e = 3 4 5 >> e=A(2:end,1) % utilisons le dernier indice de la ligne (end=3 ici) e = 3 1
qui est plus pratique que la commande quivalente C=C([1 3],:) pour de grands tableaux. Loprateur : peut aussi tre utilis pour intervertir les lignes et les colonnes des tableaux :
>> C(:,[3 2 1]) ans = 2 1 2 1
3 5
Guide M ATLAB
Du point de vue de lalgbre linaire, nous ne pouvons pas multiplier deux vecteurs lignes. Utilisons loprateur de transposition :
>> x*y ans = 10 >> dot(x,y); % on obtient le mme rsultat >> B*b % mme problme entre la matrice B et b=[1 2] ??? Error using ==> * Inner matrix dimensions must agree. >> B*e % pas de problme avec e=[3;1] ans = 17 30
lopration B*B
qui est quivalent B\C 8.0000 -6.0000 qui est quivalent b*inv(B)
Guide M ATLAB Ce qui nous mne naturellement vers la rsolution dun systme dquations linaires Ax D c : E E
>> x=A\c x = 0.4231 1.6923 -0.8077 % rsolution par factorisation LU, et non par inv(A)*c
Une autre caractristique de M ATLAB qui en fait un outil puissant est sa srie doprations sur les composantes des tableaux :
>> B/2 ans = 2.0000 3.5000 >> B+1 ans = 5 6 8 10 % chaque composante est divise par 2 2.5000 4.5000 % on ajoute 1 chaque composante de B (et non B+I)
Les fonctions mathmatiques lmentaires sont aussi dnies sur les composantes des tableaux :
>> sqrt(B) ans = 2.0000 2.6458
2.2361 3.0000
Quen est-il des oprations *, / et sur les composantes des tableaux? Cest ici que loprateur . vient simplier notre tche :
>> B.*B ans = 16 49 >> C.^2 ans = 9 25 % B(i,j)*B(i,j) plutt que B*B 25 81 % C(i,j)^2 plutt que C^2=C*C, qui na pas de sens ici 1 1 4 4
Par exemple, ces oprations sont utiles pour simplier limpression de tableaux de rsultats numriques :
>> n=1:5; >> [n ; n.^2 ; 2.^n] ans = 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32
Nous verrons plus loin que cette notation est souvent utilise pour dnir des fonctions.
Guide M ATLAB
Les commandes qui y sont stockes seront alors excutes. Si vous devez apporter une modication votre srie de commandes, vous navez qu modier la ligne du chier-M en question et rexcuter le chier-M en entrant le nom du chier dans M ATLAB nouveau (essayez la touche "). Cette procdure vous vite de retaper une srie de commandes rptition. Cest la procdure recommande pour vos travaux pratiques. Il est possible de programmer des boucles et des branchements dans les chiers-M :
for i=1:10 if i<5 x(i)=i; else x(i)=0; end end % % % % boucle for branchement noubliez pas votre point-virgule, sinon... on peut utiliser le else
Le point-virgule la n dune ligne signale M ATLAB de ne pas afcher le rsultat de lopration lcran. Une pratique courante est de mettre des ; la n de toutes les lignes et denlever certains de ceux-ci lorsque quelque chose ne tourne pas rond dans un programme, an de voir ce qui se passe. En gnral, on essaie dviter un tel programme. Puisque lon utilise un langage interactif, ce bout de code fait un appel au logiciel chaque itration de la boucle et chaque valuation de la condition. De plus, le vecteur change de taille chaque itration. M ATLAB doit donc faire une demande au systme dexploitation pour avoir plus de mmoire chaque itration. Ce nest pas trs important pour un programme de petite taille, mais si on a un programme qui fait une quantit importante de calculs, un programme optimis peut tre acclr par un facteur 1000! Il est possible dviter ces goulots dtranglement en demandant initialement lespace mmoire ncessaire vos calculs, puis en vectorisant la structure du programme :
x=zeros(1,10); x(1:4)=1:4; % un vecteur de dimension 1x10 est initialis zro % une boucle laide de loprateur <<:>>
Dans cet exemple, lespace mmoire nest allou quune seule fois et il ny a que deux appels faits M ATLAB . Notons que le concept de vectorisation nest pas particulier M ATLAB . Il est aussi prsent dans les langages de programmation dordinateurs vectoriels et parallles. Ceci tant dit, prcisons que la vectorisation dalgorithmes est un art difcile matriser et qui demande du travail. Les programmeurs expriments prennent lhabitude de dbuter leurs programmes M ATLAB avec une srie de leurs commandes prfres qui ont pour but dviter les mauvaises surprises. Par exemple :
>> >> >> >> clear all; format compact; format short e; dbstop if error % % % % on efface toutes les variables, fonctions, ... supression des sauts de lignes superflus viter quune petite quantit saffiche 0.0000 facilite limpression dune variable en cas derreur
Guide M ATLAB
En entrant help carre, vous verrez les lignes de commentaires qui suivent immdiatement le mot clef function :
>> help carre
Utilisez cette fonctionnalit pour vos fonctions. Les communications entre les fonctions et les programmes se font donc laide des arguments en entre et en sortie. La porte des variables dnies lintrieur dune fonction est donc limite cette fonction.
Guide M ATLAB
10
Cependant, dans certaines situations, il peut tre pratique davoir des variables globales, qui sont dnies laide de la commande global :
function y=Ccarre(x) % % Dfinition de la fonction (C^3)*x^2 % global C % variable globale, initialise lextrieur de Ccarre e = 3 % variable locale a Ccarre, donc invisible ailleurs y = (C^e)*(x*x); C = 1 % C est modifie partout ou elle est dfinie globalement
o la variable C serait aussi dnie comme globale dans les chiers-M o on veut y avoir accs. Par convention, les variables globales sont crites en majuscules.
Les graphiques
La fonction de base pour tracer un graphique avec M ATLAB est la commande plot qui prend comme arguments une srie de points donns sous la forme de 2 vecteurs, quelle relie de segments de droites. Cest la responsabilit de lutilisateur de gnrer assez de points pour quune courbe rgulire paraisse rgulire lcran. De plus, il est possible de donner des arguments additionnels, ou dutiliser dautres fonctions, pour contrler lapparence dun graphique :
>> >> >> >> >> >> >> x=0:0.1:2*pi; plot(x,sin(x),b-o,x,cos(x),m--+); axis([0 2*pi -1.1 1.1]); title(Le titre du graphique); xlabel(Laxe des x); ylabel(Laxe des y); legend(sinus,cosinus); % lordonne % le graphe du sinus et du cosinus % dfinition des axes
Guide M ATLAB La commande hold vite que le premier graphique soit cras par le deuxime.
11
Loprateur : nest pas idal pour crer le vecteur x dans ce contexte. Comme vous pouvez le voir sur la gure prcdente, x(end) nest pas gal 2 . Dans ce cas, on prfre utiliser la commande linspace pour gnrer le nombre de points voulu dans un intervalle donn, alors que loprateur : nous donne plutt le contrle sur la distance entre les points.
>> x1=0:1:2*pi % combien a-t-on de points entre 0 et 2*pi? x1 = 0 1 2 3 4 5 6 >> x2=linspace(0,2*pi,7) % ici on sait quon en a 7, allant de 0 2*pi x2 = 0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832
On peut aussi comparer des rsultats sous forme graphique laide de la commande subplot :
>> >> >> >> subplot(2,2,1); subplot(2,2,2); subplot(2,2,3:4); axis([0 2*pi -1.1
1 0.5 0 0.5 1 0 2 4 6
plot(x,sin(x),b-o); axis([0 2*pi -1.1 1.1]); plot(x,cos(x),m-+); axis([0 2*pi -1.1 1.1]); plot(x,sin(x),b-o,x,cos(x),m--+); 1.1]);
1 0.5 0 0.5 1 0 2 4 6
1 0.5 0 0.5 1 0 1 2 3 4 5 6
La fonction fplot facilite le trac de graphes de fonctions, en automatisant le choix des points o les fonctions sont values :
>> fplot([sin(x),cos(x)],[0 2*pi],b-+)
On perd cependant de la latitude dans le choix de certaines composantes du graphique. Finalement, les graphiques tridimensionnels, de type paramtrique, sont tracs laide dune gnralisation de la commande plot :
>> >> >> >> >> >> t=linspace(-5,5,1000); x=(1+t.^2).*sin(20*t); y=(1+t.^2).*cos(20*t); z=t; plot3(x,y,z); grid on; % utilisation de loprateur <<.^>>
Guide M ATLAB
12
5 30 20 10 0 10 20 30 30 20 0 10 10 20 30
Pour ce qui est des graphes tridimensionnels, une tape intermdiaire est ncessaire avant dutiliser les diverses commandes notre disposition :
>> >> >> >> >> >> >> >> x=linspace(0,pi,50); y=linspace(0,pi,50); [X,Y]=meshgrid(x,y); % on gnre une grille sur [0,pi]x[0,pi] Z=sin(Y.^2+X)-cos(Y-X.^2); % encore loprateur <<.^>> subplot(2,2,1); mesh(Z); subplot(2,2,2); mesh(Z); hidden off; subplot(2,2,3); surf(Z); subplot(2,2,4); surf(Z); shading interp
2 50 20 40
60
2 50 20 40
60
2 50 20 40
60
2 50 20 40
60
Guide M ATLAB
13
% % % % %
ouverture du fichier criture de caractres, dentiers et de rels attention la transpose fermeture du fichier
Les caractres de contrle pour le format de limpression sont identiques ceux que lon retrouve dans le langage C. Dans lexemple ci-dessus, \t reprsente une tabulation, \n un saut de ligne, %s une chane de caractres, %nd imprime un entier sur n caractres, %m:nf un rel sur m caractres avec n caractres aprs le point et %m:ne fait la mme chose en notation scientique. Comme la plupart des commandes M ATLAB, fprintf peut tre utilise sous forme vectorielle. Vous tes donc encourags utiliser cette fonctionnalit dans vos programmes pour quils sexcutent plus rapidement.
Dernires remarques
Nous avons vu plus haut que la commande type nous permet dafcher le contenu dun chier. Les commandes dir et ls afchent le contenu dun rpertoire et cd nous permet de changer de rpertoire. Nous pouvons aussi passer des commandes directement au systme dexploitation en les prcdant du caractre ! linvite M ATLAB. Finalement, la commande path nous permet dajouter un chemin vers les chiersM que nous voulons utiliser. Par exemple, si nous avons des chiers M ATLAB sur une disquette :
>> path(path,A:); >> path(path,/mnt/floppy); % sur DOS % sur RedHat Linux, par exemple
Ces chemins seront alors ajouts la variable path qui contient tous les chemins.
Guide M ATLAB
14
Catalogue de commandes
Disponible bientt.
Guide M ATLAB
15
Bibliographie
Les livres
M ATLAB Guide, par Higham et Higham Mastering M ATLAB 7, par Hanselman et Littleeld
Les guides
M ATLAB : Guide dapprentissage, par Cloutier, Gourdeau et Leblanc (disponible COOPOLY) An Introduction to M ATLAB, par David F. Grifths Introduction to M ATLAB, par Graeme Chandler A Practical Introduction to M ATLAB, par Mark S. Gockenbach Introduction to M ATLAB, par Jeffery Cooper M ATLAB Array Manipulation Tips and Tricks, par Peter J. Acklam