Professional Documents
Culture Documents
2.
2.1 2.2 2.3
3.
3.1 3.2 3.3
4.
4.1 4.2 4.3
5.
5.1 5.2
6.
6.1 6.2
7.
7.1 7.2 7.3
8.
8.1 8.2
Calcul de performance....................................................................................43
Syntaxe ................................................................................................................ 43 Un exemple dutilisation ...................................................................................... 43
9.
9.1 9.2 9.3 9.4 9.5
10.
Conclusion ......................................................................................................50
Introduction Matlab
ISIMA-F4
Comme vous l'apprendrait la commande help help, cette dernire est utilisable avec deux types de paramtres :
Y help sujet renvoie l'aide sur un sujet complet. Par exemple, help matfun
affiche l'aide relative aux fonctions agissant sur des matrices.
Y help commande dcrit une commande unique. Par exemple, help schur
affiche l'aide relative la commande schur qui permet de dcomposer une matrice selon la forme de Schr.
Introduction Matlab
ISIMA-F4
Que ce soit relativement un domaine ou a une commande unique, laide se dcompose toujours en deux parties : 1) une courte description de quelques mots : l'entte de l'aide 2) quelques lignes dcrivant plus en dtails la mthode et que nous appelerons : le corps de l'aide La commande lookfor mot permet de retrouver la liste de toutes les commandes dont l'entte d'aide contient "mot". Ces dernires sont affiches accompagnes de leur entte daide. Par exemple :
lookfor decomposition QR Orthogonal-triangular decomposition. SCHUR Schur decomposition. SVD Singular value decomposition. DMPERM Dulmage-Mendelsohn decomposition of matrix A.
L'excution de cette commande peut prendre un certain temps, car Matlab est oblig de rechercher dans tous les fichiers d'aide sa disposition. Prcision de la plus haute importance : Matlab est sensible la casse des commandes. Et, quand bien mme laide de Matlab indique le nom des commandes en majuscule, il est impratif de taper en minuscules le nom de toutes les commandes prdfinies de Matlab, quelles soient internes ou externes.
Introduction Matlab
ISIMA-F4
3) La commande n'est pas reconnue comme tant interne ; Matlab va donc la considrer comme externe et rechercher dans les fichiers .m qui sont sa disposition. Pour cela, il utilise une liste de rpertoires que l'on peut obtenir en invoquant la commande path. Notons que si une commande externe a dj t excute prcdemment, il y a de grandes chances pour quelle soit encore charge en mmoire. Ceci peut avoir une consquence fcheuse : dans certains cas, Matlab ne se rend pas compte que le source dune fonction a chang et oublie de recharger le fichier source. Nous verrons quil est possible de palier ce comportement laide de la commande delete. 4) Matlab ne trouve aucun fichier correspondant au nom de la fonction invoque et met une erreur, par exemple :
tklp??? Undefined function or variable tklp.
5) La commande path affiche le contenu de la variable d'environnement MATLABPATH, laquelle peut tre dfinie, soit dans l'environnement du systme d'exploitation sous-jacent, soit dans le fichier matlabrc. Par exemple :
path MATLABPATH h:\matlab\toolbox\local h:\matlab\toolbox\optim h:\matlab\toolbox\matlab\datafun h:\matlab\toolbox\matlab\elfun h:\matlab\toolbox\matlab\elmat h:\matlab\toolbox\matlab\funfun h:\matlab\toolbox\matlab\general h:\matlab\toolbox\matlab\color h:\matlab\toolbox\matlab\graphics h:\matlab\toolbox\matlab\iofun h:\matlab\toolbox\matlab\lang h:\matlab\toolbox\matlab\matfun h:\matlab\toolbox\matlab\ops h:\matlab\toolbox\matlab\plotxy h:\matlab\toolbox\matlab\plotxyz h:\matlab\toolbox\matlab\polyfun h:\matlab\toolbox\matlab\sounds h:\matlab\toolbox\matlab\sparfun h:\matlab\toolbox\matlab\specfun h:\matlab\toolbox\matlab\specmat h:\matlab\toolbox\matlab\strfun h:\matlab\toolbox\matlab\dde h:\matlab\toolbox\matlab\demos h:\matlab\obc
Dans le monde Matlab, on appelle toolbox un rpertoire contenant des fichiers .m. Chaque toolbox vendue avec matlab correspond un domaine daide particulier.
Introduction Matlab
ISIMA-F4
Y Flche haut vous permet de rcuprer les commandes prcdentes Y Flche bas vous permet de redescendre dans l'historique des commandes Y Flche gauche, Flche droite, backspace et delete vous permettent de modifier
la ligne de texte courante Toute commande entre sur la ligne de commande donne lieu l'affichage de son rsultat moins qu'elle ne se termine par un point virgule, auquel cas l'affichage est supprim. Il est possible de saisir une commande sur plusieurs lignes, condition d'utiliser 3 points () comme caractres de suite. Par exemple :
1/2 + 1/3 + 1/4 ... + 1/5 + 1/6 ans = 1.4500
Lorsque vous tapez une expression simple sur la ligne de commande, le rsultat de celle-ci est automatiquement affect la variable prdfinie ans. De manire gnrale, une ligne de commande Matlab est de la forme : variable(s) = expression o expression est une commande Matlab quelconque. Par exemple :
x=0.5 x = 0.5000 y=cos(1-x^2) y = 0.7317 v=[x y] v = 0.5000
0.7317
Si les deux premiers cas se passent de commentaire, le troisime montre comment gnrer un 2-vecteur en concatnant les variables x et y l'aide de loprateur [ ]. Notez que le caractre de sparation des lments l'intrieur d'un vecteur est l'espace. Nous reviendrons en dtail sur les tableaux car ils constituent l'lment fondamental de Matlab.
Introduction Matlab
ISIMA-F4
NaN (Not a Number) est le rsultat typiquement renvoy par 0/0 ou /. Par exemple :
0/0 Warning: Divide by zero ans = NaN
pi quotient du primtre d'un cercle par son diamtre (qui leut cru ?) et dont la valeur vaut approximativement . i et j bases de l'espace complexe. Au cas o, par inadvertance malheureuse, vous dfiniriez des variables de mme nom, il est toujours possible d'accder celles ci en utilisant ii et jj.
Introduction Matlab
ISIMA-F4
L'invocation de help format renvoie la liste des formats utilisables. Il est possible de spcifier l'utilisation de formats en virgule fixe, en notation scientifique, hxadcimale, ainsi qu'un format spcial destin reprsenter les matrices de faon trs condense une matrice. L'exemple suivant permettra de fixer les esprits :
a = [ -1 2 -1 ; 1 0 -1 ; -1 -1 1] a = -1 2 -1 1 0 -1 -1 -1 1 format + a a = -++ --+
La matrice a est d'abord affiche en format normal avant que l'on utilise la commande format +. L'affichage utilise alors le formalisme suivant :
Y Un espace code une valeur nulle Y Le caractre + code une valeur positive Y Le caractre code une valeur ngative
Ce formalisme (qui doit ensuite tre dsactiv avec une autre commande format) est particulirement intressant lorsque l'on souhaite visionner l'allure d'une grande matrice de valeurs centres, c'est--dire, principalement, en analyse de donnes. La figure suivante montre le rsultat de l'invocation de help format.
help format FORMAT Set output format. All computations in MATLAB are done in double precision. FORMAT may be used to switch between different output display formats as follows: FORMAT Default. Same as SHORT. FORMAT SHORT Scaled fixed point format with 5 digits. FORMAT LONG Scaled fixed point format with 15 digits. FORMAT SHORT E Floating point format with 5 digits. FORMAT LONG E Floating point format with 15 digits. FORMAT HEX Hexadecimal format. FORMAT + The symbols +, - and blank are printed for positive, negative and zero elements. Imaginary parts are ignored. FORMAT BANK Fixed format for dollars and cents. FORMAT COMPACT Suppress extra line-feeds. FORMAT LOOSE Puts the extra line-feeds back in. FORMAT RAT Approximation by ratio of small integers.
Introduction Matlab
ISIMA-F4
Y Affichage de la liste des variables en mmoire Y Suppression de variables, fonctions, etc ... prsentes en mmoire
1.4.5.1 Affichage de l'espace mmoire occup La commande who permet de connatre un instant donn la liste des variables utilisateur. Par exemple :
who Your variables are: a v x y
Cette liste est utile lorsque l'on souhaite connatre la liste des identificateurs utiliss (par exemple, au moment de crer une nouvelle variable). Toutefois, les informations proposes sont trop limites pour permettre de grer la mmoire du systme. Dans ce cas, on prfrera la commande whos dont nous donnons immdiatement un exemple :
whos Name a v x y Size 3 1 1 1 by by by by 3 2 1 1 Elements 9 2 1 1 Bytes 72 16 8 8 Density Full Full Full Full Complex No No No No
Introduction Matlab
ISIMA-F4
Y Le nombre d'octets utiliss Y La densit (exprime en pourcentages pour les matrices creuses ou par
l'identificateur Full) donne le rapport entre le nombre d'lments utiliss et le nombre d'lments thorique d'un tableau.
Les liens MEX permettent d'crire des fonctions utilisables depuis Matlab vers des modules crits avec d'autres langages de programmation. Il est parfois trs intressant de dcharger une fonction utilisateur. En effet, lorsque lon met au point une fonction, lon effectue souvent de frquents aller-retours entre lditeur et lenvironnement Matlab afin de vrifier le fonctionnement de la fonction. Et, rgulirement, Matlab ne se rend pas compte que le code a chang et relance une version non mise jour de la fonction partir de son cache, plongeant habituellement lutilisateur dans la plus profonde perplexit. Afin de palier cet inconvnient majeur et, ainsi, viter les maux de tte en rsultant, il est possible de supprimer du cache la (mau)dite fonction en utilisant clear.
Introduction Matlab
ISIMA-F4
1.4.5.3 Les variables globales Par dfaut, les variables sont locales un espace de travail. La commande global permet toutefois de dfinir des variables globales, c'est dire dont la porte n'est pas limite un espace de travail (par exemple, un fichier .m) mais toute une session de travail. Si ce mcanisme permet de partager facilement des donnes, il doit tre utilis avec parcimonie (et Abonessian) et avec des identificateurs judicieusement choisis afin d'viter tout risque de collision sur le nommage des variables. Les commandes suivantes permettent d'influer sur les variables globales : global X Y Z dfinit les variables globales X, Y et Z isglobal(X) renvoie TRUE si et seulement si la variable X est globale who global, whos global, clear global x, clear global agissent de la manire que who, whos et clear mais sur les variables globales. Il est noter que les variables globales apparassent sans distinction particulire lorsque l'on utilise who ou whos comme sur l'exemple suivant :
a = [ 1 2 3 ] a = 1 2 3 b = 3.4 b = 3.4000 global c c=1 c = 1 whos Name a b c
Size 1 by 3 1 by 1 1 by 1
Elements 3 1 1
Bytes 24 8 8
Complex No No No
Size 1 by 1
Elements 1
Bytes 8
Density Full
Complex No
1.4.5.4 Sauvegarde et chargement de l'environnement de travail La commande save permet de sauvegarder tout (par dfaut) ou partie de l'espace de travail. Ces options permettent de spcifier :
Y La liste des variables sauvegarder Y Le format de sauvegarde. Par dfaut Matlab sauvegarde l'tat de l'espace de
travail dans un fichier binaire. Toutefois, il est possible de lui spcifier de tout sauver sous format ASCII et mme d'indiquer le nombre de chiffres significatifs inclure. Rciproquement la commande load permet de rcuprer un espace de travail condition que l'extension du fichier spcifi en paramtre soit .mat. Si l'extension est diffrente, par exemple un fichier abc.cde, alors Matlab considre que le fichier contient une matrice sous forme ASCII rintgrer dans lexpasce de travail sous le nom de variable abc. Finalement, la commande diary permet de sauvegarder la quasiintgralit d'une session de travail sous Matlab, ce qui inclut la totalit des lignes de commande et la plus grande partie de leur rsultat.
Introduction Matlab
ISIMA-F4
11
Matlab tant orient matrices, il tait tout naturel qu'il propose un nombre impressionnant de fonctionnalits les concernant. Commenons tout d'abord par les oprations de saisie :
Il est galement possible d'utiliser des expressions l o l'on trouvait des constantes :
v = [1.0 sqrt(2.0) cos(1.0 - 2.0 * sin (pi/4))] v = 1.0000 1.4142 0.9154
Une des particularits les plus intressantes concerne toutefois l'utilisation de l'oprateur :. Celui-ci permet de crer des numrations de valeurs sous la forme de boucles implicites. Par exemple :
v=1:5 v = 1 2 v=1:0.2:2 v = 1.0000
3 1.2000
1.4000
La syntaxe gnrale est la suivante : debut [ : pas] : fin Bien entendu, il est possible de mixer diffrentes formes d'initialisation, comme le montre l'exemple suivant :
v=[1 2 4:6 5:0.1:5.5] v = Columns 1 through 7 1.0000 5.1000 2.0000 4.0000 5.0000 6.0000 5.0000
Introduction Matlab
ISIMA-F4
12
Il est galement possible de crer des vecteurs uniformment rpartis avec la fonction linspace ou avec des intervalles logarithmiques en utilisant logspace. Ces deux fonctions prennent en argument, le premier et le dernier lment de la rpartition ainsi que le nombre d'lments gnrer. Par exemple :
logspace(1,4,5) ans = 1.0e+04 * 0.0010 0.0056 linspace(1,2,5) ans = 1.0000 1.2500
0.0316
0.1778
1.0000
1.5000
1.7500
2.0000
L'exemple prcdent montre comment Matlab peut utiliser un facteur commun (en l'occurrence 10000) au moment d'afficher un vecteur.
Basiquement, il s'agit de spcifier chaque ligne comme un vecteur. L'oprateur ; agissant alors comme un oprateur de concatnation ligne ligne. Bien entendu, on peut utiliser des boucles implicites :
A = [1:3 ; 4:6 ; 7:9] A = 1 4 7 2 5 8 3 6 9
Il est galement possible de construire une matrice partir de vecteurs existants, que ce soit par ligne ou par colonne comme sur lexemple suivant :
Introduction Matlab
ISIMA-F4
13
v1=[1 2 3] v1 = 1 2 3
a1=[v1 ; v2 ; v3] a1 = 1 4 7 2 5 8 3 6 9
v2=[4 5 6] v2 = 4 5 6
v3=[7 8 9] v3 =
On voit bien ici que ; est un oprateur de concatnation par lignes alors que lespace est un oprateur de concatnation par colonnes. A titre dexercice, pouvez vous deviner ce que donneraient les commandes suivantes :
Introduction Matlab
Exemple : construction dune matrice identit de mme taille quune matrice existante.
ida=eye(size(a1)) ida = 1 0 0 0 1 0 0 0 1
La multiplication dune matrice par un vecteur exige que celui-ci soit sous forme dune colonne transposition obligatoire
La rsolution du systme linaire passe par lutilisation des oprateurs \ et / selon que lon souhaite mettre la matrice gauche ou droite.
Introduction Matlab
ISIMA-F4
15
Lutilisation directe de la division nest pas possible entre un scalaire et un vecteur, il faut utiliser la division membre membre
Introduction Matlab
ISIMA-F4
16
b = ans = 1 2 3 4 1 2 3 4
Toutes ces oprations sappliquent galement un vecteur. Si vous dsirez effectuer ces oprations non pas sur les colonnes mais sur les lignes, vous avez toujours la possibilit de transposer la matrice au pralable. De mme il est possible dappliquer loprateur lensemble des lments de la matrice en utilisant loprateur de transformation en vecteur.
Introduction Matlab
ISIMA-F4
17
Il faut prendre garde lopration de mise lexponentielle dune matrice. En effet, comme lon peut sy attendre exp(a) est la matrice des exponentielles de chacune de ses composantes. Pour prendre lexponentielle dune matrice, il faut utiliser lune des fonctions expm, expm1, expm2 ou expm3. De mme logm et sqrtm calculent respectivement le logarithme et la racine carre matricielle.
a = [1 2 3 ; 4 5 6 ; 7 8 9] a =
Introduction Matlab
ISIMA-F4
18
Donnons maintenant un exemple certes surprenant mais nanmoins classique dans lenvironnement Matlab de lutilisation des oprateurs de comparaison pour rsoudre un problme dindtermination au dnominateur. La x=0 1 fonction sinus cardinal a pour expression sinc( x ) = sin x x0 x Il nest pas possible de lcrire sin(x)./x directement sur un intervalle contenant lorigine cause de lindtermination en 0, aussi il est possible de rsoudre le problme en procdant en 2 tapes : a) on limine le 0 au dnominateur pour le remplacer par un 1, ce qui revient remplacer x par x+(x==0). En effet, lexpression (x==0) vaudra 0 en tout autre point que 0 et 1 en 0. Ainsi, on ne modifie x quau point 0. b) On effectue la division avec le dnominateur modifi, ainsi la fonction vaudra sin(0)/1 en 0, soit 0 c) on ajoute ensuite la valeur 1 au point 0, et pour ce faire, on rutilise une addition avec (x==0) Finalement on obtient : sin(x)./(x+(x==0))+(x==0) Cette manire de procder peut paratre lourde mais elle est nettement plus efficace que lutilisation dune boucle sur les valeurs de x.
Introduction Matlab
ISIMA-F4
19
find
Deux autres oprateurs sont un peu diffrents car ils renvoient une valeur scalaire unique isempty isreal Vrai si le tableau est non vide Vrai si le tableau contient des rels, cest dire quil ne contient pas de complexes
Find est un autre oprateur particulier qui renvoie les coordonnes des lments non nuls. Il faut se mfier des valeurs renvoyes par find lorsquil travaille sur une matrice. En effet, find renvoie toujours un vecteur. Ainsi, pour une matrice 3x3, find renverra un vecteur neuf lments. Les indices renvoys correspondent un rangement par colonnes des valeurs. Il est possible dobtenir un rangement par lignes en demandant explicitement deux arguments de retour. Par exemple, en rutilisant la matrice a de lexemple prcdent :
a(:) ans = 1 4 7 2 5 8 3 6 9 find (a <= 5) ans = 1 2 4 5 7 [lig,col]=find(a<=5) lig = 1 2 1 2 1 col = 1 1 2 2 3
Les lments infrieurs ou gaux 5 ont pour rang 1, 2, 4, 5 et 7 dans le vecteur construit partir de a
Pour retrouver les lments de a infrieurs ou gaux 5, il faut considrer les coordonnes dans les deux tableaux lig et col. Par exemple, si lon considre les troisimes lments (en italique), on apprend que a(1,2) a une valeur infrieure 5.
Maintenant que nous disposons de find, il est possible dcrire la fonction sinus cardinal dune nouvelle manire : 1) nous construisons x :y=ones(size(x)) un vecteur de 1 de mme taille que
2) nous recherchons les lments non nuls de x indices=find(x) 3) puis, nous calculons sin(x)/x pour tous les lments non nuls trouvs par find.
Introduction Matlab
ISIMA-F4
20
Nous obtenons finalement : y(indices)=sin(x(indices))./(x(indices)) Deux autres oprateurs boolens trs pratiques sont spcifiques Matlab all(a) renvoie vrai si tous les lments du vecteur a sont non nuls. Appliqu une matrice, il renvoie un vecteur effectuant la mme opration pour chaque colonne de la matrice any(a) renvoie vrai sil existe un lment non nul dans le vecteur. Il fonctionne de la mme manire que all sur une matrice. Exemple : test dgalit sur deux matrices : all(all(a==b)) doit tre gal 1 Exercice : test de symtrie dune matrice
4.1.1 Dcomposition LU
[L,U]=lu(A) o U est triangulaire suprieure, L quasiment triangulaire infrieure une permutation sur A prs et A=L*U. Pour avoir rellement une matrice infrieure, il faut demander le troisime argument de retour de Matlab [L,U,P]=lu(A) Ici U est triangulaire suprieure, L triangulaire infrieure avec des 1 sur la diagonale et lon a : L*U=P*A Exercice : inverser une matrice A en utilisant sa dcomposition LU sous la deuxime forme
4.1.2 Dcomposition QR
[Q,R]=qr(A) o Q est une matrice orthonormale et R une matrice triangulaire suprieure telles que Q*R = A.
Introduction Matlab
ISIMA-F4
21
Bien que trs stable numriquement, il est possible damliorer encore les performances de cette mthode en demandant le 3me paramtre de retour : [Q,R,P]=qr(A) o Q est une matrice orthonormale, R une matrice triangulaire suprieure et P une matrice de permutation telles que Q*R=A*P. La principale amlioration tient au fait que les valeurs diagonales de R sont ranges par ordre dcroissant en valeur absolue, phnomne connu pour amliorer la performance des oprations utilisant les matrices triangulaires suprieures, en particulier la rsolution de systmes linaires (plus lon divise par une valeur grande, moins lon commet derreurs).
Introduction Matlab
ISIMA-F4
22
4.3.2 Evaluation
LEvaluation des polynmes seffectue bien videmment par lalgorithme de Horner. La fonction utiliser diffre selon que lon souhaite valuer le polynme sur des valeurs scalaires ou sur une matrice. polyval(p,x) value le polynme p en chaque point du tableau x polyvalm(p,a) ici lon nvalue pas sur chaque lment de la matrice a mais cest la matrice qui devient la variable du polynme.
p = [3 0 -1 5] p = 3 0 -1 5 polyval(p,x) ans = 3 5 27 5 5 7 7 7 -17
x=[-1 0 1 ; 0 0 1 ; 2 1 -2] x = -1 0 2 0 0 1 1 1 -2
p2 = [ 1 -4] p2 = 1 -4
deconv(p3,p2) ans = 1 3 -1
p3 = conv(p1,p2) p3 =
Introduction Matlab
ISIMA-F4
23
-1
-13
Aprs cration des polynmes p1 et p2, on calcule le produit dans p3. Par chance, la division de p3 par p1 redonne p2 et rciproquement.
[residues,poles,direct]=residue(numerateur,denominateur)
o : direct est le polynme de llment le plus simple poles est la liste des ples de degr 1 de la division residus le vecteur des numrateurs associs aux ples. Il nest pas possible dobtenir la rduction dune fraction rationnelle en lments de deuxime espce. x3 6 x2 + 2 x dont la Considrons par exemple la fraction rationnelle : x2 + x 2 3 4 . Traduisons en Matlab cette dcomposition scrit : ( x + 5) + x + 2 x 1 opration :
> numerateur=[1 6 2 0] numerateur = residus = 1 6 2 0 -4 3 poles = 1 1 -2 -2 1 direct = 1 5 denominateur=[1 1 -2] denominateur = [residus,poles,direct]= residue(numerateur,denominateur)
Le rsultat contenu dans direct est donc le polynme de degr 1 sans dnominateur, poles fournit la liste des opposs des monmes de degr 0 des dnominateur et residus les numrateurs associs.
Introduction Matlab
ISIMA-F4
24
-)
Introduction Matlab
ISIMA-F4
25
Signal et signal bruit 1.5 1 0.5 0 0 -0.5 -1 -10 1 0 Interpolation de degr 5 1 10 -0.5 -1 -10 1 0.5
Interpolation de degr 3
0 Interpolation de degr 7
10
0.5
0.5
-0.5 -10
10
-0.5 -10
10
p3 = -0.0007
p5=polyfit(x,bruite,5); p7=polyfit(x,bruite,7); subplot(2,2,1), plot(x,y,':',x,bruite,'-'), title('Signal et signal bruit'); subplot(2,2,2), plot(x,y,':',x,polyval(p3,x),'-'), title('Interpolation de degr 3'); subplot(2,2,3), plot(x,y,':',x,polyval(p5,x),'-'), title('Interpolation de degr 5'); subplot(2,2,4), plot(x,y,':',x,polyval(p7,x),'-'), title('Interpolation de degr 7');
Introduction Matlab
ISIMA-F4
26
4.3.7.2 Interpolation polynomiale au sens de Lagrange La fonction interp1(x,y,z) tablit un polynme dinterpolation des sries x et y et renvoie limage de tous les points de z par ce polynme. La fonction interp2(x,y,z,u,v) ralise le mme travail mais en trois dimensions. Il est conseill de consulter laide de Matlab pour la dfinition des options de ces fonctions.
Introduction Matlab
ISIMA-F4
27
Afin dviter que les rsultats dvaluation des diffrentes instructions dun sous programme napparaissent dans la fentre Matlab, il est important de terminer chaque ligne par un point virgule. Toutefois, il est parfois utile, lorsque lon dbogue un programme de ne pas mettre ce dernier afin davoir une trace dexcution sur les lignes les plus critiques.
dexcution
conditionnelle
Un point important mrite dtre signal : lexpression condition se doit dtre scalaire et boolenne.
Exemple :
while (e < eps) e = rsultat dun calcul end
La boucle while est trs intressante, par exemple, pour atteindre la convergence dun processus. 5.2.2.2 Structure gnrale de la boucle for
for variable = debut [:pas]:fin instructions end
Introduction Matlab
ISIMA-F4
28
Notons que le pas par dfaut est de 1 et que la construction de la liste des valeurs possibles de la variable de contrle se fait toujours de faon croissante. Pour parcourir des valeurs dcroissants, il est ncessaire dutiliser un pas ngatif. Cette boucle est trs apprcie des dbutants en Matlab car elle permet de transposer aisment un programme crit dans un langage structur classique. Toutefois, son emploi sur les tableaux doit tre limit son minimum avec Matlab. En effet, dans la plupart des cas, il est possible de remplacer une boucle for par des instructions directes sur les vecteurs ou sur les matrices. Par exemple, considrons un sous programme qui calcule la somme des lments sous diagonaux dune matrice La premire mthode consiste utiliser 2 boucles for imbriques alors que la seconde utilise les fonctions tendues de Matlab sur les tableaux.
a = [1 2 3 ; 4 5 6 ; 7 8 9] a = 1 4 7 2 5 8 3 6 9 for i=1:length(a) for j=1:i-1 s=s+a(i,j) end end s = 19 for i=1:length(a) s=s+sum(a(i,1:i-1)) end s = 19
Sur une matrice de cette taille, la diffrence est minime. En revanche, sur des matrices plus consquentes, la seconde mthode est bien plus rapide car elle tire partie des fonctionnalits du noyau de Matlab.
Introduction Matlab
ISIMA-F4
29
Lexemple de code suivant rsume les commandes de base sur les chanes de caractres.
chaine='ISIMA F4.2' chaine = ISIMA F4.2 isstr(chaine) ans = 1 tableau=abs(chaine) tableau = 73 83 73 77 65 32 70 52 46 50 isstr(tableau) ans =
Transformation en tableau des codes ASCII Notez que isstr du tableau renvoie faux
6.2 Utilisation avance 6.2.1 Conversions de chanes vers des variables numriques
Les fonctions suivantes permettent de convertir une chane de caractres vers une valeur numrique. num2str convertit une valeur numrique quelconque vers une chane. Typiquement prvue pour tre utilise sur un scalaire, le rsultat obtenu partir dun vecteur mrite le dtour ! int2str convertit un entier en chane ; si la chane reprsente en fait un nombre rel, int2str tronque sa partie dcimale. dec2hex transcrit un nombre entier vers une chane contenant sa reprsentation en base 16 mat2str renvoie une matrice sous la forme [ valeurs ; valeurs ; ] cest dire la forme sous laquelle elle serait saisie sur la ligne de commande de Matlab. Cette fonction prend un second argument indiquant le nombre de dcimales dsires. str2num conversion dune chane en nombre scalaire. Si la chane contient une opration, celle-ci est effectue avant que son rsultat ne soit renvoy. Si la chane contient des crochets (et, ventuellement, des point virgules), le rsultat sera sous forme dun vecteur (matrice). hex2num et hex2dec transforment respectivement une chane de caractres hexadcimaux vers un nombre flottant ou entier.
Introduction Matlab
ISIMA-F4
30
Lexemple suivant illustre ces fonctionnalits, souvent utiles lorsque lon rcupre des donnes en provenance dun fichier texte.
Introduction Matlab
ISIMA-F4
31
strcmp('ABCDE','ABEDC') ans = 0
0 strcmp('ABCDE','ABCDE')
isspace(chaine) ans = ans = 1 0 0 0 0 0 1 0 0 geographie='de l''est l''ouest' upper(chaine) ans = ISIMA F4 lower(chaine) de l'ours l'ouours ans = findstr(geographie,'est') isima f4 ans = 6 16 geographie = de l'est l'ouest strrep(geographie,'est','ours') ans =
Exemple dutilisation de strtok sur une chane pour extraire tous les tokens.
function tokenize(chaine) suite=chaine; z=[]; while (~isempty(suite)) [premier,suite]=strtok(suite); premier end end tokenize('les trois lments') premier = les premier = trois premier = lments
Par exemple, la chane ow place le graphique en mode dessin discret et place des petits ronds blancs aux divers points de donnes.
Introduction Matlab
ISIMA-F4
33
axis([xmin xmax ymin ymax zmin zmax]) spcifie ltendue des axes des abscisses, des ordonnes et des ctes pour un dessin en 3 dimensions. axis(auto) permet de revenir aux tendues par dfaut des axes, trs pratique aprs des exprimentations peu concluantes
axis(off) retire les graduations et les tiquettes des axes axis(on) affiche les graduations et les tiquettes des axes axis(AXIS) verrouille les axes dans leur position actuelle. Semploie en mode hold(on). On commence par afficher la srie de valeurs de rfrence, puis on bloque les axes pour les prochaines. Cela permet de spcifier certains paramtres de centrage sur la srie de rfrence. Les commandes xlabel et ylabel et zlabel que nous prsentons cidessous permettent dassocier des lgendes aux axes. Il est possible dafficher une grille avec la commande grid.
0.5
-0.5
-1 -4
-2
Il nest pas possible dafficher des donnes prsentes sous forme symbolique : il faut toujours fournir des donnes tabules sous la forme de deux sries : les abscisses et les ordonnes correspondantes.
{stem | bar | stairs}(y) cre un diagramme rgulirement espac des donnes de y. {stem | bar | stairs}(x,y) cre un diagramme o les x dterminent la position en abscisse du motif et y son ordonne. Il est possible de passer ces commandes un argument de format sous la forme habituelle dune chane de caractres. En outre, pour les commandes bar et stairs, il est possible de demander des rsultats de sortie sous la forme [xx,yy]={bar, stairs}(x,y). Auquel cas, aucun graphe nest trac, mais ce dernier pourra tre obtenu par la commande plot(xx,yy). Cette possibilit peut tre utilise pour afficher conjointement une courbe et un diagramme avec une mise en page spciale. Notez galement que bar et stairs ncessitent que les abscisses x soient fournies en ordre croissant. La figure suivante montre lutilisation de ces diffrentes techniques sur un graphique contenant 4 sous graphiques, le code Matlab est le suivant :
x=[-2:0.1:2]; y=exp((-x.^2)/2); subplot(2,2,1), plot(x,y), title('Courbe continue'); subplot(2,2,2), stem(x,y), title('Diagramme btons'); subplot(2,2,3), bar(x,y), title('Diagramme barres'); subplot(2,2,4), stairs(x,y), title('Diagramme en escalier'); subplot(1,1,1);
Courbe continue 1 1
Diagramme btons
0.5
0.5
0 -2 1
0 Diagramme barres
0 -2 1
0 Diagramme en escalier
0.5
0.5
0 -2
0 -2
Introduction Matlab
ISIMA-F4
36
La commande hist travaille diffremment car elle cre des classes dans les valeurs dans qui lui sont fournies puis renvoie un graphique montrant la cardinalit de chaque classe. Sous la forme hist(y), la fonction cre exactement 10 classes de mme taille. Il est possible de spcifier manuellement que lon souhaite utiliser n classes par la commande hist(y,n). Finalement, lutilisateur peut choisir lui mme ses classes. Dans ce cas, elles sont passes en second argument : hist(y,x). Le code suivant cre des notes rparties sur une gaussienne centre en 14 et dcart type 5. Les notes sont arrondies lentier immdiatement suprieur grce la fonction ceil. Dans un second temps, on seuille toutes les notes infrieures 0 et celles suprieures 20. On souhaite tudier graphiquement la rpartition des notes, pour cela, on spcifie que chaque classe correspond une note. Notez que la spcification manuelle des classes impose que celles ci correspondent exactement un entier.
notes=ceil(randn(1,100)*5+12); indices=find(notes < 0); notes(indices)=zeros(length(indices)); indices=find(notes > 20); notes(indices)=ones(size(indices)).*20; classes=(0:1:20); hist(notes,classes);
10 Notes ISIMA-F4
15
20
Introduction Matlab
37
-1
-0.5
0.5
1.5
Introduction Matlab
ISIMA-F4
38
function rosace(a,n,style) if (nargin < 2) error('Pas assez de paramtres : rosace(longueur, nombre [, format])'); end; theta=-pi:0.05:pi; rho=a.*sin(n.*theta); if (nargin < 3) polar(theta,rho); else polar(theta,rho,style); end; end;
Notez lutilisation de nargin pour vrifier la prsence des deux paramtres obligatoires et du troisime paramtre facultatif : le format daffichage. Sur la figure rsultant de rosace(12,6) notez les deux types de graduation :
330
La distinction entre abscisses et ordonnes ne mayant jamais parue claire dans ce genre de graphiques, jai prfr les tiqueter
20 Axe des ctes 10 0 -10 -20 5 5 0 Axe des ordonnes -5 -5 0 Axe des abscisses
Introduction Matlab
ISIMA-F4
40
Voici quelques explications : La fonction meshgrid a cr deux matrices X et Y de mme taille et reprsentant le maillage. Chaque ligne de X correspond au vecteur x et X comporte length(y) lignes ; rciproquement, chaque colonne de Y correspond au vecteur y et Y comporte length(x) colonnes. Une fois tablies ces matrices de maillage, on peut calculer la valeur de la cte en chaque point. Par exemple, pour calculer une surface de parabole sur un carr de 4 units de ct :
x=[-2:0.05:2]; y=[-2:0.05:2]; [X,Y]=meshgrid(x,y); Z=X.^2 + Y.^2; mesh(X,Y,Z);
La famille des fonctions mesh trace un graphique en fils de fer. Elles prennent toutes 3 paramtres, dans lordre : les matrices de maillage X et Y ainsi que la matrice des ctes sur le maillage Z. Les autres possibilits de trac sont les suivantes : meshz ajoute des lignes de projection sur les ctes contour trace les contours projets de Z sur le plan xy meshc combine mesh et contour sur le mme graphique surf colore les espaces entre les fils surfc combine surf et contour Introduction Matlab ISIMA-F4 41
surfl ajoute une source de lumire virtuelle. Il existe bien dautres options, permettant, par exemple, de rgler la palette de couleurs ou bien le point de vue par rapport auquel on regarde la courbe. Ltude de toutes ses possibilits, bien au del du contexte de cette introduction, est laisse au soin du lecteur. La figure suivante illustre nanmoins certaines des fonctions nommes cidessus. Mesh 10 5 0 2 0 -2 -2 Surf 10 5 0 2 0 -2 -2 0 10 5 0 2 0 -2 -2 0 0 10 5 0 2 0 -2 -2 SurfC 0 MeshC
Introduction Matlab
ISIMA-F4
42
8. Calcul de performance
Il est possible de calculer les performances dun calcul aussi bien en nombre doprations flottantes (les fameux flops) quen temps de calcul. Le premier lment est souvent plus intressant car il sera le mme quelle que soit la charge de la machine.
8.1 Syntaxe
La commande permettant dvaluer le nombre doprations est intitule flops et renvoie le nombre doprations en virgule flottante effectus depuis la dernire remise zro du compteur, lie la commande flops(0). Le temps de calcul se mesure grce aux fonctions tic et toc. Tic lance un chronomtre, toc larrte et renvoie le temps coul dans une unit qui dpend de la plate forme matrielle.
Introduction Matlab
ISIMA-F4
43
9. La toolbox optimisation
La librairie doptimisation permet deffectuer un certain nombre doprations doptimisation. Nous ntudierons pas ici lintgralit de ces nombreuses fonctionnalits
lambda Vecteur des multiplicateurs de Lagrange loptimum. Permet de savoir quelles contraintes sont actives c A b inf Vecteur objectif, on cherche minimiser la quantit < x c> Matrice des contraintes Second membre Vecteur des bornes infrieures sur les variables, peut tre dfini sur les |inf| premires variables seulement Vecteur des bornes suprieures sur les variables, peut tre dfinir sur les |sup| premires variables seulement Solution initiale partir de laquelle on souhaite itrer Permet de spcifier, si ncessaire, que les n premires contraintes sont de type galit Si vous passez 1 en dernier paramtre, les messages davertissement de Matlab seront passs sous silence. Tableau 9.1 Arguments de la fonction lp Seuls les paramtres c, A et b sont rellement ncessaires. Exemple : Soit un problme 4 variables et 6 contraintes
sup
init N
-1
Introduction Matlab
ISIMA-F4
44
Tolrance sur le critre de terminaison. Avant de terminer un algorithme doptimisation, trois critres sont vrifis : (2) (3) (4) diffrences relatives sur les valeurs conscutives des variables diffrence relative sur les valeurs conscutives de lobjectif violation des contraintes
Vous avez ici la possibilit de fixer ces tolrances. Les valeurs par dfaut sont les suivantes : (2) (3) (4) 5 6 E E 10-4 10-4 10-6
Stratgie doptimisation : utilise pour loptimisation multi critre Mthode doptimisation sans contrainte : 0 1 2 Quasi Newton type BFGS (par dfaut) Gradient conjugu type DFP Mthode du gradient ( proscrire)
Introduction Matlab
0 1 8 9 10 11 12 13 14 15 S E S S S E E E
Stratgie mixte cubic fit/quadratic fit (par dfaut et conserver !) Cubic fit seul
Valeur de la fonction objectif loptimum Doit tre fixe 1 si lutilisateur fournit des fonctions pour calculer le gradient, et 0 sinon (calcul du gradient par diffrences finies) Nombre dvaluations de la fonction objectif Nombre dvaluations du gradient Nombre dvaluations de contraintes Nombre de contraintes de type galit pour la procdure constr Nombre maximal ditrations, fix par dfaut 100 fois le nombre de variables Utilis par loptimisation multi critre Utiliss dans le cas du calcul du gradient par diffrences finies : respectivement gal aux changements minimal et maximal de valeur des variables lors du calcul du gradient en diffrences finies Pas doptimisation. Ne pas changer sous peine de catastrophe ! Tableau 9.2 Liste des options des fonctions doptimisation
16, E 17 18 E
Introduction Matlab
ISIMA-F4
46
a,b
OPTIONS
Vecteur doptions tel que prsent la section prcdente. Seules les options 1, 2 et 14 sont utilises. Si Options nest pas prsent, les valeurs par dfaut sont utilises : Algorithme muet Tolrance sur les variables de 10-4 500 itrations au maximum Il est possible de rcuprer les OPTIONS en sortie pour connatre la valeur de lobjectif, le nombre dappels raliss, etc. (voir le tableau des options pour plus dclaircissements)
p1 p10
Arguments passs la fonction minimiser. Cest utile si la fonction prend plusieurs arguments mais la minimisation ne porte que sur le premier. Par exemple si la fonction scrit y=f(x,z) alors, la minimisation portera sur x et vous pourrez passez une constante pour z dans p1 Tableau 9.3 liste des arguments de la fonction fmin
9.4.2 Dimension n
Il sagit ici dappliquer des algorithmes classiques comme le gradient conjugu ou les mthodes de quasi newton. Tout ceci est effectu via la fonction fminu dont la syntaxe est : [x,options]=fminu('Fonction,initial,options,'gradient') Avec : Fonction Chane donnant lexpression de la fonction minimiser. Il est galement possible de donner le nom dun fichier .m initial options Valeur de dpart pour le vecteur solution Vecteur des options, les options utiles sont les suivantes : 1,2,3,14 ainsi que 6 qui permet de choisir lalgorithme doptimisation et 7 qui spcifie lalgorithme de recherche linaire. Voir le tableau spcifique aux options pour connatre les valeurs par dfaut. ISIMA-F4 47
Introduction Matlab
gradient
Chane de vecteur indiquant la drive partielle de Fonction par rapport chaque variable. Il est galement possible de passer un fichier .m Tableau 9.4 Liste des options de la fonction fminu
Seuls les arguments Fonction et Initial sont obligatoires. Si Gradient est omis, alors les drives sont calcules par diffrences finies.
9.4.4 Exemple
Nous allons utiliser fminu pour calculer le minimum dune fonction tristement clbre : la banane de Rosenbrock dont la valeur est : banane( x , y ) = 100 ( y x 2 ) + (1 x )2 Le gradient est : banane = 400( x 3 xy ) + 2 x 2 x banane = 200( y x 2 ) y Si nous dcidons dcrire ces fonctions dans des fichiers, nous obtenons :
%fichier banane.m : la fonction ! function z=banane(x) z = 100.0 * (x(2) - x(1)^2)^2 + (1 - x(1))^2; end;
Le plus droutant est ici de repasser du formalisme vecteur celui des scalaires ! En effet, il faut se souvenir que x et y sont passs sous forme dun vecteur 2 lments.
%fichier gradban.m : le gradient ! function z=gradban(x) z = [ 400*(x(1)^3-x(2)*x(1))+2*x(1)-2; 200*(x(2)-x(1)^2)]; end;
Introduction Matlab
ISIMA-F4
48
Lon ressort le gradient sous la forme dun vecteur deux composantes : les drives partielles respectivement x et y. Il est alors possible dobtenir la minimisation par lappel :
[x,options]=fminu('banane',[-3 2],[],'gradban')
Y Dans x le rsultat de loptimisation Y Dans options(8) la valeur de banane loptimum Y Dans options (10) le nombre dvaluations de la fonction Y Dans options (11) le nombre dvaluations du gradient
Eussiez vous voulu utiliser le formalisme par chanes de caractres plutt que des fichiers .m que vous auriez pu taper :
Banane= 100.0 * (x(2) - x(1)^2)^2 + (1 - x(1))^2 GradBanane=[400*(x(1)^3-x(2)*x(1))+2*x(1)-2 ;200*(x(2)-x(1)^2)] [x,options]=fminu(Banane,[-3 2],[],GradBanane)
Avec : F+C Chane indiquant lexpression de la fonction et des contraintes ou bien un fichier les calculant Valeur initiale de x permettant de dmarrer lalgorithme Options doptimisation. Si F+C contient des contraintes galits, ce sont les options(13) premires contraintes. Vecteurs indiquant respectivement les bornes infrieures et suprieures des variables. Ces vecteurs peuvent avoir des dimensions infrieures celles de x et mme tre vides Chane indiquant lexpression du gradient de la fonction et le jacobien des contraintes ou bien un fichier permettant de les calculer Tableau 9.5 Liste des arguments de la fonction constr Introduction Matlab ISIMA-F4 49
initial options
inf et sup
gradient
A mon avis, partir du moment o lon travaille avec des contraintes, utiliser des chanes de caractres directement devient trop pnible et il faut sen remettre aux fichiers. En outre, cela permet de prsenter de bien meilleur faon les problmes. Supposons que lon veuille minimiser la fonction : e x ( 4 x 2 + 2 y 2 + 4 xy + 2 y + 1) sous les contraintes : 3 xy x y c1 : 2 c2 : y x 10 Il est possible de traiter ce problme grce aux fichiers consf.m et consg.m fournissant respectivement :
Y La fonction objectif et les contraintes sous la forme dune fonction qui renvoie
2 arguments :
% fichier consf.m function [f,g]=consf(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); g=[ 1.5+x(1)*x(2)-x(1)-x(2), -x(1)*x(2)-10]; end
La valeur de la fonction est retourne sous forme dun scalaire dans le premier argument de retour Les contraintes sont positionnes sur la mme ligne dune matrice
Le premier terme de retour correspond au gradient de la fonction objectif exprim sous forme dun vecteur colonne (les point virgules sparant les diffrentes lignes sont clairement visibles dans lexemple ci-dessus). En rgle gnrale, et si la fonction f est n variables, ce vecteur est sous la forme : f f ; ; x1 x2
; xf
n
Introduction Matlab
ISIMA-F4
50
Une ligne est associe une variable, une colonne une contrainte !, en rgle gnrale, si nous avons m contraintes pour n variables, la matrice est sous la forme : g1 x 1 g1 x2 g1 xn
gx ; g ; x g g x x
g 2 x1 g 2 x2
2 m 1 m 2 m n n
Vous pouvez voir ici un avantage de lutilisation des fichiers : il est possible deffectuer des calculs intermdiaires !
10. Conclusion
Au travers de cette (courte) introduction, jespre vous avoir montr lintrt de Matlab, outil qui ma considrablement aid au cours de mon travail de recherche. Les aspects que jai prsents ne sont toutefois que les plus basiques, la richesse de Matlab rendant toute synthse de moins de 300 pages impossible. Les personnes intresses sont donc invites poursuivre leur tude par la lecture douvrages plus complets, et surtout lexprimentation personnelle. Ce poly est ddi aux tudiants de la premire promotion de F4 qui ont eu subir ce cours et mont considrablement aid lamliorer. Jai nomm (sans aucune intention de classement) : Caroline, Hanane, Julie, Julien A., Julien P., Rocco, Omer, Junior, Tchoum, Sony, Christian, Stphane, Nitro, Loc, Yannick, Marco, Pookie, Guillaume, Buz, Antoine, Dany, FX et Philippe avec une mention toute particulire pour le ranger numnoren qui se reconnatra.
F4 For Ever
Introduction Matlab
ISIMA-F4
51