Académique Documents
Professionnel Documents
Culture Documents
Cours Matlab
1 Introduction
MAT (rix) LAB (oratory) est un logiciel puissant dot la fois d'un langage de programmation haut niveau et d'outiils ddis au calcul numrique et la visualisation numrique. Dvelopp en C par la socit Mathworks (http://www. mathworks.com/), Matlab tait initialement destin faire du calcul matriciel simplement. Actuellement, Matlab recouvre d'autres domaines d'applications de l'informatique scientifique :
visualisation graphique 2D et 3D rsolution d'quations aux drives partielles optimisation contrle de procds traitement du signal traitement de l'image logique floue rseaux de neurones
Untitled
le noyau Matlab, qui comprend : 1. l'environnement de travail offrant pluiseurs facilits pour la manipulation des donnes. Son interprteur permet de tester rapidement ses propres programmes Matlab. 2. le systme graphique Matlab (interfaces homme-machine, graphiques, images, animations). 3. le langage de programmation Matlab. 4. une librairie de fonctions mathmatiques Matlab. 5. un systme d'interfaage faciltant l'excution de programmes C ou Fortran sous Matlab. une collection de toolboxes (botes outils) regroupant un ensemble de fonctions spcifiques un thme.
help : fournit la liste des catgories de fonctions installes. help fonction/commande : indique comment utiliser une fonction. helpwin : ouvre une fentre permet d'accder facilement aux aides des diffrentes commandes. doc fonc : affiche la documentation HTML de la fonction fonc (cette fonction doit appartenir au noyau Matlab). lookfor mot-cl : recherche dans toutes les aides le mot-cl donn en argument et retourne la ligne contenant ce mot en prcisant la fonction correspondante. which fonc : retourne le chemin du fichier de dclaration de la fonction fonc (lorsque celle-ci est dcrite sous la forme d'un fichier avec l'extension .m) dir('rep') : liste tous les fichiers prsents dans le rpertoire pass en argument . what('rep') : liste tous les fichiers Matlab prsents dans le rpertoire rep en prcisant le type de fichier.
Untitled
type fonc : affiche le code de la fonction fonc ( condition que la fonction soit dcrite dans un fichier m). dbtype fonc : identique la fonction type en indiquant des numros de ligne. exist('A') : permet de savoir si une fonction Matlab, une variable Matlab ou un rpertoire existe.
Pour contrler le dfilement des pages d'aide, il est souvent pratique d'utiliser la commande more on/off. Matlab fournit galement la possibilit d'excuter des commandes unix directement sous l'interprteur :
les commandes cd, ls, pwd et mkdir sont analogues celles connues sous UNIX. unix('unix_com') : excute une commande UNIX et affiche une valeur de retour (0 si la commande unix est licite). !unix_com : excute juste la commande UNIX unix_com.
Untitled
who : liste le nom des variables courantes. whos : prcise pour chaque variable courante : son nom, sa dimension, sa classe.
La commande clear var permet d'effacer la variable var de l'environnement de travail. La commande clear all permet d'effacer toutes les variables de l'environnement de travail. Plusieurs commandes permettent de sauvegarder / restaurer des variables dans l'environnement de travail :
save nomf : sauve toutes les variables de l'environnement de travail dans le fichier nomf.mat (.mat est l'extension de fichier par dfaut). save nomf X1 X2 ... Xn : sauve les variables X1 X2 ... Xn dans le fichier nomf. mat. load nomf : restaure dans l'environnement de travail toutes les variables stockes dans nomf.mat. diary nomf : partir du moment o cette commande est tape, l'ensemble des instructions effectues dans la session Matlab sont enregistres dans le fichier nomf.mat et ce jusqu' ce que les commandes exit (de sortie de session) ou diary off soit excute.
pi : 3.14159... eps : 2.2204e-16 par dfaut. C'est la distance entre deux rels informatiques conscutifs. Cette valeur est modifiable. Cette valeur est utilise au niveau des tests d'arrt des algorithmes. Inf (Infinite) : nombre infini. C'est par exemple le rsultat de l'opration 1/0. NaN (Not a Number) : n'est pas un nombre. C'est par exemple le rsultat de l'opration 0/0. realmin / realmax : plus petit /plus grand nombre flottant.
Untitled
short (valeur par dfaut) : reprsentation d'un nombre rel sous forme fixe avec 4 chiffres de prcision aprs la virgule (x....x.y1y2y3y4). long : reprsentation d'un nombre rel sous forme fixe avec 14 chiffres de prcision aprs la virgule. short e : reprsentation d'un nombre rel en notation scientifique scientifique avec 4 chiffres de prcision aprs la virgule (x...x.y1y2y3y4e+z1z2z3). long e : reprsentation d'un nombre rel en notation scientifique avec 14 chiffres de prcision aprs la virgule. short g : choisit la meilleure reprsentation entre short et short e. long g : choisit la meilleure reprsentation entre long et long e. format hex : reprsentation d'un nombre sous forme hexadcimale. format rat : reprsentation d'un nombre au format rationnel (x/y).
Untitled
1 4 2
1 0 5
3 6 -1
6.2 Oprations lmentaires Les oprations d'addition, de soustraction, de multiplications, de tranposition de matrices, d'addition/soustraction/multiplication d'un scalaire une matrice se font de manire trs intuitive :
>> x=[3 6 -2]; y=[7 2 4]; >> x+y ans = 10 >> x' ans = 3 6 -2 >> A*x' ans = 8 2
Untitled
Lorsqu'un oprateur est prcd du caractre ., l'opration s'effectue lment par lment.
>> A*B ans = -2 -2 3 4 6 4 0 -4 3
6.3 Oprateur de mise en colonne L'oprateur : permet de transformer toute matrice en un vecteur colonne
>> A A= 1 4 2 1 0 5 3 6 -1
>> A(:)'
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (7 sur 47) [26/05/2010 13:51:32]
Untitled
ans = 1 4 2 1 0 5 3 6 -1
6.4 Extraction /extension d'une partie de matrice L'oprateur : appliqu une dimension d'une matrice permet d'extraire des parties de matrice
>> A(:,2:3) %extraction des colonnes 2 3 ans = 1 0 5 3 6 -1
La suppresssion d'une colonne (resp. ligne) se fait par substitution avec une colonne (resp. ligne) vide.
>> A(2,:)=[] %suppression de la 2ieme ligne A= 1 2 1 5 3 -1
Untitled
2 3
5 4
>> length(A) %plus grande dimension de A ans = 3 >> ndims(A) % nombre de dimensions de A ans = 2
6.5 Affichage d'une matrice Les commandes disp, printmat et pltmat permettent d'afficher une matrice :
disp(A) affiche la matrice A sans son nom dans l'interprteur de commandes Matlab. printmat (A) affiche la matrice A en indiquant les numros de ligne. pltmat(A) affiche la matrice A dans une fentre spare. Il est possible de
Untitled
7 9 12
6.6 Transformation et manipulation des matrices Les commandes fliplr (respectivement flipud) ralisent un retournement des colonnes (respectivement des lignes). La commande flipdim effectue un retournement de la matrice suivant une dimension prcise. Ainsi, pour une matrice 2D appele A, flipdim(A,1) est quivalent flipud(A) et flipdin(A,2) est quivalent fliplr(A,2).
>> fliplr(A) ans =
Untitled
7 9 12
1 5 4
1 2 3
La commande permute rordonne les dimensions d'une matrice suivant l'ordre spcifi par un vecteur :
>> permute(A,[2 1]) ans =
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (11 sur 47) [26/05/2010 13:51:32]
Untitled
1 1 7
2 5 9
3 4 12
La commande reshape(x, m, n) forme une matrice m*n partir des lments de x. x doit avoir m*n lments :
>> x=[1 2 3 4 5 6]; reshape(x,2,3) ans = 1 2 3 4 5 6
La commande sub2ind(size, i1, ..., in) retourne l'indice de l'lment (i1, ..., in) d'une matrice dont les dimensions sont prcises par le tableau size. Sa fonction rciproque est ind2sub(size, index).
>> sub2ind([3 3], 1, 2) ans = 4 >> [i,j]=ind2sub([3 3], 4) i= 1
j= 2
Enfin, end fait rfrence au dernier indice d'une matrice suivant la dimension indique :
>> A(end,end) ans =
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (12 sur 47) [26/05/2010 13:51:32]
Untitled
6.7 Fonctions lmentaires sur les matrices Matlab possde plusieurs fonctions (prsentes dans datafun) agissant directement sur les vecteurs ou les colonnes de matrices :
min, max : valeurs minimale et maximale des lments sum : somme des lments prod : produit des lments cumsum : somme cumule des lments cumprod : produit cumul des lments mean : valeur moyenne des lments median : valeur mdiane des lments std, var : cart-type et variance des lments sort : tri des lments par ordre croissant
Untitled
1 2 6
1 7 5 63 20 756
Pour obtenir la somme de tous les lments de la matrice A, on peut soit appliquer deux fois la fonction sum, soit appliquer une fois la fonction sum la matrice A mise en colonne.
>> sum(sum(A)) ans = 44 >> sum(A(:)) ans = 44
6.8 Gnration de matrices particulires Le rpertoire elmat propose plusieurs fonctions de gnration de matrices lmentaires ou spcifiques. Voici tout d'abord les fonctions de gnration de matrices lmentaires :
zeros : cre une matrice nulle ones : cre une matrice dont tous les lments valent 1 eye : cre une matrice identit rand : cre une matrice dont les lments sont tirs alatoirement entre 0 et 1 randn : cre une matrice dont tous les lments sont distribus suivant la loi normale N(0,1) repmat : permet de crer des matrices blocs dont chaque bloc est identique celui spcifi en argument
Untitled
0 0
1 0
0 1
Plus de 60 fonctions sont prvues pour la cration de matrices plus spcifiques. Ces fonctions sont dtailles la fin de l'aide en ligne obtenue par la commande "help elmat". Les fonctions listes par la commande "help gallery" peuvent tre dtailles l'aide de la commande "help private/function" (par exemple "help private/cauchy" pour les matrices de Cauchy).
>> compan([1 2 3]) % Calcule la matrice dont le polynome caractristique est X^2+2X+3 ans =
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (15 sur 47) [26/05/2010 13:51:32]
Untitled
-2 1
-3 0
>> gallery('invol',4) % Calcule une matrice involutive d'ordre 4 (ie tq ans*ans=eye(4)) ans = -4.0000 -120.0000 240.0000 -140.0000 0.5000 20.0000 -45.0000 28.0000 0.3333 0.2500 15.0000 12.0000 -36.0000 -30.0000 23.3333 20.0000
6.9 Oprations propres au calcul matriciel L'ensemble des oprations lmentaires sur les matrices peuvent tre effectues par Matlab :
rank(A) : rang de A det(A) : dterminant de A trace(A) : trace de A expm(A), logm(A), sqrt(A) : calcul de l'exponentielle, du logarithme ou de la racine carre de A. De manire gnrale, on peut appliquer une fonction fun une matrice via la fonction funm : funm(A,'fun') (exemple : funm(A, 'sin') calcul le sinus de la matrice A).
Matlab permet d'effectuer la plupart des dcompositions et factorisations de matrices grce, entre autre, aux fonctions suivantes :
chol(A) : factorisation de Cholesky. Pour A dfinie positive, cette fonction calcule une matrice R triangulaire suprieure vrifiant R'*R=A. [R, P] = cholp(A) : factorisation de Cholesky avec pivotage. Pour A dfinie positive, cette fonction calcule deux matrices R et P tel que R'*R=P'*A*P. [L, U] = LU(A) : dcomposition LU. Cette fonction calcule une matrice L triangulaire suprieure et une matrice U triangulaire infrieure tel que A=L*U. [Q, R] = QR(A) : dcomposition QR. Calcule une matrice Q unitaire (Q'*Q=Id) et une matrice R triangulaire suprieure vriafiant A=Q*R. [U, T] = schur(A) : dcomposition de Schur. Calcule 2 matrices T et U telles que A=U*T*U' o T est une matrice de Schur (matrice triangulaire suprieure
Untitled
dont la diagonale est compose des valeurs propres de A) et U est une matrice unitaire (U*U'=Id) [P, H] = hess(A) : forme Hessenberg de A. Calcule 2 matrices H et P vrifiant X=P*H*P'. H est nulle en-dessous de la premire sous-diagonale, possde les mmes valeurs propres que A et est tridiagonale si A est symtrique. P est unitaire : P'*P=Id. [U, R, V] = cod(A) : dcomposition orthogonale de A. Fournit 3 matrices U, R et V vrifiant A=U*T*V o U et V sont unitaires et T=[R 0;0 0], R tant triangulaire suprieure inversible avec dim(R)=rang(A). [U, S, V] = svd(A) : dcomposition en valeurs singulires. Dcompose A sous la forme A=U*S*V' o S est une matrice diagonale contenant les valeurs singulires de A et U, V sont toutes deux des matrices unitaires.
Matlab fournit galement de nombreuses fonctions permettant de rsoudre des problmes d'inversion matricielle :
cond(A,N) : calcule le conditionnement de la matrice A pour la norme N ( savoir N(A)*N(A-1)). N peut valoir 1, 2 ou inf. Plus le conditionnement est grand, plus le systme linaire sera instable. La fonction norm(A, N) calcule la norme N de A pour les mmes valeurs de N. condest(A) : calcule un conditionnement de A toujours compris entre 0 et 1. inv(A) : calcule l'inverse de la matrice carre A si elle existe. Ainsi, la solution X du systme linaire A*X=B se calcule en faisant inv(A)*B, ce qui est aussi quivalent A\B. X=lsqnonneg(A,B,X0) : rsout, par la mthode des moindres carrs, le problme d'optimisation min|AX-B|2 soumis la contrainte X>=0 en choisissant comme vecteur initial X0.
X=cgs(A,B) : rsout, par la mthode des gradients conjugus, le problme d'optimisation min|AX-B|2. Les fonctions bicg (mthode des gradients biconjugus), gmres (mthode du rsidu minimal gnralis), qmr (mthode du rsidu quasi-minimal), pcg (mthode des gradients conjugus prconditionns). X=pinv(A) : calcule la pseudo-inverse X de A. X possde les mmes dimensions que A' et vrifie A*X*A = A, X*A*X = X avec A*X et X*A hermitiennes.
Les problmes de recherche de valeurs et vecteurs propres sont effectus l'aide de la fonction eig :
Untitled
[V, D] = eig(A) : fournit la matrice diagonale D des valeurs propres et la matrice V des vecteurs propres de A. poly(A) : renvoit un vecteur de dimension length(A)+1 dont les lments sont les coefficients du polynme caractristique de A (le 1er coefficient est celui de la plus grande puissance).
6.10 Les matrices creuses La bote outils sparfun comporte un ensemble de fonctions sur les matrices creuses 1 ou 2 dimensions. En effet, lorsqu'une matrice possde beaucoup d'lments nuls (la matrice est dite creuse), il est intressant d'utiliser une reprsentation condense de ce type de matrice afin de diminuer la place mmoire occupe, le nombre d'oprations et le temps de calcul. La fonction de conversion d'une matrice pleine m*n en matrice creuse est sparse(i, j, s, m, n) avec i, j indices lignes et colonnes des lments non nuls et s valeurs des lments non nuls. La fonction rciproque (passage de la reprsentation creuse la reprsentation pleine d'une matrice) se fait grce la fonction full.
>> i=[1 3 2 2] i= 1 3 2 2
>> j=[1 1 2 3] j= 1 1 2 3
>> s=[1 2 3 4] s= 1 2 3 4
>> A=sparse(i,j,s,3,3)
Untitled
La commande issparse permet de savoir si une matrice admet une reprsentation pleine ou creuse :
>> issparse(A) ans = 1 >> issparse(fullA) ans = 0
Des fonctions permettent d'extrare les informations propres aux lments nuls et non nuls d'une matrice creuse :
[i, j, s] = find(A) : retourne les vecteurs d'indices i et j des lments non nuls ainsi que la valeur de ces lments dans le vecteur s. find(A) retournera juste un vecteur d'indices des lments non nuls de A. nnz(A) : donne le nombre d'lments non nuls de A. nonzeros(A) : donne le vecteur des lments non nuls de A. spy(A) : affiche sur un graphique 2D la rpartition des lments non nuls.
>> [i,j,s]=find(A)
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (19 sur 47) [26/05/2010 13:51:32]
Untitled
i= 1 3 2 2
j= 1 1 2 3
Untitled
1 2 3 4 >> spy(A)
De la mme manire que pour les matrices pleines, plusieurs fonctions de gnration de matrices sont prprogrammes :
speye(m, n) : gnre une matrice identit de taille m*n. sprand(m, n, d) : gnre une matrice creuse avec approximativement m*n*d lments non nuls suivant la loi uniforme sur [0;1] qui sont rpartis alatoirement. sprandn(m, n, d) : gnre une matrice creuse avec approximativement m*n*d lments non nuls suivant la loi normale N(0,1) qui sont rpartis alatoirement. sprandsym(n, d) : gnre une matrice creuse symtirque avec approximativement n*n*d lments non nuls, suivant la somme d'une ou plusieurs variables alatoires. Les lments non nuls sont rpartis alatoirement.
Untitled
0 0
La fonction spfun permet d'appliquer une fonction tous les lments non nuls d'une matrice creuse : spfun('fun', A).
>> full(A) ans = 1 0 2 0 3 0 0 4 0
Untitled
7.3891
Les algorithmes classiques rencontrs en algbre linaire ont galement t programms : rsolution de systmes linaires, recherche de valeurs et vecteurs propres, calcul de normes, du conditionnement d'une matrice.
Untitled
>> z1/z2 ans = -0.5000 + 0.5000i >> z1^2 ans = -8.0000 + 6.0000i >> 2^z1 ans = -0.9740 + 1.7468i >> z1^z2 ans = -7.5542e+02 - 1.2709e+03i >> log(z1) ans = 1.1513 + 1.2490i >> sqrt(z1) ans = 1.4426 + 1.0398i
abs(z) : renvoit le module du complexe z. angle(z) : renvoit la phase (en radians) du complexe z.
Untitled
real(z), imag(z) : renvoit respectivement les parties relles et imaginaires du complexe z. conj(z) : renvoit le conjugu de z. complex(a,b) : renvoit le complexe a+ib.
compass(vz) : reprsentation graphique des complexes du vecteur vz en choisissant pour origine de chacun de ces complexes l'origine du rpre.
cplxgrid(n) : renvoit une matrice (n+1)*(2n+1) de complexes permettant de subdiviser le pav [-1,+1]*[-1,+1] de manire quasi-uniforme. cplxmap(z,f(z)) : fonction de trac d'une fonction complexe
Untitled
>> plot(s(5,:))
>> z=cplxgrid(20); >> cplxmap(z,sqrt(z)) % trac de la fonction sqrt(z) sur le pav [-1,+1]*[-1,+1]
Untitled
cplxroot(n) : trac de la fonction f(z) = z^(1/n) avec n>0 sur le pav [-1,+1]*[1,+1]
Untitled
length(ch) : retourne la longueur de la chane ch. disp(ch) : affiche une variable de type chane de caractres. abs(ch) ou double(ch) : renvoit, sous forme de vecteur ligne, les codes ASCII de chaque caractre de la chane.
Untitled
setstr(vc) ou char(vc) : fonction rciproque de abs ; retourne la chane de caractres pour lesquels les codes ASCII sont ceux du vecteur ligne vc. [ch1, ch2, ..., chn] : concatnation de n chanes de caractres (similaire strcat sauf que strcat ignore les caractres blancs en fin de chacune des chaines chi). deblank(ch) : supprime les ventuels blancs figurant en fin de chane de caractres.
>> ch1='presentation' ch1 = presentation >> length(ch1) ans = 12 >> vc=abs(ch1) vc = 112 114 101 115 101 110 116 >> setstr(vc) ans = presentation >> disp([ch1,' de ','Matlab']) presentation de Matlab >> ch2='3 blancs a la fin '; >> disp(['Taille avec les blancs a la fin=',num2str(length(ch2))]); Taille avec les blancs a la fin=20 >> disp(['Taille sans les blancs a la fin=',num2str(length(deblank(ch2)))]); Taille sans les blancs a la fin=17 97 116 105 111 110
Untitled
isstr(ch) / ischar(ch) : renvoit 1 si ch est une chane de caractres et 0 sinon. isletter(l) : renvoit 1 si l est une lettre de l'alphabet et 0 sinon. isspace(ch) : renvoit 1 si ch est le caractre blanc et 0 sinon. strcmp(ch1, ch2) : renvot 1 si les deux chanes ch1 et ch2 sont identiques et 0 sinon.
lower(ch) : crit tout le contenu de la chane ch en minuscules upper(ch) : crit tout le contenu de la chane ch en majuscules
>> lower('logiciel MATLAB') ans = logiciel matlab >> upper('logiciel MATLAB') ans = LOGICIEL MATLAB
eval(ch) : value les commandes, oprations de la chane de la chane. Une erreur est retourne si la chane ne peut tre interprte.
strrep(ch1, ch2, ch3) : substitue toutes les occurences de la chane ch2 dans la chane ch1 par la chane ch3.
Untitled
[mot1, reste_chaine] = strtok(ch) : renvoie le premier mot (mot1) et le reste de la chane ch. l = findstr(ch1, ch2) : l est le tableau des indices auxquels commencent les occurences de ch1 dans ch2.
>> strrep('logiciel MATLAB', 'logiciel', 'super logiciel') ans = super logiciel MATLAB >> [mot1, reste] = strtok('super logiciel MATLAB') mot1 = super
strcat(ch1, ch2, ..., chn) : concatne les n chanes de caractres chi en supprimant les blancs de fin de chane.
', ' scientifique', ' MATLAB')
Cette bote outils inclut galement les conversions nombre<->chane de caractres et conversions de nombre d'une base une autre (bases admises : binaire, dcimale et hexadcimale ou base quelconque entre 2 et 36) :
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (31 sur 47) [26/05/2010 13:51:32]
Untitled
>> dec2hex(12) ans = C >> dec2bin(12) ans = 1100 >> dec2base(12,4) ans = 30
9 Les polynmes
L'essentiel des fonctions sur les polynmes figure dans la bote outils polyfun. Gnration d'un polynme partir de ses coefficients rangs par ordre de dcroissance de leur puissance :
>> p=[2 0 3] % p(x)=2x+3 p= 2 0 3
Untitled
Multiplication de polynmes :
>> conv(poly([1 2]), poly([3 4])) % generation du polynome (x-1)(x-2)(x-3)(x-4) ans = 1 -10 35 -50 24
Division de polynmes :
>> P=[1 2 3]; >> S=[4 5 6]; >> [Q,R]=deconv(P,S) % Calcul du quotient Q et du reste R : P=QS+R Q= 0.2500
Untitled
R= 0 0.7500 1.5000
K= 0.2500
Interpolation polynomiale :
polyfit(x, y, n) : Retourne le polynme p d'ordre n respectant au mieux les conditions yi=p(xi) au sens des moindres carrs.
Untitled
interp1(x, y, z, 'methode') : interpolation aux points d'une courbe donne par les donnes (xi, yi). Plusieurs mthodes sont disponibles : plus proche voisin, linaire, spline cubique, cubique. interp2, interp3, interpn : mme fonction que interp1 mais pour une interpolation 2D, 3D ou n dimensions.
fzero(func, x0) : renvoit la valeur d'annulation de la fonction func la plus proche de x0. func est soit une fonction mise sous la forme d'un fichier en extension .m, soit une fonction en ligne.
>> fzero('sin(x)+0.5', 2) Zero found in the interval: [0.18981, 3.8102]. ans = 3.6652
x=fminsearch(func, x0) : minimisation de fonction non linaire multidimensionnelle et sans contraintes. Retourne la valeur de x la plus proche de x0 minimisant la fonction func. Si x0 est un vecteur colonne, x sera galement un vecteur colonne contenant les valeurs de minimisation pour les diffrentes valeurs de x0. x=fminbnd(func, x1, x2) : minimisation de fonction non linaire multidimensionnelle sous les contraintes x1<x<x2. Une seule solution est renvoye.
options = optimset('param1',value1,'param2',value2,...)
Untitled
Intgration numrique :
q = quad('func', a, b) / q= quad8('func', a, b) : integration numrique de la fonction monodimensionnelle 'func' entre a et b avec une mthode d'ordre plus ou moins leve. q = dblquad('func', a1, a2, b1, b2, 'methode') : intgration numrique de la fonction bidimensionnelle 'func' dans le pav [a1, b1]*[a2, b2] par une mthode d'ordre plus ou moins leve (mthode peut valoir quad ou quad8).
ode45, ode23, ode113, ode23t, ode15s, ode23s, ode23tb : mthodes de rsoltuion de systmes diffrentiels. Ces fonctions prennent en argument la fonction dcrivant le systme (fonction qui dpend du temps t et de y) qui est dfinie dans un fichier .m.
Exemple : Extrait du fichier sys.m dcrivant le systme (x'=-2y, y'=x) : function yp=sys(t,y) yp=[-2*y(2),y(1)]';
>> >> >> >> >> t0=1; tfinal=20; y0 = [10 3]'; [t,y]=ode23('sys',[t0 tfinal],y0); plot(t,y)
Untitled
De la mme manire que pour les fonctions d'optimisation, il est possible de rgler les paramtres de rsoltuion d'un systme l'aide de la fonction odeset. Si par exemple, on tape les commandes options = odeset
('OutputFcn','odeplot') puis ode23('sys',[t0, tfinal], y0, options), on verra le systme voluer graphiquement chaque pas de
temps. Les options odephas2 et odephas3 passes la fonction odeset permettent de visualiser le portrait de phase des 2 ou 3 premires composantes chaque pas de temps. L'option odeprint passe la fonction odeset affiche l'cran les valeurs de la solution chaque pas de temps.
11 Programmer en MATLAB
1. Les fichiers Matlab : il en existe principalement 5 sortes :
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (37 sur 47) [26/05/2010 13:51:32]
Untitled
r
Les fichiers de description d'une fonction (ils possdent l'extension .m). La premire ligne commence par : function y=nom_de_la_fonction (liste_des_parametres) si la fonction renvoit une seule valeur. function [y1, ..., yn]=nom_de_la_fonction (liste_des_parametres) si la fonction renvoit n valeurs y1, ..., yn. Les fichiers script (ils possdent galement l'extension .m) : ils sont composs d'une succession de commandes Matlab. Les fichiers de donnes au format texte (avec l'extension .dat) : la commande load var.dat provoque la cration de la variable var dont le contenu est celui du fichier var.dat. Les fichiers binaires au format .mat : ce sont des fichiers de stockage des variables de l'espace de travail (remplissage du fichier avec la fonction save, chargement des variables avec la fonction load). Les fichiers MEX : fichiers gnrs partir d'un code C ou Fortran 77 afin que ce code soit directement interprt par Matlab.
Pas de distinction minuscules / majuscules. Les 19 premiers caractres sont significatifs. Toutes les variables d'un fichier en extension .m sont par dfaut locales l'espace de travail. On prcise que la porte d'une variable est globale et est accessible dans un fichier .m ou dans l'espace de travail en indiquant localement l'instruction global VAR (par convention, les variables globales sont en majuscules). Les variables nargin et
fonction. Elles prcisent respectivement le nombre d'arguments d'appel et le nombre d'arguments de retour de la fonction. De mme, les variables varargin et varargout sont les tableaux contenant la valeur des arguments d'appel et de retour.
1. Les commentaires :
Untitled
L'instruction for
FOR var=val_ini:pas:val_fin
instructions
END
r
L'instruction while
WHILE expression_logique
instructions
END
r
L'instruction if
IF expression_logique_1
instructions_1 ELSEIF expression_logique_2 ... instructions_2
ELSE
instructions_n
END
r
L'instruction switch
SWITCH switch_expr
CASE case_expr statement, ..., statement CASE {case_expr1, case_expr2, case_expr3,...} statement, ..., statement ...
OTHERWISE
END statement, ..., statement
switch_expr et les case_expr peuvent tre des scalaires ou des chanes de caractres. Un seul CASE peut tre excut, auquel cas les instructions suivantes sont celles qui suivent le END du switch.
http://www.ensa-agadir.ac.ma/gpee/download/Matlab.htm (39 sur 47) [26/05/2010 13:51:32]
Untitled
TRY
statement, ..., statement
CATCH
statement, ..., statement
END
Normalement, seules les instructions entre le TRY et le CATCH sont excutes. Cependant, si une erreur survient lors de l'excution d'une de ces instructions, ce sont les instructions entre le CATCH et le END qui seront excutes. break : permet de sortir de la boucle la plus proche. r return : permet soit de revenir au fichier M appelant, soit de revenir dans l'interprteur de commandes. r error('MSG') : affiche le texte MSG, met un "bip" et interrompt l'excution du programme. r eval(chaine) : Excute les instructions d'une chane de caractres. r eval(chaine1, chaine2) : Excute les instructions de chaine1. Si aucune erreur ne se produit, retourne au programme appelant. Sinon, excute les instructions de chaine2. r T=evalc(chaine) : identique la fonction eval sauf que les sorties sur la fenetre de commandes sont renvoyes dans le tableau T. 3. Les instructions de saisie et d'affichage au clavier : r disp(X) : affiche le contenu du vecteur X. X peut tre une chane de caractres. r S=printf(formats, variables) : renvoit le contenu d'une liste de variables formattes sous la forme d'une chane de caractres. r R=input(message) : affiche message et atteint la saisie d'une donne, qui sera affecte dans R. r A=sscanf(string, format) : lit des variables a partir d'une chane de caractres, les convertit en utilisant les formats spcifis et affecte le rsultat dans le vecteur A. 4. Les entres / sorties : Les fonctions d'entres / sorties sous Matlab sont analogues celles du C. r FID=fopen(nom_fichier, mode_d_ouverture) : ouverture d'un
r
Untitled
fichier. r fclose(FID) : fermeture du fichier ayant FID pour descripteur. r fprintf(FID, 'formats', liste_variables) : ecriture de donnes formattes dans un fichier. r [A, compteur]=fscanf(FID, format, nb_lus) : lecture dans un fichier d'une srie de donnes. Les valeurs lues sont affectes dans le vecteur colonne A. nb_lus est un argument facultatif qui reprsente le nombre d'lments que l'on veut lire dans le fichier. Si nb_lus est affect inf, tous les lments du fichier seront avec le format dcrit. compteur est galement optionnel et reprsente le nombre d'arguments effectivement lus dans le fichier. r fseek(FID, offset, origine) : dplace le pointeur de fichier de "offset" octets partir d'origine (qui vaut -1 / 0 / 1 suivant que l'origine est le dbut de fichier / la position courante du fichier / la fin du fichier). r position=ftell(FID) : retourne la position courante du fichier (en nombre d'octets) partir du dbut de fichier. r frewind(FID) : positionne le pointeur de fichier sur le premier octet. 5. Lecture de donnes dans un fichier texte : Supposons qu'un fichier texte "donnees3d.dat" contienne 3 colonnes de n valeurs, la commande "load donnes3d.dat" crera une matrice donnees3d de taille n*3 contenant les valeurs du fichier.
12 Les graphiques 2D
La commande plot(x, y, s) trace des courbes ou nuages de points partir de 2 vecteurs de dimension identique (y en fonction de x). s est une chane de 1 3 caractres prcisant la couleur de la courbe, le symbole de reprsentation d'un point, le type de trait utilis pour le trac. Les fonctions semilogx / semilogy / loglog sont analogues la fonction plot sauf qu'une chelle logarithmique (en base 10) est ulilise pour l'axe des x / l'axe des y / l'axe des x et des y. polar(rho, theta, s) dessine la courbe en coordonnes polaires rho=f(theta). fplot(string, [Xmin Xmax]) dessine une fonction dcrite dans une chane de caractres entre Xmin et Xmax. (exemple : fplot('sin(1./x)',[1 2])).
Untitled
Remarque : Pour dessiner un nuage de points, il suffit de spcifier juste un marqueur au niveau de s Exemple : plot(x,y,'+') Commandes d' "habillage" de graphiques (communes aux graphiques 2D et 3D) :
axis([Xmin Xmax Ymin Ymax]) fixe les bornes des axes. grid on / off ajoute ou enlve des grilles dans les plans des axes. box on / off permet d'encadrer ou non un cadre dans chaque plan combinant plusieurs axes. hold on / off permet d'autoriser ou de supprimer la superposition de graphiques. xlabel('texte') / ylabel('texte') / zlabel('texte') ajoute une lgende un axe. Ces commandes combines la commande texlabel permettent d'obtenir une lgende crite au format TeX. Essayer xlabel(texlabel('x^2+y^2')) pour tester. title('texte') ajoute un texte en haut du graphique. text(x,y,'texte') ou text(x,y,z,'texte) positionne un texte de documentation d'une courbe au point de coordonnes (x,y) ou (x,y,z). gtext('texte') : analogue la fonction text sauf que le point est choisi la souris. legend('leg1', 'leg2', ...) : cre une bote de lgende pour les courbes traces. plotedit on / off : active ou dsactive un mode de modification du graphique. Si plotedit est mis on, il est possible de visualiser les proprits des objets, d'ajouter des objets. Pour cela, utiliser le bouton "Tools" de la fentre.
Il est possible de dessiner plusieurs graphiques dans une mme fentre l'aide de la fonction subplot :
subplot(m, n, num) : se positionne sur le graphique de numro num sachant que la fentre est subdivise en une matrice m*n de graphiques.
print -format nom.fmt : sauvegarde la fentre courante sous la forme d'une image au format indiqu.
Untitled
sur la fentre puis en tapant la commande gcf (get current figure). Pour crer une figure ayant h comme numro de handle, il suffit de taper figure (h). Si la fentre existe dj, cette fonction met en avant la fentre ayant num comme numro de handle. Pour effacer le graphe de la figure courante, taper clf. La commande close(h) supprime la figure ayant h comme numro de handle. get(h) permet d'obtenir la liste des proprits de la fentre ayant h pour numro de handle.
ezplot('f(x,y)') : fonction de trac d'une courbe implicite f(x,y)=0. comet(x,y) : fonction identique plot sauf que les segments de droite sont affichs au fur et mesure de manire crer une animation. bar(x, y) o nb_lignes(y)=nb_colonnes(x) affiche les m colonnes de y en fonction de x avec des barres verticales centres sur les valeurs du vecteur x. La fonction bar3(x, y) donne le mme rsultat mais en 3 dimension. hist(x) : trace un histogramme de frquence des valeurs de x. pie(x) : trace un camembert des valeurs de x. pie3(x) donne le mme rsultat avec un camembert 3D. stem(x, y) : trace y en fonction de x sous la forme de fonctions de Dirac. stairs(x, y) : trace y en fonction de x sous la forme de fonctions en escalier. fill(x,y) : fonction de trac d'un polygone en fonction des points spcifis par les vecteurs x et y.
13 Les graphiques 3D
Principales fonctions de trac 3D :
plot3(x, y, z, s) permet d'afficher des nuages de points ou de relier une srie de points (dont les coordonnes sont stockes dans les vecteurs x, y et z) avec des lignes. Au niveau du contenu de s, les mmes conventions que la fonction plot sont adoptes. [X, Y]=meshgrid(x, y) gnre deux matrices X et Y partir des vecteurs x et y.
Untitled
X et Y sont ensuite utiliss dans les fonctions de trac de surfaces. Si x et y sont de taille respective m et n, X et Y sont des matrices n*m. Chaque ligne de X vaut x et chaque colonne de Y vaut y. surf(X, Y, Z, C) dessine la surface dfinie par quatre matrices. Les coordonnes des points sont stockes dans X, Y et Z et C est une matrice d'chelle de couleurs utilise pour colorer une facette de la surface. Si C n'est pas spcifi, C=Z. mesh(X, Y, Z, C) : identique surf sauf que l'intrieur des facettes n'est pas colore.
hidden on / off : montre / cache les parties caches d'une surface. shading flat / interp /faceted : supprime le quadrillage / supprime le quadrillage et effectue un dgrad de couleurs uniforme / affecte une seule couleur sur une facette ( utiliser avec surf). brighten nb (-1 <= nb <= 1) : eclaircit le graphique si nb >=0 et l'assombrit sinon. colordef white / black : axes noirs sur fond blanc / axes blancs sur fond noir. colormap(map) : affecte une table des couleurs (map), matrice n lignes et 3 colonnes. Chaque ligne est compose de 3 valeurs comprises entre 0 et 1 et formant une couleur RGB. Une correspondance est tablie entre les cotes extremes du graphique et les premire et dernire couleur de la table des couleurs. Pour avoir la liste des cartes disponibles, taper help graph3d.
Obtention des coordonnes de la normale d'une surface : [Nx,Ny,Nz]=surfnorm(x,y, z) Quelques autres fonctions de trac de graphiques 3D :
contour(x, y, z) : trace sur un plan les lignes de niveau de la surface (x, y, z). surfc(x, y, z) / meshc(x, y, z) sont quivalents surf(x, y, z) + contour(x, y, z) / mesh(x, y, z) + contour(x, y,z). clabel permet d'tiqueter des courbes de niveau.
Vecteurs et de volumes : les fonctions figurent dans la partie "Volume and vector visualization" du help specgraph3d.
Untitled
14 Images et animations
La toolbox specgraph contient les fonctions lmentaires de manipulation des images :
image(C) ou imagesc(C) : cre une image partir de la matrice C. C peut tre une matrice m*n, auquel cas la colormap courante est utilise ou une matrice m*n*3 de rels compris entre 0 et 1 qui sera alors utilise comme colormap. a=imread('nom_image.fmt') : cre une matrice m*n*3 partir d'une image au format JPEG, TIFF, BMP (pour ne citer que les formats les plus connus). imwrite(a, 'nom_image.fmt') : cre une image appele nom_image.fmt partir de la matrice a (qui peut tre m*n ou m*n*3). imfinfo('nom_image.fmt') : fournit quelques informations sur une image.
Des fonctions plus avances, propres au traitement de l'image, se trouvent dans la toolbox imagetb : attention, quelques bugs ont t constats. Pour plus d'infos, faire un help imagetb ou taper imdemo. Les fonctions permettant de grer des animations se trouvent galement dans la toolbox specgraph :
a=getframe(h) : stocke dans la matrice a la figure de handle h movie(M) : cre une animation partir du vecteur de matrices M
Untitled
Les quatre boutons du haut permettent d'ouvrir les fentres suivantes : proprits graphiques d'un objet slectionn. 2. Une fentre "Callback Editor" permettant d'associer une ou plusieurs instructions au clic souris d'un objet. 3. Une fentre "Alignment Tool" permettant de grer les espaces et alignement des objets de la fentre slectionne. 4. Une fentre "Menu Editor" permettant la construction de barres de menus. Le mme guide permet l'insertion des objets suivants :
axes : insertion de graphiques pushbutton : bouton poussoir text : texte statique (le contenu du texte n'est pas modifiable par l'utilisateur) edit : texte ditable (modifiable par l'utilisateur) listbox : liste simple pour le choix d'une option parmi plusieurs possibilits popupmenu : menus droulants checkbox : case cocher (choix non exclusifs)
Untitled
radiobutton : bouton radio ou bouton d'option (choix exclusifs) slider : barre de dfilement (pour contrler une valeur sur un intervalle) frame : cadre (pour encadrer plusieurs objets)