You are on page 1of 51

Introduction Matlab

Ours Blanc des Carpathes


1.
1.1 1.2 1.3 1.4

Bienvenue dans Matlab.....................................................................................2


La fentre de commande Matlab ........................................................................... 2 La gestion des commandes Matlab........................................................................ 3 La ligne de commande Matlab............................................................................... 5 Outils usage gnral............................................................................................ 6

2.
2.1 2.2 2.3

Les oprations lmentaires dans Matlab .......................................................11


Types de donnes................................................................................................. 11 Oprations arithmtiques lmentaires ............................................................... 11 Oprations sur les matrices ................................................................................. 11

3.
3.1 3.2 3.3

Oprateurs gnralistes de Matlab..................................................................18


Oprateurs de comparaison................................................................................. 18 Oprateurs logiques............................................................................................. 19 Autres fonctions de test ....................................................................................... 19

4.
4.1 4.2 4.3

Quelques fonctions rgulirement utilises ....................................................21


Dcompositions de matrices................................................................................. 21 Valeurs et vecteurs propres................................................................................. 22 Gestion des polynmes avec matlab .................................................................... 22

5.
5.1 5.2

La programmation avec Matlab......................................................................27


Ecriture de sous programmes.............................................................................. 27 Les structures de contrle ................................................................................... 28

6.
6.1 6.2

Manipulation des chanes de caractres .........................................................29


Reprsentation et fonctions lmentaires sur les chanes.................................... 29 Utilisation avance ......................................................................................... 30

7.
7.1 7.2 7.3

Graphisme avec Matlab ..................................................................................32


Gnralits........................................................................................................... 32 Les tracs en 2 dimensions................................................................................... 35 Les tracs en 3 dimensions................................................................................... 40

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

La toolbox optimisation ..................................................................................44


La programmation linaire.................................................................................. 44 La programmation quadratique .......................................................................... 45 Le vecteur des options ......................................................................................... 45 Loptimisation sans contrainte ............................................................................ 46 Optimisation avec contraintes ............................................................................. 49

10.

Conclusion ......................................................................................................50

Introduction Matlab

ISIMA-F4

1. Bienvenue dans Matlab


1.1 La fentre de commande Matlab
Lorsque vous ouvrez Matlab vous vous retrouvez face un prompt (le plus souvent 2 guillemets) qui vous invite entrer des commandes. L'une des plus utiles est assurment help qui appelle pour vous la commande d'aide. Utilise seule et sans argument, la commande help affiche la liste des sujets pour lesquels l'aide est disponible, chaque sujet tant accompagn d'une brve description des fonctionnalits qu'il contient. Par exemple :
help HELP topics: toolbox\local toolbox\optim matlab\datafun functions. matlab\elfun matlab\elmat matlab\funfun methods. matlab\general matlab\color matlab\graphics matlab\iofun matlab\lang matlab\matfun matlab\ops matlab\plotxy matlab\plotxyz matlab\polyfun matlab\sounds matlab\sparfun matlab\specfun matlab\specmat matlab\strfun matlab\dde matlab\demos Local function library. Optimization Toolbox. Data analysis and Fourier transform Elementary math functions. Elementary matrices and matrix manipulation. Function functions - nonlinear numerical General purpose commands. Color control and lighting model functions. General purpose graphics functions. Low-level file I/O functions. Language constructs and debugging. Matrix functions - numerical linear algebra. Operators and special characters. Two dimensional graphics. Three dimensional graphics. Polynomial and interpolation functions. Sound processing functions. Sparse matrix functions. Specialized math functions. Specialized matrices. Character string functions. DDE Toolbox. The MATLAB Expo and other demonstrations.

For more help on directory/topic, type "help topic".

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.

1.2 La gestion des commandes Matlab


Matlab reconnat deux types de commandes :

Y Les commandes internes (built-in commands) sont compiles l'intrieur


du noyau Matlab. Elle ne ncessitent donc pas de chargement de fichier supplmentaire.

Y Les commandes externes sont contenues dans des fichiers dextension .m


et de mme nom que la commande. Par exemple, la commande spy est stocke dans le fichier spy.m. De fait, lorsque vous tapez une commande au prompt de Matlab, 4 comportements diffrents sont possibles : 1) La commande correspond en fait un nom de variable, auquel cas la valeur de celle-ci est immdiatement affiche. 2) La commande est interne ; elle est immdiatement reconnue par le noyau de Matlab et excute

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

1.3 La ligne de commande Matlab


Celle-ci vous permet d'entrer vos commandes. Rappelons que Matlab est sensible la casse. Les commandes d'dition sont simples :

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

1.4 Outils usage gnral 1.4.1 Variables et constantes prdfinies


Matlab met disposition de l'utilisateur quelques variables et constantes prdfinies. Inf dnote . C'est le rsultat produit par une opration du style 1 / 0. Par exemple :
1/0 Warning: Divide by zero ans = Inf

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.

1.4.2 Contrle de la prcision des calculs


La tolrance du zro machine , est fixe par la variable standard eps. C'est--dire que pour certaines oprations telles que la recherche des valeurs singulires d'une matrice, par exemple, les nombres x tels que : -eps < x < eps seront considrs comme nuls. En modifiant cette borne, vous pouvez renforcer ou abaisser la svrit des tests de nullit. La valeur standard vaut :
eps eps = 2.2204e-016

1.4.3 Contrle du format d'affichage des nombres


La commande format permet d'influer sur le format d'affichage des nombres dans Matlab.

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

1.4.4 La gestion de l'espace de travail


La notion d'espace de travail est fondamentale en Matlab. La fentre de commandes de Matlab est un exemple d'espace de travail. Celui-ci est dtermin par l'ensemble des variables et des fonctions prsentes en mmoire. Cest une notion assimilable celle despace de visibilit (scope) dans les langages de programmation modernes. Lorsque vous demandez l'excution d'un fichier .m, ce dernier invoque un nouvel espace de travail vierge ( l'exception des variables globales dont nous reparlerons plus tard) qu'il remplit avec ses variables propres. Lorsque son excution se termine, son espace de travail meurt avec lui. Ainsi, chaque fichier .m contient son propre espace de nommage. Il n'y a donc aucun danger utiliser des noms courants pour les variables locales.

1.4.5 Gestion de la mmoire


Matlab fournit des primitives permettant de grer la mmoire occupe par un utilisateur :

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

Grand total is 13 elements using 104 bytes

Introduction Matlab

ISIMA-F4

Pour chaque variable on obtient les informations suivantes :

Y L'identificateur Y La dimension sous la forme Lignes by Colonnes. Un scalaire est donc de


dimension 1 by 1.

Y Le nombre d'lments. Cette information peut paratre redondante par


rapport la prcdente car l'on s'attend ce que le nombre d'lments soit gal au nombre de lignes multipli par le nombre de colonnes. En fait, cette information est utile lors de la gestion des matrices creuses o elle fait rfrence au nombre de cases rellement pleines.

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.

Y Finalement, la dernire colonne indique si l'identificateur fait rfrence des


donnes complexes ou relles. 1.4.5.2 Suppression de variables La commande clear permet de supprimer des objets de l'espace de travail. Utilise seule, elle dtruit l'ensemble des variables prsentes en mmoire. Comme nous l'indique help clear, d'autres syntaxes sont disponibles :
CLEAR Clear various quantities from the workspace. CLEAR removes all variables from the workspace. CLEAR VARIABLES does the same thing. CLEAR X removes variable or function X from the workspace. CLEAR FUNCTIONS removes all compiled M-functions. CLEAR MEX removes all links to MEX-files. CLEAR ALL removes all variables, functions and MEX links. If X is global, CLEAR X removes X from the current workspace, but leaves it accessible to any functions declaring it global. CLEAR GLOBAL X completely removes the global variable X. CLEAR GLOBAL removes all global variables.

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

Density Full Full Full

Complex No No No

Grand total is 5 elements using 40 bytes whos global Name c

Size 1 by 1

Elements 1

Bytes 8

Density Full

Complex No

Grand total is 1 elements using 8 bytes

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 Le nom d'un fichier pour la sauvegarde des informations


Introduction Matlab ISIMA-F4 10

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.

2. Les oprations lmentaires dans Matlab


2.1 Types de donnes
Matlab ne connat qu'un seul type de donnes : les matrices de rels. Ainsi, un scalaire est une 1 1-matrice et un n-vecteur une 1 n-matrice.

2.2 Oprations arithmtiques lmentaires


Matlab dispose du jeu complet d'oprations arithmtiques lmentaires sur les rels : + Addition - Soustraction * Multiplication / Division \ Division inverse (a \ b = b / a ) inutile sur les rels seuls mais diablement efficace avec des tableaux ! ^ Mise la puissance o les oprations sont donnes dans l'ordre croissant des priorits. Bien entendu, il est possible d'utiliser des expressions parenthses pour modifier l'ordre d'valuation.

2.3 Oprations sur les matrices


Dans cette partie, nous entendons le mot matrice au sens large, cest dire quil pourra signifier indiffremment matrice ou vecteur en labsence dindications plus prcises.

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 :

2.3.1 Saisie d'un vecteur


La premire manire de saisir un vecteur consiste tout simplement numrer ses composantes, spares par des espaces et entre des crochets. Par exemple :
v=[1 2.0 4.3] v = 1.0000 2.0000 4.3000

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

5 1.6000 1.8000 2.0000

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

Columns 8 through 11 5.2000 5.3000 5.4000 5.5000

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.

2.3.2 Saisir des matrices


L'exemple (simpliste !) suivant montre comment saisir une matrice toute bte avec Matlab.
A = [ 1 2 3 ; 4 5 6 ; 7 8 9] A = 1 4 7 2 5 8 3 6 9

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

a2=[v1' v2' v3'] a2 = 1 2 3 7 8 9 4 5 6 7 8 9

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 :

2.3.3 Obtenir la taille dune matrice


Deux commandes permettent de connatre la taille dune matrice : size renvoie un tableau dont le premier lment est le nombre de lignes et le second, le nombre de colonnes. Au cas o lon applique size un vecteur, cette commande renvoie un tableau dont lunique lment indique la taille du vecteur. length renvoie uniquement, sous forme scalaire, le nombre de colonnes dune matrice ou le nombre dlments dun vecteur. Exemple dutilisation de size et de length :
size(a1) ans = 3 3 length(a1) ans = 3

2.3.4 Construction de matrices particulires


eye(n) zeros(n,m) ones(n,m) rand(n,m) randn(n,m) Identit n n Matrice nulle n m Matrice n m dont tous les lments valent 1 Matrice n m cre alatoirement selon une loi uniforme entre 0 et 1 Matrice n m cre alatoirement selon une loi gaussienne centre et rduite ISIMA-F4 14

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

2.3.5 Oprations entre tableaux


Les oprations arithmtiques prsentes prcdemment sont utilisables sur les tableaux condition de respecter les dimensions. + et les dimensions des tableaux doivent tre identiques * les dimensions internes des tableaux doivent tre identiques. En particulier, on verra que pour multiplier une matrice droite par un vecteur, il faut transposer ce dernier pour quil devienne une colonne. Les oprateurs / \ servent rsoudre les systmes les systmes linaires. Lexemple suivant illustre lutilisation de * et \ avec des matrices.
a = [ 3 0 1 ; 0 5 -2 ; 1 -2 7 ] a = 3 0 1 0 5 -2 1 -2 7 x = [ 1 2 3 ] x = 1 2 3 b = a * x ??? Error using ==> * Inner matrix dimensions must agree. b = a * x' b = 6 4 18 y = a \ b y = 1.0000 2.0000 3.0000 y = b / a ??? Error using ==> / Matrix dimensions must agree. y = b' / a y = 1.0000 2.0000 3.0000

Cration dune matrice et dun vecteur reconnaissables

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

2.3.6 Oprations entre matrices et scalaires


Matlab gre convenablement les oprations mettant aux prises un tableau avec scalaire. Si + - et * ne posent pas de problme particulier, il est interdit dutiliser / et \. Nous verrons quil faut pour cela utiliser les oprations lment par lment.

2.3.7 Les oprations lment par lment (ou, au sens de Hadamar)


Ce sont des oprateurs qui agissent lment par lment sur une matrice. Leur signe caractristique est prcd dun point Si .+ et .- sont rigoureusement identiques + et (laddition et la soustraction se font toujours membre membre) il nen est pas de mme pour * et /. En effet la matrice c = a .* b a pour terme gnral cij=aij bij et c = a./b a pour terme gnral cij=aij/bij. Ces oprateurs sont particulirement utiles pour calculer des valeurs 1 tabules de fonctions. Par exemple : 1 + x2
x = [0.5 : 0.1 : 1]; y = 1.0 / (1+x.*x) ??? Error using ==> / Matrix dimensions must agree. y = 1.0 ./ (1+x.*x) y = 0.8000 0.7353 0.6711 0.6098 0.5525 0.5000

Lutilisation directe de la division nest pas possible entre un scalaire et un vecteur, il faut utiliser la division membre membre

2.3.8 Transformation dune matrice en vecteur


Parfois, il peut tre agrable de transformer une matrice en vecteur (pour effectuer certains calculs plus simplement par exemple). Dans ce cas, on utilise une version spciale de loprateur dindexation qui range dans un vecteur colonne les lments dune matrice colonne par colonne. En fait, cet oprateur ne fait rien de spcial sinon reflter lorganisation mmoire de Matlab, laquelle est fortement inspire du FORTRAN. Si vous dsirez stocker une matrice dans un vecteur mais ligne par ligne par colonne, alors, il faut transposer au pralable. Exemple :
a = [ 1 2 ; 3 3 ] a = 1 3 b = a' 2 4 a(:) ans = 1 3 2 4 b(:)

Introduction Matlab

ISIMA-F4

16

b = ans = 1 2 3 4 1 2 3 4

2.3.9 Modification du rangement des lments dans la matrice


Il existe deux autres oprations de rangement sur les matrices qui sont fliplr et flipud qui permettent respectivement dinverser lordre et celui des colonnes de la matrice. Notez au passage que fliplr permettra de retourner un vecteur. Exemple :
a a = 1 4 7 2 5 8 3 6 9 fliplr(a) ans = 3 6 9 2 5 8 1 4 7 flipud(a) ans = 7 4 1 8 5 2 9 6 3

2.3.10 Quelques oprations sur les matrices


Suit la liste de quelques unes des oprations les plus courantes ralises sur des matrices. inv rank cond norm mean std sum cumsum prod cumprod min, max, median Inverse la matrice Rang de la matrice Nombre de conditionnement de la matrice Norme 2 de la matrice. Il est possible dobtenir les autres normes en passant des paramtres supplmentaires. Moyenne de chaque colonne Ecart type de chaque colonne Somme de chaque colonne Somme cumule de chaque colonne Produit des lments de chaque colonne Produit cumul des lments de chaque colonne Minimum, maximum et mdiane des lments de chaque colonne

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.

3. Oprateurs gnralistes de Matlab


3.1 Oprateurs de comparaison
Ils renvoient des valeurs boolennes o 0 signifie faux et 1 vrai. == < > <= >= ~= On pourra comparer : Diffrence Ingalits Egalit

Y 2 scalaires Y 2 tableaux de mme taille Y 1 tableau et un scalaire


Tous ces oprateurs renvoient un tableau de mme taille que largument principal, par exemple :
v = [ 1 2 3 4 5 ] v = 1 2 3 4 5 0 0 0 a <= 3 ans = 1 4 7 v > 4 ans = 0 0 0 0 1 2 5 8 3 6 9 1 0 0 a <= 5 ans = 1 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 a == 2 ans =

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.

3.2 Oprateurs logiques


Ce sont des oprateurs boolens qui agissent sur des tableaux de 0 et de 1. Sont disponibles : & | xor ~ Et logique Ou logique Ou exclusif Non logique

3.3 Autres fonctions de test


Les fonctions is et apparentes renvoient un tableau boolen de mme taille que leur argument en fonction des valeurs quil contient isinf finite isnan 1 si valeur = -inf ou +inf Vrai pour toute valeur numrique diffrente de linfini ou de not a number Vrai si la valeur vaut not a number

Introduction Matlab

ISIMA-F4

19

find

Vrai si la valeur est non nulle

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. Quelques fonctions rgulirement utilises


Loin dtre exhaustif, ce chapitre propose une revue de quelques fonctions de Matlab rgulirement utilises et permettant de se familiariser

4.1 Dcompositions de matrices


Rien ne saurait remplacer la lecture help matfun pour une documentation complte sur les oprations disponibles sur les matrices. Nous ne donnons ici, titre dexemple que quelques unes des oprations de dcomposition.

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).

4.2 Valeurs et vecteurs propres


Matlab dispose dune fonction particulirement efficace permettant de trouver la liste des valeurs propres, ventuellement accompagnes de leurs vecteurs propres correspondants. Lextraction des valeurs propres se fait par la mthode QR acclre. Une tude mene par lauteur montre que lalgorithme employ est trs efficace hormis pour les matrices tri diagonale o la mthode spcifique ce type de matrice lemporte. Lexemple suivant illustre cette fonction nomme eig daprs le mot eigenvalue, valeur propre en Anglais. La syntaxe de eig peut paratre spciale. eig(a) renvoie un vecteur colonne des valeurs propres de la matrice [vecteurs, valeurs]=eig(a) renvoie une base de vecteurs propres et une matrice carre dont les lments diagonaux sont les valeurs propres correspondants.
a = [1 2 -1 4 ; 2 3 1 0 ; -1 1 -2 3 ; 4 0 3 -5] a = 1 2 -1 4 2 3 1 0 -1 1 -2 3 4 0 3 -5 [vecteurs,valeurs]=eig(a) vecteurs = 0.2508 0.1077 -0.8863 -0.3740 valeurs = -0.5726 0 0 0 0 1.2677 0 0 0 0 4.9436 0 0 0 0 -8.6386 0.6247 -0.6854 -0.0622 0.3689 0.6226 0.7123 0.1393 0.2925 0.3990 -0.1061 0.4372 -0.7990

4.3 Gestion des polynmes avec matlab 4.3.1 Reprsentation


Un polynme est reprsent sous la forme du vecteur de ses composantes par ordre dcroissant de degr i.e. le membre de degr le plus haut est gauche.

Introduction Matlab

ISIMA-F4

22

Par exemple 4x3 x+5 scrit [4 0 -1 5]

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

polyvalm(p,x) ans = -21 -18 58 -9 -1 20 29 20 -59

4.3.3 Oprations lmentaires sur les polynmes


La multiplication classique de polynmes seffectue par convolution des tableaux de coefficients, soit avec la fonction conv R = p x q scrit donc r=conv(p,q) La division euclidienne de polynmes (puissances dcroissantes) seffectue par dconvolution des tableaux de coefficients soit donc avec la fonction deconv. Par exemple, examinons le cas des polynmes x 2 + 3 x 1 et x 4 dont le produit vaut x 3 x 2 13 x 4 . La traduction en Matlab est la suivante :
p1=[ 1 3 -1 ] p1 = 1 3 -1 deconv(p3,p1) ans = 1 -4

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.

4.3.4 Rduction dune fraction rationnelle en lments simples du premier ordre


Matlab offre la fonction residue dont le but est de calculer la rduction en lments simples de premire espce dune fraction rationnelle. La syntaxe gnrale de ma fonction residue est la suivante :

[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

4.3.5 Calcul des racines du polynme


La fonction roots donne les racines relles ou complexes du polynme. Elle utilise la mthode de Mller puis affine les racines trouves par la mthode de Bairstow.

4.3.6 Polynmes et matrices


La fonction poly permet dextraire le polynme caractristique dune matrice. Lexemple suivant illustre cette fonctionnalit, qui, couple roots, permet dobtenir les valeurs propres dune matrice. Toutefois, la qualit des solutions obtenue est trs infrieure celle obtenue par la mthode directe utilisant la fonction eig. Nous reprenons lexemple prcdent sur les valeurs propres.
a = [1 2 -1 4 ; 2 3 1 0 ; -1 1 -2 3 ; 4 0 3 -5]; p=poly(a) p = 1.0000 roots(p) ans = -8.6386 4.9436 1.2677 -0.5726 3.0000 -46.0000 27.0000 31.0000

On retrouve bien les valeurs propres observs prcdemment ! (Ouf

-)

4.3.7 Interpolation polynomiale


Matlab propose des fonctions dinterpolation polynomiale au sens de Lagrange ou au sens des moindres carrs. 4.3.7.1 Interpolation polynomiale au sens des moindres carrs Soient deux sries x et y telle que y = f (x ) + o est un bruit de caractristiques inconnues. Soit un entier n. La fonction polyfit(x,y,n) renvoie un polynme de degr n approchant au mieux f au sens des moindres carrs. Lexemple graphique suivant expose cette fonctionnalit.

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

Code Matlab correspondant :


x=[-2*pi:0.1:2*pi]; y=sinc(x); bruite=y+randn(size(x))/4; p3=polyfit(x,bruite,3) -0.0272 0.0137 0.6010

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.

4.3.8 Exercice sur les polynmes


Ecrire (en trs peu de lignes) une fonction calculant la primitive qui sannule en 0 dun polynme.

5. La programmation avec Matlab


Matlab propose programmation. en standard des fonctionnalits avances de

5.1 Ecriture de sous programmes


Afin de pouvoir appeler un sous-programme de votre facture depuis la ligne de commande Matlab, il est important de le stocker dans un fichier portant le mme nom. Attention donc aux environnements o la taille du nom dun fichier est limite. La structure gnrale dun sous programme Matlab est la suivante :

[liste des arguments de retour] = nomdelafonction (parametres)


Lune des particularits les plus tonnantes de Matlab rside dans le fait que les fonctions peuvent avoir plusieurs rsultats. Si vous ne prcisez pas de variable laquelle affecter le rsultat dune fonction, seul le premier rsultat est fourni. La fonction lu permettant de calculer la factorisation LU dune matrice fournit un exemple typique, son utilisation est expose en dtails au chapitre . De mme, les paramtres en entre sont tous optionnels, il appartient donc au programmeur de vrifier quils sont prsents. Les variables nargin et nargout contiennent respectivement le nombre darguments passs en entre lappel de la fonction et le nombre de rsultats demands. Il faut galement se souvenir que toutes les variables que vous dclarez et utilisez lintrieur dun sous-programme y sont locales. Si vous voulez renvoyer un rsultat dans une variable il faut la rendre globale laide de lordre global ; auquel cas, il faut faire attention aux ventuelles collisions de nommage.

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.

5.2 Les structures de contrle


Matlab propose les structures de contrle les plus courantes : excution conditionnelle et rptitive

5.2.1 Excution conditionnelle


La structure gnrale dune structure (accompagne dun petit exemple) est la suivante :
if condition instructions elseif condition instructions else instructions end

dexcution

conditionnelle

if (i<j) a=a+b(i,j) else a=a+b(j,i) end

Un point important mrite dtre signal : lexpression condition se doit dtre scalaire et boolenne.

5.2.2 Excution rptitive


Matlab dispose des deux structures de boucle les plus courantes : les boucles avec compteur (for) et les boucles conditionnelles (while). Quel que soit le type de boucle choisi, il est possible dutiliser linstruction break pour sortir inconditionnellement de la boucle courante. 5.2.2.1 Structure gnrale de la boucle while
while condition instructions end

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.

6. Manipulation des chanes de caractres


Laide concernant la manipulation des chanes de caractres sobtient par help strfun.

6.1 Reprsentation et fonctions lmentaires sur les chanes


Dans Matlab, une chane de caractres est une squence de caractres encadre par des apostrophes, par exemple F4. Pour insrer une apostrophe dans une chane, il suffit de la doubler. En fait, elle est stocke sous la forme dun tableau de caractres, aussi la plupart des oprations de base disponibles sur les vecteurs seront utilisables sur les chanes. Par exemple, la longueur dune chane sobtient avec length. Toutefois, Matlab garde en mmoire un indicateur spcial indiquant si un tableau dentier est en fait une chane de caractres. La fonction isstr renvoie 1 si son argument est une chane de caractres. Matlab propose de passer de la reprsentation chane de caractre la reprsentation tableau de code ASCII et rciproquement laide des fonctions abs et setstr.

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

0 setstr([65 66 67]) ans = ABC

Transformation dun tableau de codes ASCII en chane

Exercices sur les chanes de caractres : ressortir le partiel de lan dernier.

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.

6.2.2 La fonction eval


Elle permet dvaluer une commande place dans une chane de caractres. Contrairement strnum qui ne pouvait raliser que les oprations de base, eval peut appeler des sous programmes. Il est possible de passer eval une seconde chane de caractres en second paramtre : elle sera value en cas dchec sur le premier paramtre.

6.2.3 Fonctions diverses


isletter(s) renvoie 1 pour chaque caractre alphabtique isspace(s) renvoie 1 pour chaque caractre blanc upper(s) transforme une chane en passant tous les caractres en majuscule lower(s) transforme une chane en passant tous les caractres en minuscule blanks(n) gnration dune chane de n espaces strcmp(s1,s2) effectue une comparaison lexicographique des chanes de caractres. Deux valeurs de retour sont possibles : 0 si les chanes sont diffrentes et 1 si elle sont identiques. Si vous voulez effectuer une comparaison des valeurs des chanes, utilisez pralablement eval strrep(cible, source, remplacement) remplace dans cible toutes les occurrences de source par remplacement strtok(s) renvoie le premier token de la chane. Si vous demandez un second rsultat, celui-ci contiendra le reste de la chane ; ce qui savre trs utile pour raliser des appels successifs findstr(source, recherche) recherche les positions de la chane recherche dans la chane source et renvoie le vecteur des positions trouves. Lexemple suivant illustre le fonctionnement de certaines de ces fonctionnalits.

Introduction Matlab

ISIMA-F4

31

chaine='Isima F4'; isletter(chaine) ans =

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

7. Graphisme avec Matlab


7.1 Gnralits
Commenons par une prcision importante. A lheure o ce torchon prend vie, lOurs Blanc des Carpathes ne dispose pas des dernires versions de Matlab. Il faut donc entendre que toutes les indications donnes ci-dessous sentendent pour la version 4.2 de Matlab. Matlab offre dintressantes possibilits de rendu graphique de donnes numriques, que cela soit en 2D ou en 3D. Notons immdiatement que les textes sont toujours affichs dans la mme police et quil nest pas possible den changer. En outre, nous ne donnerons ici quun bref aperu des fonctions graphiques les plus fondamentales de Matlab. Introduction Matlab ISIMA-F4 32

7.1.1 Maintient des donnes affiches


Par dfaut, tout ordre daffichage de donnes efface la fentre daffichage pour faire place nette ces donnes. Il est possible de modifier ce comportement grce la commande hold(on) qui active le mode rtention des donnes . Une fois dans ce mode, tout ordre daffichage superpose les nouvelles donnes ltat actuel de la fentre. Les axes sont ventuellement mis jour de manire ce que toutes les donnes soient affiches. Ce fonctionnement persiste jusqu la prochaine commande hold(off). La commande hold utilise sans paramtre agit comme bascule entre les deux modes.

7.1.2 Les chanes de format


Il est possible de spcifier le format dun trac dans une chane de caractres. Celle-ci est compose de caractres spcifiant le style de trac et la couleur. Voici la liste des codes correspondants : Style de trac Couleur Code Signification Code Signification y Dessin continu Jaune g Trait plein Vert : w Pointills Blanc _ _ m Gros pointills Rose _ . b Gros et petits pointills en alternance Bleu Dessin discret O * + . Petits ronds Etoiles Signes + Simples points k c r Noir Cyan Rouge

Par exemple, la chane ow place le graphique en mode dessin discret et place des petits ronds blancs aux divers points de donnes.

7.1.3 Axes du graphique


Par dfaut, Matlab affiche des axes permettant de se reprer facilement sur la figure. Ceux-ci sont gradus rgulirement. Matlab offre la possibilit de modifier, dans une certaine mesure, les axes du graphique laide de la commande axis. Celle-ci peut tre utilise sous un nombre impressionnant de formes diffrentes. Nous ne retiendrons ici que les principales. axis([xmin xmax ymin ymax]) spcifie ltendue des axes des abscisses et des ordonnes.

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.

7.1.4 Titre, lgendes et textes quelconques


title(chaine) permet de donner un titre un graphique. Il est toujours plac au dessus du graphique et centr. xlabel(chaine) place une lgende sous laxe horizontal ylabel(chaine) place une lgende gauche de laxe vertical. Le texte est crit verticalement zlabel(chaine) place une lgende sur laxe des ctes dans un graphique trois dimensions. Il nexiste pas de commande permettant de crer automatiquement une lgende, comme, par exemple, avec Excel. Il est toutefois possible de placer un texte quelconque, soit directement sur la figure laide de la souris par la commande gtext(chaine), soit en utilisant ces coordonnes avec text(x,y,chaine) o x et y sont les coordonnes du point le plus en bas gauche du texte dans le systme de coordonnes dfini par les donnes du dessin.

7.1.5 Sparation en plusieurs sous graphiques


Il sagit de la commodit que nous avons dj utilise lors de la prsentation de linterpolation polynomiale. Le but tait de crer une mosaque de graphiques. Ceci est ralis de faon trs simple grce la commande subplot(n,m,position). Celle-ci cre une n m matrice dont les cellules sont numrotes de 1 n m depuis le coin suprieur gauche et dans le sens habituel de la lecture. Le paramtre nomm position slectionne la cellule laquelle vont sappliquer tous les prochains ordres graphiques comme sil sagissait dun graphique isol. Introduction Matlab ISIMA-F4 34

La commande subplot(1,1,1) permet de revenir une configuration dessin unique.

7.2 Les tracs en 2 dimensions 7.2.1 La commande plot


La commande plot est la base de tout graphique en deux dimensions. La syntaxe est la suivante :
plot(abscisses, ordonnees [, format]{, abscisses, ordonnees [,format]}n)

Par exemple, la suite des commandes :


>> x=[-pi:0.1:pi]; >> y=sin(x); >> plot(x,y,'w:'); >>

donne le rsultat graphique suivant :


1

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.

7.2.2 Les commandes daffichage 2D discrtes


En plus de la commande plot qui permet dafficher un trac continu ou discret de donnes prsentes sous la forme dun tableau, Matlab propose toute une panoplie de commandes destines prsenter les donnes discrtes sous des formats spcialiss. Les commandes stem, bar et stairs permettent respectivement de crer des diagrammes btons, en barres (similaires un histogramme) et en escalier. Les paramtres sont similaires : Introduction Matlab ISIMA-F4 35

{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);

Gnration alatoire des notes Seuillage des notes 0

Seuillage des notes > 20 Gnration des classes

Elargissement des axes et addition denrichissements au graphique


axis([min(notes)-1 max(notes)+1 0 length(find(notes==13))+1]); xlabel('Notes'); ylabel('Contingences'); title('Rpartition des notes');

Rpartition des notes 10 8 Contingences 6 4 2 0 0

10 Notes ISIMA-F4

15

20

Introduction Matlab

37

7.2.3 Trac de courbes paramtriques


Le principe revient exprimer les abscisses et les ordonnes en fonction du paramtre puis les afficher avec la commande plot. Par exemple, visualisons la 2t x = 1 + t4 courbe Le code Matlab peut ressembler : 2t 3 y = 1 + t4
t=-1000:0.1:1000; x=(2.*t)./(1+t.^4); y=(2.*t.^3)./(1+t.^4); plot(x,y); title('Trac d''une courbe paramtrique');

Trac d'une courbe paramtrique 1.5 1 0.5 0 -0.5 -1 -1.5 -1.5

-1

-0.5

0.5

1.5

7.2.4 Courbes polaires


Il est possible dafficher des courbes polaires laide de la commande polar(theta, rho, format) o format fonctionne sur le mme principe que celui de plot. Par exemple, crivons une fonction qui affiche une rosace lcran. Celle-ci est dfinie par deux paramtres, la longueur des limbes a, et le nombre de limbes n.

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 :

Y Les angles theta en degrs Y Les amplitudes rho en units arbitraires


90 12 120 8 150 4 180 0 30 60

210 240 270 300

330

7.2.5 Echelles logarithmiques


Nous terminons cette brve introduction au graphisme en 2D de Matlab par ltude des fonctions permettant de traiter des donnes avec des chelles logarithmiques. Ces fonctions sont similaires plot : les arguments sont rigoureusement identiques. semilogx trace le graphique en utilisant une chelle logarithmique sur laxe des x et une chelle linaire sur laxe des y semilogy trace le graphique en utilisant une chelle linaire sur laxe des x et une chelle logarithmique sur laxe des y Introduction Matlab ISIMA-F4 39

loglog applique une transformation logarithmique sur les deux axes

7.3 Les tracs en 3 dimensions


Avouez que nous tiez nombreux lattendre cette section ! Et bien, vous serez mal rcompenss de vos efforts car, comme je suis miro 15me dan je suis bien mal plac pour vous placer du graphisme 3D Si toutefois, vous tes directement arrivs ici sans passer par la case 2D, je vous conseille dy jeter un petit il.

7.3.1 La commande plot3


Plot3 est au graphisme 3D ce que plot tait au graphisme 2D : la fonction de base permettant dafficher des courbes. Etudions son comportement sur une fonction paramtrique :
t=-3*pi:pi/10:3*pi; x=4*sin(t); y=4*cos(t); z=2*t; plot3(x,y,z), xlabel('Axe des abscisses'), ylabel('Axe des ordonnes'), zlabel('Axe des ctes');

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

7.3.2 Laffichage de surfaces


Laffichage de surfaces passe par la ralisation dun maillage du plan xy puis le calcul de la surface pour chacun des points le constituant. La constitution du maillage passe par lutilisation de la fonction meshgrid. Donnons dabord un exemple de son utilisation :
x=[-2:2]; y=[3:4]; [X,Y]=meshgrid(x,y) X = -2 -2 Y = 3 4 3 4 3 4 3 4 3 4 -1 -1 0 0 1 1 2 2

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.

8.2 Un exemple dutilisation


Ce petit bout de code montre lutilisation des commandes de mesure de performance et de nargout. Si un seul rsultat est demand, cette fonction renvoie la moyenne du tableau pass en paramtre. Les deuxime et troisime rsultats correspondent respectivement au nombre doprations et au temps de calcul.
function [moy,ops,temps]=moyenne(v) if ((nargin == 0) | (nargin > 1) | (nargout > 3)) error('Attention aux arguments : [moy,ops,temps]=moyenne(v)'); end if (nargout > 1) flops(0); if (nargout > 2) tic; end; end; moy=mean(v); if (nargout > 1) ops=flops; if (nargout > 2) temps=toc; end; end; end;

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

9.1 La programmation linaire


La fonction LP permet de calculer la solution dun programme linaire de taille relativement modeste. Sa syntaxe la plus gnrale, est la suivante :
[x, lambda]=LP(c,A,b,inf,sup,init,N,-1)

Avec : x Vecteur solution

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

9.2 La programmation quadratique


Matlab permet de rsoudre des problmes quadratiques sous un formalisme trs voisin de celui de la programmation linaire. En effet, voici la syntaxe la plus gnrale :
[x, lambda]=LP(H,c,A,b,inf,sup,init,N,-1)

La seule diffrence concerne la fonction minimiser qui est ici Hx, x + cx

9.3 Le vecteur des options


A partir de maintenant, toutes les procdures doptimisation utilisent un vecteur doptions. La taille de ce vecteur est de 18 rels. La plupart des cases sont en entre, mais certaines sont en sortie. Cest un vecteur trs gnral et seules certaines de ces cases sont utilises par lensemble dans algorithmes. Le tableau suivant rcapitule les informations rassembles dans ce vecteur (la premire colonne indique lindice de loptions, la seconde sil sagit dun paramtre en entre ou en sortie, la troisime donne une brve description de loption): 1 E Dtermine le niveau de renseignements fournis par lalgorithme : 0 1 2, 3, 4 E muet bavard

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)

Stratgie de recherche linaire ISIMA-F4 45

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

9.4 Loptimisation sans contrainte 9.4.1 Dimension 1


Le problme rsoudre est ici min f(x) sur lintervalle [a, b] o f est une fonction numrique (le rsultat est un scalaire) une seule variable. La fonction utilise est fmin. Cette fonction nappartient pas au paquetage optimisation mais au noyau central de Matlab. Sa syntaxe gnrale est trs simple : [Z,OPTIONS]=fmin(Fonction, a, b, OPTIONS, p1,p2,,p10) Avec : Fonction Chane de caractres indiquant lexpression de la fonction minimiser. Utiliser une chane de caractres permet dviter la cration dun fichier .m. Il est toutefois possible de donner le nom dun fichier .m

Introduction Matlab

ISIMA-F4

46

a,b

Bornes de lintervalle de minimisation Ici se terminent les arguments obligatoires

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

Seules les paramtres Fonction, a et b sont ncessaires.

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.3 Optimisation simplex


Dans certains cas, linformation sur les drives, mme du premier ordre, nest pas disponible. Il est alors possible de recourir loptimisation simplex de Brent (fmins) base uniquement sur des considrations gomtriques. Les arguments sont similaires ceux de fmin : fmins('f',x0,options,[],p1,p2,...) il est toutefois ncessaire de fournir une solution initiale (x0), et un vecteur vide juste aprs les options !

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')

Vous obtenez alors :

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)

9.5 Optimisation avec contraintes


Il faut dsormais non seulement passer la fonction minimiser mais galement les contraintes ! La syntaxe gnrale est la suivante :
constr(Fonction + contraintes, initial, options, inf, sup, gradient).

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

Y Le gradient de la fonction objectif et la matrice jacobienne des contraintes


sous la forme suivante :
% fichier consg.m function [gf,gg]=consg(x) t= exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); gf=[t+4*exp(x(1))*(2*x(1)+x(2)) ; 4*exp(x(1))*(x(1)+x(2)+0.5)]; gg = [ x(2)-1,-x(2);x(1)-1,-x(1)];

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

Le second argument est associ la matrice jacobienne des contraintes.

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

You might also like