Initiation Matlab

Embed Size (px)

Citation preview

  • Universit Paris-DauphineDpartement MIDO

    Introduction MATLAB

    -8-6

    -4-2

    02

    46

    8

    -10

    -5

    0

    5

    10-0.5

    0

    0.5

    1

    Andr Casadevall

    mars 2013

  • p. 2 AJ.Casadevall - mars 2013

  • Table des matires

    1 MATLAB 71.1 Quest ce que MATLAB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Une session MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.2.1 Lancer, quitter MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2 Fonctions et commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.3 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.4 Aide en ligne - help - lookfor . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.5 Liste des functions usuelles - helpwin . . . . . . . . . . . . . . . . . . . . . . 91.2.6 Interaction avec le systme dexploitation . . . . . . . . . . . . . . . . . . . . 9

    2 Les objets" de MATLAB - Listes, vecteurs, tableaux 112.1 Objets et classes de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Valeurs littrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.2.1 Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2.2 Tableaux de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.3 Caractres et chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . 142.2.4 Cellules et tableaux de cellules - cell array . . . . . . . . . . . . . . . . . . 14

    2.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.1 Identificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.2 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.3 Espace de travail - workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    2.4 Listes et vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.1 Construction de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.2 Construction de vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.3 Nombre dlments dune liste ou dun vecteur - length . . . . . . . . . . . . 202.4.4 Norme vectorielle - norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4.5 Accs aux lments dune liste ou dun vecteur - end . . . . . . . . . . . . . . 212.4.6 Extraction de sous-listes ou de sous-vecteurs . . . . . . . . . . . . . . . . . . 22

    2.5 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.5.1 Construction de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.5.2 Accs aux lments dun tableau - end . . . . . . . . . . . . . . . . . . . . . 232.5.3 Lignes et colonnes dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . 242.5.4 Sous-tableaux et blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5.5 Fonction repmat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5.6 lments diagonaux dun tableau - diag . . . . . . . . . . . . . . . . . . . . . 262.5.7 Fonction tril et triu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.5.8 Tableaux particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2.6 Fonctions oprant sur les lments dun tableau . . . . . . . . . . . . . . . . . . . . . 28

  • TABLE DES MATIRES

    2.6.1 Fonctions sum et prod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.6.2 Fonctions max et min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.6.3 Fonctions statistiques - mean et cov . . . . . . . . . . . . . . . . . . . . . . . 302.6.4 Fonctions abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.6.5 Norme matricielle dun tableau - norm . . . . . . . . . . . . . . . . . . . . . . 312.6.6 Rorganisation des lments dun tableau - reshape et sort . . . . . . . . . 31

    3 Expressions, scripts et fonctions 333.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2 Oprations de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2.1 Oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2.2 Oprateurs et oprations sur les tableaux . . . . . . . . . . . . . . . . . . . . 353.2.3 Oprations boolennes - Tableaux boolens . . . . . . . . . . . . . . . . . . . 363.2.4 valuation des expressions - ans . . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.3 Scripts et m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.2 Cration de m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.3 Excution dun m-file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.3.4 lments dcriture de m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.4 Structures algorithmiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4.1 Slection - if...end et if...else...end . . . . . . . . . . . . . . . . . . . . 423.4.2 Rptition - for...end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.4.3 Itration conditionnelle - while...end . . . . . . . . . . . . . . . . . . . . . . 453.4.4 Construction switch...case . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.4.5 Traitement des erreurs - try...catch...end . . . . . . . . . . . . . . . . . . 46

    3.5 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.5.1 m-Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.5.2 Fonctions Inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.5.3 Fonctions anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.5.4 Fonctions argument dautres fonctions . . . . . . . . . . . . . . . . . . . . . . 503.5.5 Commandes et fonctions nargin et nargout . . . . . . . . . . . . . . . . . . 51

    3.6 Optimisation des calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    4 MATLAB et lanalyse numrique 534.1 Fonctions numriques" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2 Polynmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.3 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4 Fonctions dune variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    4.4.1 Recherche de minimum - fmin . . . . . . . . . . . . . . . . . . . . . . . . . . 564.4.2 Recherche de racines - fzero . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.4.3 Intgration - trapz, quad et quad8 . . . . . . . . . . . . . . . . . . . . . . . . 57

    5 Courbes et surfaces 595.1 Fentres graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.1.1 Cration dune fentre - fonctions figure et gcf . . . . . . . . . . . . . . . . 595.1.2 Attributs dune fentre - get . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.2 Courbes du plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.2.1 La fonction plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.2.2 Tracer dans une ou plusieurs fentres . . . . . . . . . . . . . . . . . . . . . . . 625.2.3 La commande print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    p. 4 AJ.Casadevall - mars 2013

  • TABLE DES MATIRES

    5.2.4 Courbes paramtriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.2.5 Personnalisation des axes et de la plotting-box . . . . . . . . . . . . . . . . . 655.2.6 Autres fonctions de trac de courbes planes . . . . . . . . . . . . . . . . . . . 68

    5.3 Courbes de lespace - Fonction plot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 695.4 Surfaces de lespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    5.4.1 Modlisation du domaine [x0, x1] [y0, y1] - fonction meshgrid . . . . . . . . 695.4.2 Trac de la surface - fonctions mesh et surf . . . . . . . . . . . . . . . . . . 695.4.3 Surfaces et courbes de niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    6 Importation et exportation de donnes 736.1 Retour sur les commandes save et load . . . . . . . . . . . . . . . . . . . . . . . . . 73

    6.1.1 Enregistrement de la valeur de tableaux dans un fichier-text - save . . . . . 736.1.2 Retrouver la valeur dun tableau - load . . . . . . . . . . . . . . . . . . . . . 74

    6.2 Lire et crire dans un fichier Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.2.1 Importer des valeurs dun fichier Excel - xlsread . . . . . . . . . . . . . . . 756.2.2 Exporter des valeurs vers une feuille Excel - xlswrite . . . . . . . . . . . . 76

    7 Matrices-test 77

    8 Exemples 81

    Index 85

    AJ.Casadevall - mars 2013 p.5

  • TABLE DES MATIRES

    p. 6 AJ.Casadevall - mars 2013

  • 1MATLAB

    1.1 Quest ce que MATLAB? . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Une session MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.2.1 Lancer, quitter MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2 Fonctions et commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.3 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.4 Aide en ligne - help - lookfor . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.5 Liste des functions usuelles - helpwin . . . . . . . . . . . . . . . . . . . . . 91.2.6 Interaction avec le systme dexploitation . . . . . . . . . . . . . . . . . . . 9

    1.1 Quest ce que MATLAB?MATLAB pour MATtrix LABoratory, est une application qui a t conue afin de fournir un

    environnement de calcul matriciel simple, efficace, interactif et portable, permettant la mise enuvre des algorithmes dvelopps dans le cadre des projets linpack et eispack.MATLAB est constitu dun noyau relativement rduit, capable dinterprter puis dvaluer lesexpressions numriques matricielles qui lui sont adresses :

    soit directement au clavier depuis une fentre de commande ; soit sous forme de squences dexpressions ou scripts enregistres dans des fichiers-texte

    appels m-files (ou fichiers .m) et excutes depuis la fentre de commande ; soit plus rarement sous forme de fichiers binaires appels mex-files (ou fichiers .mex) gnrs partir dun compilateur C ou fortran.

    Ce noyau est complt par une bibliothque de fonctions prdfinies, trs souvent sous forme defichiersm-files, et regroups en paquetages ou toolboxes. A ct des toolboxes requises local etmatlab,il est possible dajouter des toolboxes spcifiques tel ou tel problme mathmatique, OptimizationToolbox, Signal Processing Toolbox par exemple, ou encore des toolboxes cres par lutilisateur lui-mme. Un systme de chemin daccs ou path permet de prciser la liste des rpertoires dans lesquelsMATLAB trouvera les diffrents fichiers m-files utiliss.

    1.2 Une session MATLABLinterface-utilisateur de MATLAB varie lgrement en fonction de la version de MATLAB et du

    type de machine utilise. Elle est constitu dune fentre de commande qui peut tre complte parune barre de menu et pour les versions les plus rcentes de plusieurs fentres, affichant lhistoriquede la session, la structure des rpertoires accessibles par MATLAB. . . Avant la premire utilisationde MATLAB, il est vivement recommand (cest mme indispensable dans le cas dune installation

  • CHAPITRE 1. MATLAB

    en rseau) que chaque utilisateur cre un rpertoire de travail, tpMatlab par exemple, o il pourraenregistrer ses fichiers. Lors de la premire session, le chemin daccs ce rpertoire sera ajoutaux chemins daccs connus de MATLAB (MATLABPATH), soit en utilisant litem Set Path du menuFile, soit en tapant la commande addpath suivie du chemin daccs au rpertoire de travail.1.2.1 Lancer, quitter MATLAB

    Dans lenvironnement unix, pour laner MATLAB on tape la commande matlab sur la lignede commande active ; dans les environnements Windows ou MacOs, il suffit de cliquer sur licne delapplication. La fentre de commande de MATLAB souvre alors et on tape les commandes ou lesexpressions valuer droite du prompt . Le processus dvaluation est dclench par la frappede la touche .

    A chaque dbut session, lutilisateur indiquera MATLAB que le rpertoire myMatlab dfiniprcdemment est le rpertoire de travail de la session en tapant la commande cd suivie du chemindaccs au rpertoire myMatlab.

    On quitte MATLAB en tapant quit dans la fentre de commande ou en slectionnant quit dansle menu File de la barre de menu pour les versions Windows ou MacOs.1.2.2 Fonctions et commandes

    Certaines fonctions de MATLAB ne calculent pas de valeur numrique ou vectorielle, mais ef-fectuent une action sur lenvironnement de la session en cours. Ces fonctions sont alors appelescommandes. Elles sont caractrises par le fait que leurs arguments (lorsquils existent) ne sontpas placs entre parenthses. Les autres fonctions se comportent de faon assez semblable auxfonctions mathmatiques et la valeur quelles calculent peut tre affecte une variable.

    Dans de nombreux cas, fonctions ou commandes peuvent tre appeles avec des arguments quidiffrent soit par leur nombre, soit par leur nature (nombre, vecteur, matrice, . . . ). Le traitementeffectu dpend alors du nombre et de la nature des arguments. Par exemple, nous verrons plusloin que la fonction diag appele avec une matrice pour argument retourne le vecteur constitu parsa diagonale principale ou vecteur diagonal. Lorsque cette mme fonction est appele avec unvecteur pour argument, elle retourne la matrice diagonale dont le vecteur-diagonal est le vecteurdonn. Aussi une fonction ou une commande nest pas caractrise par son seul nom, mais par sasignature cest dire lensemble constitu de son nom et de la liste des types de ses paramtres.1.2.3 Historique

    MATLAB conserve lhistorique des commandes. Il est donc possible laides des flches du clavierde remonter dans la liste des instructions dj entres pour retrouver une instruction particulirepour la rutiliser et ventuellement la modifier avant de lutiliser nouveau.1.2.4 Aide en ligne - help - lookfor

    MATLAB comporte un trs grand nombre doprateurs, de commandes et de fonctions. Tous neseront pas dcrits dans ce document dautant quune aide en ligne efficace peut tre utilise. Onpeut taper les commandes suivantes :

    help permet dobtenir laide de laide et donne une liste thmatique ; help nom de fonction donne la dfinition de la fonction dsigne et des exemples dutilisation ; lookfor sujet donne une liste des rubriques de laide en ligne en relation avec le sujet indiqu.

    Exemple 1.2.1 :

    >> lookfor minminus.m: %- Minus.uminus.m: %- Unary minus.REALMIN Smallest positive floating point number.

    p. 8 AJ.Casadevall - mars 2013

  • 1.2. UNE SESSION MATLAB

    FLOOR Round towards minus infinity.MIN Smallest component.FMIN Minimize function of one variable.FMINS Minimize function of several variables.COLMMD Column minimum degree permutation.GMRES Generalized Minimum Residual Method.QMR Quasi-Minimal Residual MethodSYMMMD Symmetric minimum degree permutation.. . .

    >> help fminFMIN Minimize function of one variable.X = FMIN(F,x1,x2) attempts to return a value of x which is a localminimizer of F(x) in the interval x1 < x < x2. F is a stringcontaining the name of the objective function to be minimized.

    X = FMIN(F,x1,x2,OPTIONS) uses a vector of control parameters.If OPTIONS(1) is positive, intermediate steps in the solution aredisplayed; the default is OPTIONS(1) = 0. OPTIONS(2) is the terminationtolerance for x; the default is 1.e-4. OPTIONS(14) is the maximumnumber of function evaluations; the default is OPTIONS(14) = 500.The other components of OPTIONS are not used as input controlparameters by FMIN. For more information, see FOPTIONS.

    X = FMIN(F,x1,x2,OPTIONS,P1,P2,...) provides for additionalarguments which are passed to the objective function, F(X,P1,P2,...)

    [X,OPTIONS] = FMIN(...) returns a count of the number of stepstaken in OPTIONS(10).

    Examplesfmin(cos,3,4) computes pi to a few decimal places.fmin(cos,3,4,[1,1.e-12]) displays the steps takento compute pi to about 12 decimal places.

    See also FMINS.

    1.2.5 Liste des functions usuelles - helpwinOn obtient la liste des fonction MATLAB usuelles en classes par thme en tapant helpwin : helpwin elfun affiche la liste des fonctions mathmatiques lmentaires, helpwin specfun affiche la liste des fonctions mathmatiques avances, helpwin elmat affiche la liste des fonctions matricielles lmentaires,

    1.2.6 Interaction avec le systme dexploitationLes commandes et fonctions suivantes permettent MATLAB dinteragir avec le systme dex-

    ploitation de la machine sur laquelle il est utilis : addpath path : ajoute le chemin daccs (path) la liste des chemins daccs connus de

    MATLAB (MATLABPATH) ; cd ou pwd : affiche le chemin daccs au rpertoire de travail actuel ; cd path : fixe le rpertoire de chemin daccs path comme repertoire de travail ;

    AJ.Casadevall - mars 2013 p.9

  • CHAPITRE 1. MATLAB

    dir ou ls : affiche le contenu du rpertoire de travail actuel ; delete : efface le fichier spcifi (peut tre utilise sous forme de fonction sous la forme :delete(nomDeFichier)) ;

    mkdir path : cre le repertoire de chemin daccs path ; rmpath path : supprime le chemin daccs (path) du (MATLABPATH) ; isdir (path ) : fonction boolenne qui retourne 1 si le chemin daccs (path) est celui dunrpertoire, 0 sinon ;

    filesep : variable dont la valeur est celle du symbole sparateur de lignes (dpend du systmedexploitation de la machine utilise) ;

    p. 10 AJ.Casadevall - mars 2013

  • 2Les objets" de MATLAB - Listes,vecteurs, tableaux

    2.1 Objets et classes de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Valeurs littrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.2.1 Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2.2 Tableaux de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.3 Caractres et chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . 142.2.4 Cellules et tableaux de cellules - cell array . . . . . . . . . . . . . . . . . 14

    2.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.1 Identificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.2 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.3 Espace de travail - workspace . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    2.4 Listes et vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.1 Construction de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.2 Construction de vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.3 Nombre dlments dune liste ou dun vecteur - length . . . . . . . . . . . 202.4.4 Norme vectorielle - norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4.5 Accs aux lments dune liste ou dun vecteur - end . . . . . . . . . . . . . 212.4.6 Extraction de sous-listes ou de sous-vecteurs . . . . . . . . . . . . . . . . . 22

    2.5 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.5.1 Construction de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.5.2 Accs aux lments dun tableau - end . . . . . . . . . . . . . . . . . . . . 232.5.3 Lignes et colonnes dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . 242.5.4 Sous-tableaux et blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5.5 Fonction repmat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5.6 lments diagonaux dun tableau - diag . . . . . . . . . . . . . . . . . . . . 262.5.7 Fonction tril et triu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.5.8 Tableaux particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2.6 Fonctions oprant sur les lments dun tableau . . . . . . . . . . . . . . 282.6.1 Fonctions sum et prod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.6.2 Fonctions max et min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.6.3 Fonctions statistiques - mean et cov . . . . . . . . . . . . . . . . . . . . . . 302.6.4 Fonctions abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.6.5 Norme matricielle dun tableau - norm . . . . . . . . . . . . . . . . . . . . . 31

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    2.6.6 Rorganisation des lments dun tableau - reshape et sort . . . . . . . . 31

    2.1 Objets et classes de MATLABUn objet est une abstraction du monde rel (pour MATLAB celui du calcul matriciel), qui

    caractrise par : des informations structures ou partie data (pour une matrice, par exemple, le nombre delignes, le nombre de colonnes, la valeur des coefficients . . . ) ;

    par un certain comportement dfini par des mthodes (pour les matrices, la somme, le produit. . . ).

    La famille des objets possdant le mme type de structure pour la partie data et les mme mthodesconstitue une classe.

    La classe fondamentale de MATLAB est la classe double qui modlise les tableaux mono oubi-dimensionnels de nombres rels ou complexes la norme IEEE (double array). Les nombresrels ou complexes sont considrs comme des tableaux 11. Cette classe permet galementde crer, mais de faon moins naturelle, des tableaux de dimension suprieure deux.

    Les classes suivantes, sont moins frquemment utilises : la classe char modlise les chanes de caractres (char array), un caractre unique tant

    une chane de longueur un ; la classe sparse modlise les matrices creuses (i.e. dont la plupart des lments sont nuls)relles ou complexes.

    A partir de la version 5, MATLAB a propos des structures de donnes complmentaires souventutilises dans les objets prdfinis de MATLAB, les objets graphiques en particulier :

    la classe structuremodlise les tableaux de structures" ; les structures" au sens deMATLABsont des structure de donnes assez semblables aux struct du C pour leur partie data dumoins (leurs composantes ou champs sont accessibles par une notation pointe) ;

    la classe cell modlise les tableaux de cellules" ou cell array ; les cellules sont des sortesde conteneurs dans les quels on peut plaer dautres objets ; on accde chacun par unenotation indice.

    Dans les versions antrieures la version 7, MATLAB ne proposait ni valeurs prdfiniestrue ou false ni classe pour modliser les boolens. Depuis la version 7 MATLAB possdeune classe logical . Comme dans les versions antrieures, false est associ la valeur 0 ; trueest associ 1 et par extension, toute valeur non nulle.

    En conclusion, toutes les classes de MATLAB sont associes des tableaux de structures dedonnes (au sens gnral) relativeent classiques.

    2.2 Valeurs littralesLe terme de valeur littrale dsigne les valeurs quon peut directement taper au clavier et qui

    peuvent tre alors affectes une variable.

    2.2.1 NombresLes nombres rels et entiers (MATLAB ne distingue pas entre rels et entiers) sont crits sous

    les formes dcimales ou scientifiques usuelles :

    2, 3.214, 1.21E33.

    Les nombres complexes sont crits sous la forme a+ bi, comme dans 1+2i.

    p. 12 AJ.Casadevall - mars 2013

  • 2.2. VALEURS LITTRALES

    Fonctions relatives aux nombres complexes real et imag renvoient respectivement la partie relle et la partie imaginaire du complexepass en paramtre,

    abs et arg renvoient respectivement le module et largument du complexe pass en paramtre, conj renvoie le complexe conjugu du nombre complexe pass en paramtre.

    2.2.2 Tableaux de nombresLes tableaux de nombres rels ou complexes de dimension un ou deux suivent la syntaxe sui-

    vante : un tableau est dlimit par des crochets ; les lments sont entrs ligne par ligne ; les lments appartenant la mme ligne sont spars par des espaces (ou par des virgules) ; les diffrentes lignes qui doivent possder le mme nombre dlments, sont sparespar des points-virgule.

    Exemple 2.2.1 :

    Les tableaux :

    1 2 3 4

    1234

    1 2 0 00 2 3 10 0 2 2

    scrivent sous la forme [1 2 3 4 ] [1; 2; 3; 4 ] [1 2 0 0 ; 0 2 3 1 ; 0 0 2 2 ] :

    >> [1 2 3 4 ]ans =1 2 3 4

    >> [1; 2; 3; 4 ]ans =1234

    >> [1 2 0 0 ; 0 2 3 1 ; 0 0 2 2 ]ans =1 2 0 00 2 3 10 0 2 2

    Lorsque toutes les lignes ne possdent pas le mme nombre dlments :

    >> [1 2 ; 1 2 3]??? Number of elements in each row must be the same.

    Dans la suite, on appelera : vecteur un tableau de format (n, 1) i.e. ne comportant quune seule colonne ; liste ou encore vecteur-ligne un tableau de format (1, n) i.e. ne comportant quune seuleligne ;

    tableau un tableau au sens commun du terme, cest dire une structure organise en ligneset colonnes.

    AJ.Casadevall - mars 2013 p.13

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    2.2.3 Caractres et chanes de caractresOn crit les caractres et les chanes de caractres entre apostrophes : a, toto et

    MATLAB les considre comme des chanes de caractres de longueur un.Dautre part, pour MATLAB, chanes de caractres et liste de caractres sont des objets de

    mme nature :Exemple 2.2.2 :

    La liste de caractres [a b c d e] est identique la chanes de caractres[abcde] :

    >>[a b c d e]ans =

    abcde

    Mieux encore, abcde ; [abc de] est identique abcde :

    >>[abc de]ans =

    abcde

    Cet exemple donne un ide du rle des crochets [ ]. Les crochets sont le symbole de loprateurde concatnation :

    concatnation "en ligne" lorsque le sparateur est un espace ou une virgule ; concatnation "en colonne" lorsque le sparateur est un point-virgule comme dans les tableaux

    de nombres (il est alors ncessaire que les listes de nombres ou de caractres ainsi concatnespossdent le mme nombre dlments).

    Exemple 2.2.3 :

    La liste de caractres [a b c d e] est identique la chanes de caractres[abcde] :

    >>[abc ; abcd]??? All rows in the bracketed expression must have the same

    number of columns.

    2.2.4 Cellules et tableaux de cellules - cell arrayUne cellule est un conteneur dans le quel on peut placer toute sorte dobjets : nombre, chane

    de caractres, tableau et mme tableau de cellules. Les tableaux de cellules permettent regrouperdans une mme structure des lments de nature trs diffrente. La syntaxe des tableaux de cellulesest voisine de celle des tableaux usuels, les crochets tant remplacs par des accolades.Exemple 2.2.4 :

    >> {paul 4 ; vincent 7;... 0}ans =

    paul [4]vincent [7]... [0]

    La manipulation des ces objets (sauf lorsquon on se limite des composants qui sont des nombresou des chanes de caractres) est un peu plus dlicate que celle des tableaux usuels et sera examinedans un prochain chapitre.

    p. 14 AJ.Casadevall - mars 2013

  • 2.3. VARIABLES

    2.3 VariablesUne caractristique de MATLAB est que les variables nont pas tre dclares, leur nature se

    dduisant automatiquement de lobjet qui leur est affect (cf. exemple 2.3.4 - section 2.3.3).2.3.1 Identificateurs

    Les rgles de dnomination des variables sont trs classiques : un identificateur dbute ncessairement par une lettre, ventuellement suivie de lettres, dechiffres ou du caractre soulign (_) ;

    sa longueur est infrieure ou gale 31 caractres ; dans les identificateurs, les majuscules sont distingues des minuscules (on dit quils sontcase-sensitive).

    Voici quelques identificateurs prdfinis : ans dsigne le rsultat de la dernire valuation ; pi est le nombre pi = 3, 416 ; eps dsigne lepsilon-machine", cest dire le nombre inf{ 0 tels que 1 < 1 + } ; inf dsigne linfini au sens dune valuation du type (1/0) ; NaN signifie Not a Number - peut tre le rsultat dune valuation du type (0/0) ; i,j - i et j reprsentent tous deux le nombre imaginaire unit (

    1) - attention ne pasutiliser i et j comme indices pour accder aux lments dun tableau ;

    realmin dsigne le petit nombre rel positif ; realmax dsigne le plus grand nombre rel positif.

    2.3.2 AffectationLe symbole daffectation de valeur une variable est le caractre =.

    Exemple 2.3.1 :

    >> a = [1 2 3 4 ]a =1 2 3 4

    >> a = abca =

    abc

    Lexemple ci-dessus montre bien que dans MATLAB les variables ne sont ni dclares ni types.2.3.3 Espace de travail - workspace

    Lensemble des variables et les objets qui leur sont associes constitue lespace de travail ouworkspace de la session en cours. Le contenu de cet espace de travail va se modifier tout au longdu droulement de la session et plusieurs commandes ou fonctions permettent de le grer de faonefficace.

    Les commande who et whosCes commandes (le nom dune commande est contrairement aux fonctions, suivi par la liste non

    parenthse du ou des paramtres) donnent la liste des variables composant lespace de travail. Lacommande who donne la liste des variables prsentes dans lespace de travail. La commande whosretourne une information plus complte comportant pour chaque variable, la dimension du tableauqui lui est associ, la quantit de mmoire utilise et la classe laquelle elle appartient.Exemple 2.3.2 :

    On dfinit les variables a, b et c :

    AJ.Casadevall - mars 2013 p.15

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    >> a = 2 ; b = azerty; c = [1 2 3 ; 5 3 4] ;% la partie de la ligne qui suit le symbole % est un commentaire% les points-virgules inhibent laffichage de la valeur des variables

    >> whoYour variables are :a b c

    La commande whos donne une information plus complte :

    whosName Size Bytes Classa 1x1 8 double arrayb 1x6 12 char arrayc 2x3 48 double array

    Grand total is 13 elements using 68 bytesleaving 14918672 bytes of memory free

    On peut galement appliquer whos avec pour argument une ou plusieurs variables :Exemple 2.3.3 :

    whos b cName Size Bytes Classb 1x6 12 char arrayc 2x3 48 double array

    Grand total is 12 elements using 60 bytes

    leaving 14918960 bytes of memory free.

    Ce dernier exemple montre bien que le type dune variable est induit par sa valeur.Exemple 2.3.4 :

    On modifie la valeur de la variable a son type est alors modifi en consquence :

    clear a = [1 2 3 4 ] ; whos aName Size Bytes Classa 1x4 32 double array

    a = abc ; whos aName Size Bytes Classa 1x3 32 char array

    Les fonctions size, size( ,1) et size( ,2)La fonction size retourne le couple (nl,nc) form du nombre de lignes nl et du nombre de

    colonnes nc du tableau associ la variable donne comme comme argument.Exemple 2.3.5 :

    On suppose que lenvironnement de travail est constitu des trois variables a, b et c de lexempleprcdent. La fonction size produit laffichage suivant :

    >> size(a)ans =1 1

    >> size(b)ans =1 6

    p. 16 AJ.Casadevall - mars 2013

  • 2.3. VARIABLES

    Pour accder plus facilement au nombre de lignes et au nombre de colonnes, on peut affecter lavaleur retourne par size un tableau deux lments [nl, nc] :

    >> size(c)>> [nl, nc] = size(c)nl =

    2nc =

    3

    Enfin size( ,1) et size( ,2) permettent laccs direct au nombre de lignes et au nombre decolonnes dun tableau :

    >> size(c,1)ans =

    2>> size(c,2)ans =

    3

    La fonction classLa fonction class retourne le nom de la classe laquelle appartient la variable donn comme

    comme argument.

    Exemple 2.3.6 :

    Avec le mme espace de travail que dans lexemple prcdent, la fonction class produit laffichagesuivant :

    >> ca = class(a)ca =

    double>> cb = class(b)cb =

    char

    Les commandes save, load et clear - fichiers.matLes commandes save, load et clear permettent dintervenir directement sur lenvironnement

    de travail : save permet de sauver tout ou partie de lespace de travail sous forme de fichiers binairesappels mat-files ou fichiers .mat, plus prcisment : save : enregistre la totalit de lespace de travail dans le fichier matlab.mat ; save nom de fichier : lespace de travail est enregistr dans le fichier nom de fichier ; save nom de variable . . .nom de variable : enregistre les variables indiques (et les objets

    qui leurs sont associs) dans un fichier .mat qui porte le nom de la premire variable ; save nom de fichier nom de variable . . .nom de variable : enregistre les variables dans le

    fichier dont le nom a t indiqu. load permet dajouter le contenu dun fichier .mat lespace de travail actuel ; clear supprime une ou plusieurs variables (et les objets aux quelles elles font rfrence) delenvironnement de travail, plus prcisment : clear sans argument, supprime toutes les variables de lespace de travail actuel ;

    AJ.Casadevall - mars 2013 p.17

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    clear nom de variable . . .nom de variable : supprime les variables indiques de lespace detravail.

    Exemple 2.3.7 :

    Cet exemple illustre les effets de save, load et clear. Tout dabord on dfinit trois variables a, bet c

    >> a = 1; b = 2.5; c = helloc =

    hello>> save a b% les variables a et b sont enregistres dans le fichier a.mat cr% dans le rpertoire de travail>> clear a b% les variables a et b sont supprimes comme le montre lvaluation>> a, c??? Undefined function or variable ac =

    hello>> load a% on copie les variables du fichier a.mat dans lespace de travail en cours>>>> x = a + bx =

    3.5% les variables a et b sont bien prsentes

    2.4 Listes et vecteursLes listes et les vecteurs sont des tableaux de nombres au format particulier : un vecteur est un

    tableau qui ne comporte quune seule colonne ; une liste (ou vecteur-ligne) est un tableau qui necomporte quune seule ligne. MATLAB propose un certain nombre de fonctions qui en simplifientlusage.2.4.1 Construction de listesValeurs littrales de type liste

    Ainsi que nous lavons dj vu, on peut dfinir la valeur dune liste en donnant la suite de seslments spars par des espaces (ou des virgules) ; la liste est dlimite par des crochets :

    Exemple 2.4.1 :

    >> l1 = [1 3 5 10 ] , l2 = [2, 4]l1 =

    1 3 5 10l2 =

    2 4

    Constructeur de listesLexpression (vi : p : vf ) cre une liste dont les lments constituent une progression arithm-

    tique de valeur initiale vi, de pas p et dont tous les termes sont infrieurs ou gaux vf . Lorsquela valeur du pas est omise comme dans lexpression (vi : vf ), la valeur du pas est par dfaut fixe

    p. 18 AJ.Casadevall - mars 2013

  • 2.4. LISTES ET VECTEURS

    un.

    Exemple 2.4.2 :

    >> l2 = 1 : 4l2 =

    1 2 3 4% le pas par dfaut vaut 1>> l3 = 1 : 5.6l3 =

    1 2 3 4 5(puisque 5.0000 + 1 est strictement suprieur 5.6)

    >> l4 = 1.5 : 0.3 : 2.5l4 =

    1.5000 1.8000 2.1000 2.4000(puisque 2.4000 + 0.3 est strictement suprieur 2.5)

    Fonctions valeur liste La fonction linspace(vi, vf , n) cre une liste de n nombres uniformment rpartis entre lesvaleurs vi et vf ; linspace(vi, vf , n) est quivalent

    (vi :

    vf vin 1 : vf

    ).

    La fonction ones(n) cre une liste de n lments tous gaux 1 ; La fonction zeros(n) cre une liste de n lments tous gaux 0.

    Exemple 2.4.3 :

    >> l4 = linspace(0,5, 2, 4)l4 =

    0,5000 1.0000 1.5000 2.0000

    Dans la suite (c.f. 2.5.8), on dcouvrira dautres fonctions qui permettent de construire des tableauxde format (m,n) quelconque ; ces fonctions permettent en consquence la construction de listes etde vecteurs particuliers.

    2.4.2 Construction de vecteursValeurs littrales de type vecteur

    On peut dfinir la valeur dun vecteur en tapant entre deux crochets la suite de ses lmentsspares par des points-virgule comme on le voit dans lexemple suivant :

    Exemple 2.4.4 :

    >> v1 = [1 ; 3 ; 5 ]v1 =

    135

    TranspositionLoprateur de transposition est not (ou . pour les listes et les vecteurs de nombres com-

    plexes).

    AJ.Casadevall - mars 2013 p.19

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    La transpose dune liste tant un vecteur, pour construire des vecteurs, on peut utiliser lesexpressions et les fonctions vues pour les listes puis transposer le liste obtenue.

    Exemple 2.4.5 :

    >> v2 = [1 2 3]v2 =

    123

    >> v3 = (1.5 : 0.3 : 2.5)v3 =

    1.50001.80002.10002.4000

    On noubliera pas les parenthses ncessaires pour dlimiter le constructeur de liste.

    2.4.3 Nombre dlments dune liste ou dun vecteur - lengthLa fonction size applique une liste ou un vecteur retourne, comme pour tous les tableaux,

    le nombre de lignes et le nombre de colonnes de la liste ou du vecteur. Le nombre de ligne dune listeest bien videmment un. La mme remarque vaut pour le nombre de colonnes dun vecteur. Aussi,pour les listes et les vecteurs on utilise de prfrence la fonction length qui retourne le nombredlments ou longueur de la liste ou du vecteur.

    Exemple 2.4.6 :

    >> l = [1 2 3 4] ; length(l)ans =

    4>> v = [5 6 7 8 9] ; length(v)ans =

    5

    Remarque :!!!

    Les exemples prcdents montrent que lon peut crire sur la mme ligne plusieurs expressions lasuite la condition de les sparer par une virgule ou un point-virgule. La diffrence entre ces deuxsparateurs est que le rsultat de lvaluation dune expression suivie dun point-virgulenest pas affich.

    2.4.4 Norme vectorielle - normLa notion de longueur synonyme de nombre dlments ne doit pas tre confondue avec la notion

    mathmatique de norme vectorielle. Les fonctions suivantes permettent de calculer les normesusuelles dun vecteur ou dun vecteur-ligne (ou liste) v de Rn :

    norm(v,p) =[

    nk=1|vk|p

    ]1/p

    p. 20 AJ.Casadevall - mars 2013

  • 2.4. LISTES ET VECTEURS

    norm(v) = norm(v,2) =[

    nk=1

    (vk)2]1/2

    norm(v,inf) = maxk|vk|.

    Exemple 2.4.7 :

    >> l = [1 1 1 1] ; v = l ; norm(v)ans =

    2>> norm(l)ans =

    2

    2.4.5 Accs aux lments dune liste ou dun vecteur - endSoient s une liste ou un vecteur non-vide, et k un entier compris entre 1 et la longueur de la

    liste ou du vecteur considr (1 k length(s)). On accde llment dindice k de la liste ou duvecteur s par s(k), le premier lment de la liste ou du vecteur tant indic par 1. s(end) dsignellment de plus grand indice de la liste ou du vecteur.Attention ne pas utiliser i ou j qui dsignent

    1, pour indicer les lments dune liste ou dunvecteur (c.f. 2.3.1).

    Exemple 2.4.8 :

    >> s = [1 3 5 8] ; s(1)ans =

    1>> k = 3 ; s(k)ans =

    5>> s(end)ans =

    8

    Laccs en lecture un lment dindice ngatif ou dont la valeur est strictementsuprieure la longueur de la liste (ou du vecteur), conduit une erreur :

    Exemple 2.4.9 :

    >> s = [1 3 5] ; length(s)ans =

    3>> s(4)??? Index exceeds matrix dimensions.

    Par contre, il est possible daffecter une valeur un lment dune liste ou dun vecteurdont lindice dpasse la longueur de la liste ou du vecteur. Comme le montre lexemplesuivant, les lments dont lindice est compris entre la longueur de la la liste (ou du vecteur) etlindice donn sont affects de la valeur 0. La longueur de la liste (ou du vecteur) est alors modifieen consquence.

    Exemple 2.4.10 :

    AJ.Casadevall - mars 2013 p.21

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    >> s = [1 3 5] ; length(s)ans =

    3>> s(6) = 6 ; ss =

    1 3 5 0 0 6>> length(s)ans =

    6

    2.4.6 Extraction de sous-listes ou de sous-vecteursSoient s une liste (ou un vecteur) non-vide et lst une liste dentiers dont la valeur est

    comprise entre 1 et la longueur length(s) de la liste (ou du vecteur), alors s(lst) est laliste (ou le vecteur) form par les lments de s dont lindice appartient lst.

    Exemple 2.4.11 :

    >> s = [1 3 5 0 0 6] ;% on veut extraire de s la sous-liste forme des lments de rang impair% on dfinit lst par :lst = 1 : 2 : length(s) ; % on aurait aussi pu crire : lst = [1 3 5]s(lst) =

    1 5 0

    2.5 Tableaux2.5.1 Construction de tableauxValeurs littrales de type tableau

    On a dj vu que pour dfinir la valeur dun tableau (sauf pour les tableaux dordre 1), il suffitde concatner en colonne des listes de nombres de mme longueur :Exemple 2.5.1 :

    Le tableau

    1 2 0 00 2 3 10 0 2 1

    est dfini par :

    >> T = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 1]T =

    1 2 0 00 2 3 10 0 2 1

    Concatenation de tableaux - [ ]Loprateur [ ] permet la concatnation de tableaux : si les tableaux {Tk}k=1,2, ,n possdent le mme nombre de lignes les expressions quiva-

    lentes [T1, T2, , Tp] ou [T1T2 Tp] crent un tableau : qui a le mme nombre de lignes que les tableaux composants ;

    p. 22 AJ.Casadevall - mars 2013

  • 2.5. TABLEAUX

    dont le nombre de colonnes est la somme des nombres de colonnes de chacun des tableauxcomposants ;

    qui est obtenu en concatnant en ligne" les tableaux composants. si les tableaux Tk ont le mme nombre de colonnes lexpression [T1;T2; ;Tp] cre untableau : qui a le mme nombre de colonnes que les tableaux composants ; dont le nombre de lignes est la somme des nombres de lignes de chacun des tableauxcomposants ;

    qui est obtenu en concatnant en colonne" les tableaux composants.

    Exemple 2.5.2 :

    >>T1 = [1 2 ; 2 3]T1 =

    1 22 3

    >>T2 = [3 4 ; 6 7]T2 =

    3 46 7

    >> T3 = [T1 , T2] ou [T1 T2]T3 =

    1 2 3 42 3 6 7

    >> T4 = [T1 ; T2]T4 =

    1 22 33 46 7

    2.5.2 Accs aux lments dun tableau - endSoient T un tableau, et l et k deux entiers tels que (1 l size(T,1)) et (1 k size(T,2)).

    Alors T(l,k) dsigne llment de la ligne l et de la colonne k du tableau T.Utilis comme indice de ligne, respectivement de colonne, end est gal la plus grande valeurpossible pour cet indice.Attention ne pas utiliser i ou j qui dsignent

    1, pour indicer les lments dun tableau (c.f.2.3.1).

    Exemple 2.5.3 :

    >>T = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 4]T =

    1 2 0 00 2 3 10 0 2 4

    >> x = T(2, 3)x =

    3>> x = T(2, end)x =

    AJ.Casadevall - mars 2013 p.23

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    1>> x = T(end, end)x =

    4

    Laccs en lecture un lment dont les indices seraient ngatifs ou dont la valeur seraitstrictement suprieure au nombre de lignes ou au nombre de colonnes du tableau,conduit une erreur :

    Exemple 2.5.4 :

    >>x = T(1,5)??? Index exceeds matrix dimensions

    Par contre, il est possible daffecter une valeur un lment dun tableau dont les indicesdpassent le nombre de ligne pour le premier indice, le nombre de colonnes pour le second.Comme le montre lexemple suivant, les lments du tableau dont les indices sont compris entre lenombre de lignes et le nombre de colonnes, et les indices spcifis, prennent la valeur 0.

    Exemple 2.5.5 :

    >> T = [1 2 0 0 ; 0 2 3 1 ; 0 0 2 1]T =

    1 2 0 00 2 3 10 0 2 1

    >> T(1,5) = 2T =

    1 2 0 0 20 2 3 1 00 0 2 1 0

    2.5.3 Lignes et colonnes dun tableauSoient T un tableau et l un entier compris entre 1 et la nombre de lignes du tableau. Alors

    T(l,:) dsigne la ligne l de T et T(end,:) dsigne la dernire ligne de T . De mme, si k est unentier compris entre 1 et le nombre de colonnes de T, T(:,k) dsigne la colonne k de T et T(:,end)dsigne la dernire colonne de T .

    Exemple 2.5.6 :

    >> T1 2 0 0 20 2 3 1 00 0 2 1 0

    >> x = T(2, :)x =

    0 2 3 1 0>> y = T(:, 3)y =

    032

    p. 24 AJ.Casadevall - mars 2013

  • 2.5. TABLEAUX

    2.5.4 Sous-tableaux et blocsSoient T un tableau, l une liste dentiers compris entre 1 et le nombre de lignes de T, et k une

    liste dentiers compris entre 1 et le nombre de colonnes de T. Alors T(l, k) est le sous-tableau deT form par les lments de T dont lindice de ligne appartient l et lindice de colonne appartient k.

    Exemple 2.5.7 :

    >> T = [1 2 3 4 5 ; 2 2 3 1 0 ; 3 0 2 1 1]1 2 3 4 52 2 3 1 03 0 2 1 1

    >> l = [1 2]; k = [1 3 5];>> T1 = T(l, k)

    T1 =1 3 52 3 0

    T(l, k) est un bloc lorsque les listes l et k sont constitues dentiers conscutifs, ce qui est le casde T2 dans lexemple suivant :

    Exemple 2.5.8 :

    >> T = [1 2 3 4 5 ; 2 2 3 1 0 ; 3 0 2 1 1]1 2 3 4 52 2 3 1 03 0 2 1 1

    >> l = [1 2]; k = [1 2 3];

    >> T2 = T(l, k)T2 =

    1 3 32 2 3

    2.5.5 Fonction repmatLa fonction repmat ralise lopration inverse. Elle permet la cration dun "grand" tableau

    dont chaque bloc est identique au tableau pass comme premier argument ; les deux autres argu-ments reprsentent respectivement le nombre de fois o la matrice-argument est rpte suivant lescolonnes, respectivement suivant les lignes :

    Exemple 2.5.9 :

    >> T = [ 1 3 ; 2 4]1 23 4

    >> T1 = repmat( T, 2, 3)T1 =

    1 2 1 2 1 23 4 3 4 3 41 2 1 2 1 23 4 3 4 3 4

    AJ.Casadevall - mars 2013 p.25

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    2.5.6 lments diagonaux dun tableau - diagSoit T un tableau, diag(T) retourne le vecteur (vecteur diagonal de T) form des lments

    de la diagonale "principale" de T, cest dire les lments de la forme T(p,p) o p est un en-tier compris entre 1 et min(size(T,1), size(T,2)) ; remarquons quil nest pas ncessaire que letableau T soit carr.Plus gnralement pour tout entier k compris entre size(T,1) et size(T,2), on appelle diago-nale de rang k lensemble des lments de T de la forme T(p, p+k) o :

    1 k size(T,2) et 1 p min(size(T,1), size(T,2) k) (sur-diagonale de rang k) k = 0 et 1 p min(size(T,1), size(T,2)) (diagonale principale) size(T,1) k 1 et 1 k p min(size(T,1), size(T,2) k) (sous-diagonale derang k-

    La fonction diag(T,k) retourne le vecteur form des lments de la diagonale de rang k de T.

    Exemple 2.5.10 :

    >> T = [ 1 2 3 4 5 ; 2 2 0 0 2 ;3 2 3 1 0 ; 4 0 2 1 1]

    1 2 3 4 52 2 0 0 23 2 3 1 04 0 2 1 1

    >> v = diag(T) % diagonale "principale"v =

    1231

    >> v = diag(T,1) % sur-diagonale de rang 1v =

    2011

    >> v = diag(T,-2) % sous-diagonale de rang 2v =

    30

    2.5.7 Fonction tril et triuLes fonctions tril et triu extraient respectivement les termes situs sur et au-dessous de la

    diagonale de rang k, et les termes situs sur et au-dessus de la diagonale de rang k.

    p. 26 AJ.Casadevall - mars 2013

  • 2.5. TABLEAUX

    Exemple 2.5.11 :

    Avec le mme tableau T que dans lexemple 2.5.10 ci-dessus :

    >> tril(T,1)ans =

    1 2 0 0 02 2 0 0 03 2 3 1 04 0 2 1 1

    >> triu(T,1)ans =

    0 2 3 4 50 0 0 0 20 0 0 1 00 0 0 0 1

    Remarque : !!!

    tril(t,0) scrit aussi tril(t), de mme, triu(t,0) scrit aussi triu(t).

    2.5.8 Tableaux particuliersLes fonction ci-dessous permettent de construire des tableaux correspondant aux matrices

    usuelles : identit, matrice nulle, ainsi qu des matrices-test trs utiles pour valider des algorithmesdanalyse matricielle (voir aussi la fonction gallery) .

    Fonction Argument Rsultatdiag(s) un vecteur ou une liste s matrice diagonale dont la diagonale est

    la liste ou le vecteur svander(s) un vecteur ou une liste s matrice de Vandermonde dordre

    length(s) engendre par seye(n) un entier n matrice identit dordre n Ineye(n,m) deux entiers n et m sous-matrice (n,m) de Imax(n,m) (1)hilb(n) un entier n matrice de Hilbert dordre n : hi,j = 1/(i+ j 1)

    invhilb(n) un entier n inverse de la matrice de Hilbert dordre nmagic(n) un entier n carr magique dordre nones(n) un entier n matrice A carre dordre n telle que ai,j = 1

    ones(n,m) deux entiers n et m matrice A de format (n,m) telle que ai,j = 1pascal(n) un entier n matrice de Pascal dordre nrand(n) un entier n matrice alatoire carre dordre nzeros(n) un entier n matrice nulle dordre nzeros(n,m) deux entiers n et m matrice nulle de format (n,m) (1)zeros(n,1) un entier n vecteur nul de Rn

    wilkinson(n) un entier n matrice de Wilkinson dordre n

    (1) Les fonctions eye, ones et zeros peuvent tre appeles avec deux arguments entiers n et m. Lersultat est alors une matrice de format n m forme des n premires lignes et des m premires

    AJ.Casadevall - mars 2013 p.27

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    colonnes de la matrice carre du mme type dordre max(n,m).Dautre part, on peut remarquer que la fonction diag retourne une valeur trs diffrente suivant letype de son argument (cette proprit est appele polymorphisme) :

    lorsque largument est un tableau, diag retourne le vecteur diagonal du tableau ; lorsque largument est un vecteur, diag retourne une matrice diagonale dont le vecteur dia-gonal est largument avec lequel diag est appel .

    Ce petit exemple illustre les deux aspects de la fonction diag :

    Exemple 2.5.12 :

    >> T =1 2 31 2 10 1 3

    >> d = diag(T)) % d est le vecteur diagonal de Td =

    123

    >> D = diag(diag(T)) % D est le tableau diagonal dont la diagonale est celle de TD =

    1 0 00 2 00 0 3

    2.6 Fonctions oprant sur les lments dun tableauLes fonctions prsentes ci-dessous effectuent des oprations arithmtiques itrativement sur les

    lments dune liste ou dun vecteur. Appliques un tableau, elles effectuent ces mmes oprationssur les colonnes du tableau (sauf pour cov). Ce sont des fonctions extrmement efficaces (c.f. 3.6).2.6.1 Fonctions sum et prod

    Applique une liste ou un vecteur, la fonction sum (respectivement prod) calcule la somme(respectivement le produit) des lments la liste ou du vecteur.

    Applique un tableau la fonction sum (respectivement prod) retourne une liste dont chacundes lments est la somme (respectivement le produit) des lments de chaque colonne.

    Exemple 2.6.1 :

    >> s = [5 2 3 1 7] ; p = prod(s) , s = sum(s)p =210s =

    18

    >> T = vander([1 2 3])T =

    1 1 14 2 19 3 1

    p. 28 AJ.Casadevall - mars 2013

  • 2.6. FONCTIONS OPRANT SUR LES LMENTS DUN TABLEAU

    >> p = prod(T)p =36 6 1

    >> s = sum(T)s =14 6 3

    2.6.2 Fonctions max et min Applique une liste ou un vecteur, la fonction max (respectivement min) dtermine le plus

    grand lment (respectivement le plus petit lment) de la liste ou du vecteur et ventuelle-ment la position de cet lment dans la liste ou le vecteur.

    Applique un tableau la fonction max (respectivement min) retourne la liste des plus grands(respectivement plus petit lments) de chaque colonne.

    Exemple 2.6.2 :

    >> s = [5 2 3 1 7] ; [ma, ind] = max(s)ma =

    7ind =

    5

    >> [mi, ind] = min(s)mi =

    1ind =

    4

    Exemple 2.6.3 :

    >> T = magic(3) , [ma, ind] = max(T)T =

    8 1 63 5 74 9 2

    ma =8 9 7

    ind =1 3 2

    Pour obtenir la valeur de llment maximal du tableau, il suffit dapplique deux fois la fonctionmax :

    Exemple 2.6.4 :

    >> m = max(max(T))m =

    9

    AJ.Casadevall - mars 2013 p.29

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    2.6.3 Fonctions statistiques - mean et cov Applique une liste ou un vecteur, la fonction mean dtermine la moyenne des lment dela liste ou du vecteur.

    Applique une liste ou un vecteur, cov dtermine la variance des lment de la liste ou duvecteur.

    Exemple 2.6.5 :

    >> s = [5 2 3 1 7] ; m = mean(s)m =

    3.6000>> c = cov(s)c =

    5.8000

    Applique un tableau la fonction mean retourne la liste des moyennes des lments de chaquecolonne.

    Applique un tableau o chaque ligne reprsente une observation et o chaque colonnecorrespond une variable, la fonction cov retourne la matrice de covariance des lments dutableau.

    Exemple 2.6.6 :

    >>T = pascal(3) , m = mean(t)T =

    1 1 11 2 31 3 6

    m =1.0000 2.0000 3.3333

    On obtient la moyenne des lments du tableau par :

    >> m = mean(mean(T))m =

    2.1111

    Pour la covariance :

    >>C = cov(T)C =

    0 0 00 1.0000 2.50000 2.5000 6.3333

    Pour obtenir la variance de chaque colonne sous forme de vecteur-ligne :

    >> c = diag(cov(T))c =

    0 1.0000 6.3333

    2.6.4 Fonctions absLa fonction abs (nous le verrons dune faon plus dtaille dans le prochain chapitre) applique

    a un tableau retourne un tableau de mme format dont les lments sont les valeurs absolues deslments du tableau argument.

    p. 30 AJ.Casadevall - mars 2013

  • 2.6. FONCTIONS OPRANT SUR LES LMENTS DUN TABLEAU

    Exemple 2.6.7 :

    >>T =

    1 -1 1-1 -2 31 3 -6

    >> U = abs(T)U =

    1 1 11 2 31 3 6

    2.6.5 Norme matricielle dun tableau - normTout comme les normes vectorielles le font pour les vecteurs ou les listes, les normes matriciel-

    les donnent une mesure de la taille des lments dun tableau. La fonction norm permet le calculdes normes matricielles usuelles dun tableau. Si T dsigne un tableau de format (m,n) :

    norm(T) retourne la plus grande valeur propre de TT T ;

    norm(T,1) = maxk

    ml=1|T (l, k)| = max(sum(abs(T)))

    norm(T, 2) = norm(T)

    norm(T, inf) = maxl

    nk=1|T (l, k)| = max(sum(abs(T)))

    norm(T,fro) =

    nk=1

    ml=1

    T (l, k)2 = sqrt(sum(diag(T*T))) (norme de Frobenius).

    Dans les dfinitions ci-dessus, dans T*T par exemple, * est loprateur MATLAB du produit ma-triciel.2.6.6 Rorganisation des lments dun tableau - reshape et sort

    Soit T un tableau de format (m,n). Si m n = p q, reshape(T,p,q) retourne un tableau deformat (p, q) dont les lments sont pris dans T en le parcourant colonne par colonne ; simn 6= pq,reshape(T,p,q) retourne une erreur.

    Exemple 2.6.8 :

    >> T =1 4 7 102 5 8 113 6 9 12

    >> U = reshape(A,2,6)U =1 3 5 7 9 112 4 6 8 10 12

    Si u est un vecteur ou une ligne, la fonction sort ordonne les lments de u par ordre croissant :

    AJ.Casadevall - mars 2013 p.31

  • CHAPITRE 2. LES OBJETS" DE MATLAB - LISTES, VECTEURS, TABLEAUX

    Exemple 2.6.9 :

    >> u = [4 2 1 7 3 ] ;

    >> c = sort(u))c =

    1 2 3 4 7

    Si T est un tableau, la fonction sort(T, dim) ordonne par ordre croissant : les colonnes de T si la variable dim a la valeur 1 ; les lignes de T si la variable dim a la valeur 1.

    Exemple 2.6.10 :

    >> T = [3 1 7 ; 2 8 5]T =

    3 1 72 8 5

    >> U = sort(T, 1) % on ordonne le tableau T selon les colonnesU =

    2 1 53 8 7

    >> V= sort(T, 2) % on ordonne le tableau T selon les lignesV =

    1 3 72 5 8

    La fonction issorted teste si une colonne, une ligne (plus gnralement un vecteur ou uneligne) est ordonne :

    >> issorted(U(: , 1))ans =

    1 % la premire colonne de U est ordonne

    >> issorted(U(2 , :))ans =

    0 % la deuxime ligne de U nest pas ordonne

    p. 32 AJ.Casadevall - mars 2013

  • 3Expressions, scripts et fonctions

    3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2 Oprations de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2.1 Oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2.2 Oprateurs et oprations sur les tableaux . . . . . . . . . . . . . . . . . . . 353.2.3 Oprations boolennes - Tableaux boolens . . . . . . . . . . . . . . . . . . 363.2.4 valuation des expressions - ans . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.3 Scripts et m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.2 Cration de m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.3 Excution dun m-file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.3.4 lments dcriture de m-files . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.4 Structures algorithmiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4.1 Slection - if...end et if...else...end . . . . . . . . . . . . . . . . . . . 423.4.2 Rptition - for...end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.4.3 Itration conditionnelle - while...end . . . . . . . . . . . . . . . . . . . . . 453.4.4 Construction switch...case . . . . . . . . . . . . . . . . . . . . . . . . . . 463.4.5 Traitement des erreurs - try...catch...end . . . . . . . . . . . . . . . . . 46

    3.5 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.5.1 m-Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.5.2 Fonctions Inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.5.3 Fonctions anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.5.4 Fonctions argument dautres fonctions . . . . . . . . . . . . . . . . . . . . . 503.5.5 Commandes et fonctions nargin et nargout . . . . . . . . . . . . . . . . . 51

    3.6 Optimisation des calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    3.1 IntroductionUn des avantages de MATLAB est de proposer une syntaxe trs simple pour traduire les calculs

    matriciels. Les oprateurs sont reprsents par les mmes symboles ( une ou deux exceptions prs)que ceux utiliss communment en algbre linaire. Mieux, ils oprent directement sur les tableaux(par exemple, il nest pas ncessaire dcrire des boucles pour effectuer la somme ou ou le produitde deux matrices).

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    3.2 Oprations de MATLAB3.2.1 Oprateurs

    Classs par ordre de priorit dcroissante, les oprateurs utiliss par MATLAB sont les suivants : exponentiation et transposition lexponentiation ^ et .^ la conjugaison et la transposition .

    oprateurs multiplicatifs les produits * et .*, les divisions droite /, ./ et gauche \, .\

    oprateurs additifs et de ngation les oprateurs additifs unaire et binaires + et - la ngation ~

    oprateurs boolens avec par ordre de priorit : les oprateurs de comparaison , = galit ==, non galit ~=

    puis les oprateurs logiques et logique & ou logique | et logique court-circuit && ou logique court-circuit ||

    Les oprateurs logiques court-circuits sont des oprateurs pour lesquels le rsultat est acquisds que lvaluation du premier oprande permet daffirmer le rsultat global sans valuer le secondoprande. Si a et b sont des variables boolennes :

    a && b vaut false ds que a vaut false a || b vaut true ds que a vaut true.

    Dautre part on rappelle quil nexiste pas dans MATLAB de vrai" type boolen : false est repr-sent par la valeur 0 et que true est reprsente par la valeur 1 et par extension par toute valeurnon nulle, ce qui est confirm par lvaluation des expressions suivantes :

    Exemple 3.2.1 :

    >> 2&3ans =

    1 % true ET true vaut true>> 2&0

    ans =0 % true ET false vaut false

    >> 2|3ans =

    1 % true OU true vaut true>> ~3

    ans =0 % le contraire de true (= 3) est false

    >> 2==3ans =

    0 % lgalit est bien celle des nombres et non celle des prdicats !

    p. 34 AJ.Casadevall - mars 2013

  • 3.2. OPRATIONS DE MATLAB

    3.2.2 Oprateurs et oprations sur les tableauxLorsquils sont appliqus des nombres ou des expressions boolennes, le rsultat fourni par les

    oprateurs dcrits ci-dessous, est le rsultat usuel. Ils sappliquent encore des listes, des vecteursou plus gnralement des tableaux ; on dit quils sont vectoriss. Le rsultat est bien sr quelquepeu diffrent.Dans le tableau suivant, A et B sont des tableaux et c est un nombre :

    Oprateur Rsultat ConditionsA+B tableau dont les lments sont dfinis par aij + bij A et B mme format

    A+ c = c+A tableau dont les lments sont dfinis par aij + cAB tableau dont les lments ont pour valeur aij bij A et B mme formatA c tableau dont les lments ont pour valeur aij ccA tableau dont les lments ont pour valeur c aijA B tableau rsultant du produit matriciel de A par B nb col. A = nb lign. B

    A c = c A tableau dont les lments ont pour valeur c aijA. B tableau dont les lments ont pour valeur aij bij A et B mme format

    An (n > 0) A A A (n fois) A carreAn (n < 0) A1 A1 A1 (|n| fois) A inversible

    A.B tableau dont les lments ont pour valeur (aij)bij A et B mme formatA transpos-conjugue du tableau A, aij = ajiA. transpos du tableau A, aij = aji

    si tous les lments de A sont rels, A. = AB/A tableau X solution de lquation matricielle XA = B nb col. A = nb col. B

    si A est inversible X = BA1A\B tableau X solution de lquation matricielle AX = B nb lign. A = nb lign. B

    si A est inversible X = A1BA./B tableau dont les lments ont pour valeur aij/bij A et B mme formatA.\B tableau dont les lments ont pour valeur bij/aij A et B mme format

    A.\B = B./AA/c tableau dont les lments ont pour valeur aij/c

    On notera qu certains oprateurs est associ un oprateur point, * et .* par exemple.De faon gnrale, loprateur point correspond une opration semblable celle reprsente parloprateur non point, mais applique non pas "matriciellement" mais terme terme" : * estloprateur matriciel alors que .* est loprateur du produit terme terme".

    Exemple 3.2.2 :

    On cre deux matrices A et B. La fonction ones(n) cre une matrice carre dordre 2 dont tous lestermes sont gaux 1 ; la fonction eye(2) cre la matrice identit dordre 2.

    >> A = [1 2;1 0]A =

    1 21 0

    AJ.Casadevall - mars 2013 p.35

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    >> B = ones(2)+eye(2)B =2 11 2

    >> C = A*BC =

    4 52 1

    >> D = A.*BD =2 21 0

    Notez bien la diffrence entre lopration matricielle et lopration terme terme" ..

    3.2.3 Oprations boolennes - Tableaux boolensDans la suite, tableau boolen" ou logical array dsignera un tableau dont les lments ont

    pour valeur 0 ou 1, 0 reprsentant false et 1, reprsentant true. La fonction islogical teste lecaractre boolen dun tableau.Oprateurs de comparaison

    Les oprateurs boolens sont peut-tre ceux dont le comportement peut apparatre le plusdroutant parce quil fonctionnent terme terme " et que le rsultat est un tableau boolen :

    Exemple 3.2.3 :

    Avec les variables A et B dfinies dans lexemple prcdent on obtient :

    >> A , BA =1 21 0

    B =2 11 2

    >> C =(A == B)C = % C est le tableau resultant dune opration boolenne0 01 0

    >> islogical(C)ans =1 % C est bien un tableau boolen

    Dans lexpression a == b la comparaison porte sur les lments homologues de A et B :1 == 3 false 0, 2 == 1 false 01 == 1 true 1, 0 == 2 false 0Il en est de mme pour A > B :

    p. 36 AJ.Casadevall - mars 2013

  • 3.2. OPRATIONS DE MATLAB

    >> A > Bans =0 11 0

    En rsum, si A et B sont des tableaux de mme format et si op dsigne un des oprateursboolens , =, ==, = le rsultat de A op B est dfini par la rgle suivante :

    Oprateur Rsultat ConditionA op B tableau boolen" dont les lments sont dfinis par Aij op Bij mme format

    Ainsi que le montre lexemple ci-dessous, un tableau form de 0 et de 1 nest pas ncessairementun tableau boolen :Exemple 3.2.4 :

    >> A = eye(2)A =1 00 1

    >> islogical(A)ans =0 % A nest pas un tableau boolen

    >> class(A)ans =double

    Seuls les tableaux rsultant dune opration boolenne ; forms de 0 et de 1 et transforms en tableaux boolens par la fonction logical ;

    sont des tableaux boolens.Exemple 3.2.5 :

    Avec le mme tableau A que prcdemment :

    >> B = logical(A)B =1 00 1

    >> test = islogical(B)test =1 % B est un tableau boolen

    Oprateurs logiquesSoient A et B deux tableaux de mme format, valuons A & B :

    Exemple 3.2.6 :

    >> A = [1 2 ; 1 0] , B = [2 1 ; 1 0]A =1 21 0

    AJ.Casadevall - mars 2013 p.37

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    B =2 11 2

    >> A & Bans =1 11 0

    >> islogical(ans)ans =1

    MATLAB value sans problme A & B bien que les tableaux A et B ne soient pas des tableauxboolens. Le rsultat de lvaluation ans, est un tableau boolen : avant lvaluation MATLABa transform les deux tableaux en tableaux boolens en suivant la rgle usuelle, puis a effectulopration logique terme terme.Il en est de mme pour les autres oprateurs logiques |, || , &&.

    3.2.4 valuation des expressions - ans

    Les expressions sont values de la gauche vers la droite, suivant lordre de priorit indiqu plushaut. Pour des oprateurs de mme ordre de priorit, la rgle est comme en mathmatiques, cellede lassociativit gauche.La frappe de dclenche lvaluation. La valeur de expression value est affiche sousla ligne courante et en labsence daffectation explicite, elle est affecte une variable-systmegnrique dsigne par ans pour answer.

    Exemple 3.2.7 :

    >> a = .5a =

    0.5000

    >> a*pians =

    1.5708

    >> b = 2*ans % affectation explicite de levaluation bb =

    3.1416

    >> ansans =

    1.5708

    La dernire valuation na pas modifi la valeur de ans puisquelle comportait une affectationexplicite la variable b.

    p. 38 AJ.Casadevall - mars 2013

  • 3.3. SCRIPTS ET M-FILES

    3.3 Scripts et m-files3.3.1 Scripts

    Un script est une squence dexpressions ou de commandes. Un script peut se dvelopper surune ou plusieurs lignes. Les diffrentes expressions ou commandes doivent tre spares par unevirgule, un point-virgule ou par le symbole de saut de ligne qui en ligne de commande est constitudu symbole de continuation ... suivis de (la prsence du symbole de continuation inhibele mcanisme dvaluation dclench par la frappe de ).Les expressions sont values dans leur ordre dcriture. Seule la valeur des expression suivie dunevirgule ou dun saut de ligne est affiche, celle des expressions suivies dun point-virgule, ne lestpas.

    Exemple 3.3.1 :

    >> a = .5, 2*a, save a, b = pi; 2*b, c = a*ba =

    0.5000c =

    1.5708ans =

    6.2832c =1

    .5708

    >> ansans =

    6.2832

    crire un script est assez fastidieux, aussi MATLAB permet denregistrer le texte dun script sousforme de fichier de texte appels m-files, ne pas confondre avec les emphmat-files que nous avonsvoqus dans le chapitre prcdant et qui sont des fichiers binaires permettant denregistrer desvaleurs.3.3.2 Cration de m-files

    Les m-files permettent denregistrer les scripts sous forme de fichiers-texte et servent enparticulier dfinir de nouvelles fonctions (une grande partie des fonctions prdfinies de MATLABsont stockes sous forme de m-files dans la toolbox matlab.

    Les m-files peuvent tre cres par nimporte quel diteur. Dans les versions rcentes de MATLABil existe un petit diteur intgr que lon peut appeler partir du menu file ou partir de la barrede menu de la fentre de commande.

    Exemple 3.3.2 :

    Dans la fentre de lditeur tapez les lignes suivantes :

    % script - essai . ma = .5;b = pi;c = a * b

    Sauvez le fichier dans le rpertoire de travail sous le nom de essai.m.

    AJ.Casadevall - mars 2013 p.39

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    Remarque :!!!

    On peux utiliser les techniques du copier/coller pour transfrer des parties de script de la fentre decommande de MATLAB vers lditeur et rciproquement. Il faut prendre garde au fait que dans lafentre de commande deMATLAB les sauts de ligne lancent lvaluation des expressions ;il faut alors faire prcder les sauts de ligne du symbole de continuation ...

    3.3.3 Excution dun m-filePour excuter le script contenu dans un m-file et Il suffit de taper le nom de ce m-file dans la

    fentre de commande suivi de < entrer >

    Exemple 3.3.3 :

    Pour excuter le script prcdent, on tape essai et on obtient :

    >> essaic =

    1.5708

    La prsence dun point-virgule ; la fin des deux premires lignes du script a neutralis laffichagedes valeurs de a et b.

    3.3.4 lments dcriture de m-filesCommentaires

    Les lignes de commentaires sont prcdes du caractre %.Entres - input et menu

    La fonction input permet la saisie dune valeur depuis le clavier. Plus prcisment : Pour les valeurs numriques, n = input(message) affiche message et affecte la variablen la valeur numrique entre au clavier.

    Pour les chanes de caractres, str = input(message,s) affiche message et affecte lavariable str la valeur entre au clavier considre alors comme une chane de caractres.

    Exemple 3.3.4 :>> n = input(Entrez la valeur de n )>> nom = input(Entrez votre nom ,s)

    La fonction menu gnre une fentre contenant un menu dans lequel lutilisateur doit choisir uneoption :

    result = menu(titre, opt1, opt2, ..., optn)

    La valeur retourne dans la variable result est gale au numro de loption choisie ; menu est souventutilis en relation avec la structure algorithmique switch-case c.f. 3.4.4.

    Exemple 3.3.5 :

    result = menu(Traitement, Gauss, Gauss-Jordan, Quitter)

    Sans la fentre ci-aprs, si lutilisateur slectionne Gauss, la variable result prend la valeur 1, lavaleur 2 sil slectionne Gauss-Jordan et la valeur 3 sil slectionne Quitter.

    p. 40 AJ.Casadevall - mars 2013

  • 3.3. SCRIPTS ET M-FILES

    Affichages - disp - num2str - format

    La valeur dune variable est trs simplement affiche en faisant valuer une expression rduite la variable elle-mme.

    Exemple 3.3.6 :

    >> a = [1 2] ;

    >> aa =1 2

    La fonction num2str(x) o x est un nombre, retourne la valeur littrale de ce nombre.

    Exemple 3.3.7 :

    >> s = [la valeur de pi est : num2str(pi)] ;

    >> ss =

    la valeur de pi est : 3.1416

    La commande disp(t) o t est une chane de caractres ou un tableau, affiche la valeur de cettechane de caractre ou de ce tableau sans faire rfrence au nom de la variable. Cette commandesera souvent utilise avec num2str pour afficher les valeurs des expressions numriques.

    Exemple 3.3.8 :

    >> a = [1 2;3 4] ;

    >> disp(a)1 23 4

    >> disp([ ordre de la matrice a : num2str(size(a,1)) ] );ordre de la matrice a : 2

    AJ.Casadevall - mars 2013 p.41

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    La commande format permet de choisir entre plusieurs modes daffichage (sans inter-frer avec le type des valeurs numriques affiches qui est toujours le type double) :

    Commande Affichage Exempleformat short dcimal 5 chiffres 31.416format short e scientifique 5 chiffres 31.416e+01format long dcimal 16 chiffres 31.4159265358979format long e scientifique 16 chiffres 314159265358979e+01format hex hexadcimalformat bank virgule fixe deux dcimales 31.41format rat fractionnaire 3550/113format + utilise les symboles +, - et espace pour +

    afficher les nombres positifs ngatifs et nuls

    Commande pauseLa commande pause permet de mnager une pause dans lexcution dun m file : sans argument pause suspend lexcution jusqu ce que lutilisateur presse sur une touche. pause(n ) suspend lexcution pendant n secondes.

    Interaction avec le systme dexploitationMATLAB possde des fonctions et des commandes qui permettent dobtenir la liste des rper-

    toires accessibles ou matlabpath, la liste des fichiers dun rpertoire donn, les diter et ventuel-lement les effacer :

    addpath path : ajoute path la liste matlabpath des rpertoires accessibles par MATLAB ; p = pwd : retourne dans p le chemin daccs au rpertoire de travail actuel ; cd path : change le rpertoire de travail pour celui spcifi par path ; d = dir ou d = ls : retourne dans d la liste des fichiers du rpertoire de travail ; what : retourne la liste des m-files et des mat-files du rpertoire de travail ; edit test : dite le m-file test.m, identique Open dans le menu File ; delete test.m : efface le m-file test.m ; type test : affiche le le m-file test.m dans la fentre de commande.

    3.4 Structures algorithmiques3.4.1 Slection - if...end et if...else...endSyntaxe

    if (expression boolenne) / script / end if (expression boolenne) / script si vrai / else / script si faux / end

    Le symbole / remplace lun des symboles sparateur : virgule (,), point-virgule (;) ou saut de ligne.Lusage du point-virgule est vivement conseill pour viter les affichages souvent redondants. Dansdanciennes versions de MATLAB et en mode commande, il est indispensable de faire prcder< enter > par le symbole de continuation constitu dune squence de trois points (...) pourpasser la ligne sans dclencher le processus dvaluation.

    Exemple 3.4.1 :

    >> m = -1;>> if (m

  • 3.4. STRUCTURES ALGORITHMIQUES

    Cette autre prsentation est plus lisible :

    >> f (m> x = [ ] ;>> for (k = 1 : 5), x = [x, sqrt(k)], endx =

    1x =

    1.0000 1.4142x =

    1.0000 1.4142 1.7321x =

    1.0000 1.4142 1.7321 2.0000x =

    1.0000 1.4142 1.7321 2.0000 2.2361

    cette autre prsentation plus lisible, doit tre privilgie :

    >> for (k = 1 : 5)x = [x, sqrt(k)] ;

    end

    AJ.Casadevall - mars 2013 p.43

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    Boucles for embots

    Exemple 3.4.3 :

    >> for (l = 1 : 3)for ( k = 1 : 3)

    A(l,k) = l^2 + k^2 ;end

    end

    >> disp(A)2 5 105 8 1310 13 18

    Utilisation de break et de continueIl est possible de sortir directement dune boucle for ou while en utilisant la commande break :

    Exemple 3.4.4 :

    >> epsi = 1;

    >> for (n = 1 : 100)epsi = epsi / 2;If ((epsi + 1) > nn =

    52

    Le test (epsi + 1) > for (l = 1 : 3)for (k = 1 : 3)if (A(l,k) == 10)[l,k]breakend

    endend

    ans =1 3

    p. 44 AJ.Casadevall - mars 2013

  • 3.4. STRUCTURES ALGORITHMIQUES

    ans =3 1

    La double boucle se sest pas arrt aprs que le test A(l,k) == 10 ait t valid lorsque l=1 etk=3. En effet break provoque la sortie de la boucle la plus proche, ici la boucle for interne.Une version corrige du test prcdent pourrait tre la suivante avec deux break pour pouvoirsortir des deux boucles for :

    Exemple 3.4.5 :

    >> sortie = 0;

    >> for (l=1:3)if (sortie)

    breakendfor (k = 1:3)if (A(l,k) == 10)

    [l,k]sortie = 1 ;break

    endend

    end

    ans =1 3

    La commande continue interromps lexcution du corps de la boucle et provoque le passage litration suivante.

    3.4.3 Itration conditionnelle - while...endSyntaxe

    while (expression boolenne) / script / end

    Le symbole / reprsente comme dans les dfinitions prcdents, un sparateur : virgule (,), point-virgule (;) ou saut de ligne. Dautre part, il faut viter lutilisation des variables i et j commeindices puisquelles sont des variables prdfinies dont la valeur est

    ( 1).

    Exemple 3.4.6 :

    >> n = 1 ;

    >> while (2^n > disp(n-1)6

    AJ.Casadevall - mars 2013 p.45

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    3.4.4 Construction switch...caseSyntaxe

    switch (slecteur)case valeur 1, . . . / script 1 /case Valeur 2, . . . / script 2 /. . .otherwise / script

    end

    Comme dans les dfinitions prcdentes, le symbole / remplace un sparateur : virgule (,), point-virgule (;) ou saut de ligne.slecteur dsigne une expression dont les valeurs peuvent correspondre aux valeurs associes auxdiffrents case. Lorsque la valeur du slecteur correspond une valeur de case, une fois le scriptcorrespondant excut, lexcution se continue immdiatement aprs le end contrairement ce quise passe pour certains langages. Ceci explique labsence de break aprs chaque script.

    Exemple 3.4.7 :

    >> n =17

    >> switch rem(n,3) % reste de la division de n par 3case 0, disp(Multiple de 3)case 1, disp(1 modulo 3)case 2, disp(2 modulo 3)otherwise, disp(Nombre ngatif)

    end

    2 modulo 3

    3.4.5 Traitement des erreurs - try...catch...endLa commande try...catch a pour but de permettre un traitement qui permette lutilisateur

    dintervenir en prsence derreurs ou de situations inhabituelles. Sa syntaxe est la suivante :

    try script1 catch script2 end

    Le fonctionnement en est assez simple pour les habitus des langages modernes, java par exemple : lexcution de script1 est lance ; si une erreur survient, alors lexcution de script1 est arrte et script2 est excut ; sinon, script1 est excut jusqu son terme, script2 nest pas excut, les excutions suivantes

    se poursuivent aprs le end final.On peut utiliser lasterr pour accder lerreur qui provoque larrt de lexcution de script1.

    3.5 FonctionsA cot des fonctions prdfinies c.f.4.1, MATLAB offre lutilisateur la possibilit de dfinir ses

    propres fonctions. Trois mthodes sont possibles : les m-fonctions qui sont associes des m-filesauxiliaires, les fonctions anonymes et les fonction Inline. Ces deux derniers types de fonctionpeuvent tre dfinies directement dans lespace de travail o ces fonctions vont tre utilises.

    p. 46 AJ.Casadevall - mars 2013

  • 3.5. FONCTIONS

    3.5.1 m-FonctionsCes fonctions sont associes un m-file auxiliaire, ce qui apporte deux avantages : la fonction

    possde son propre espace de travail (pas deffet de bord) et il ny a pas de limite la complexitde la squence de commandes qui dfinit la fonction.Exemple 3.5.1 :La m-fonction moyenne dfinie ci-dessous calcule la moyenne des lments dune liste ou dunvecteur.Saisissez le texte ci-aprs dans un diteur (par exemple lditeur intgr MATLAB mais toutditeur fait laffaire) et enregistrez le sous le nom moyenne.m.

    1 function m = moyenne(x)2 % MOYENNE(X) : moyenne des lments dune liste ou dun vecteur3 % un argument autre quune liste ou un vecteur conduit a une erreur4 [k,l] = size(x) ;5 if ( (k~=1) & (l~=1) )6 error(l"argument doit tre une liste ou un vecteur)7 end8 m = sum(x)/length(x) ;9 return

    On appelle la fonction moyenne depuis le fentre de commande par :>> rsultat = moyenne(1 : 9)resultat =

    5

    >> A = [ 1 2 ; 3 4] ; moyenne(A)??? Error using ==> moyennel"argument doit tre une liste ou un vecteur

    Le traitement de lerreur sur la nature de largument a t ralis aux lignes 5 7 et par la commandeerror.MATLAB utilise la section de commentaires des lignes 2 et 3 en conjonction avec la commande helppour fournir des informations sur la fonction :Exemple 3.5.2 :>> help moyenne

    MOYENNE(X) : moyenne des lments dune liste ou dun vecteurun argument autre quune liste ou un vecteur conduit a une erreur

    SyntaxeUne fonction est constitue par : un en-tte qui si la fonction renvoie une seule valeur, a la forme suivante :

    function rsult = nom-de-fonction (liste de paramtres )ou si la fonction renvoie plusieurs valeurs :

    function [rsult1, result2, ...] = nom-de-fonction (liste de paramtres ) une section de commentaires (9 lignes au plus, dbutant par le symbole %) utilise par lescommande help ou lookfor ;

    le corps de la fonction dfini par un script ; le return terminal est nest pas obligatoire ; il est conseill car il entraine un retour "propre" la fonction ou au script appelant ou par dfaut la fentre de commande.

    AJ.Casadevall - mars 2013 p.47

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    Rgles et proprits

    Le nom de la fonction nom-de-fonction est un identificateur construit conformment auxrgles dfinies au paragraphe Le nom de la fonction et celui du fichier m-file qui en contient la dfinition doivent treidentiques. Ce fichier est le fichier m-file associ la fonction. Chaque fonction possde son propre espace de travail et toute variable apparaissant dans

    le corps dune fonction est locale celle-ci, moins quelle ait t dclare comme globaleau moyen du qualificateur global prcdant le nom de la variable dans tous les espacesde travail o cette variable est utilise. Il est prfrable que les fonctions soient vectorises comme le sont les fonctions prdfinies. Ilfaut alors nutiliser que des oprateurs points dans la dfinition de la fonction. Lexcution dune fonction sachve : lorsque la fin du script dfinissant la fonction a t atteint ; lorsque une commande return ou un appel de la fonction error a t rencontr :

    return termine immdiatement lexcution de la fonction sans que la fin du script dfi-nissant celle-ci ait t atteint,

    error(message ) procde de mme, mais en plus, affiche le contenu de message.Le contrle est alors renvoy au point dappel de la fonction, fentre de commande ou autrefonction. Le fichier m-file associ une fonction peut contenir dautres dfinitions de fonctions. Lafonction qui partage son nom avec le fichier ou fonction principale doit apparatre enpremier. Les autres fonctions ou fonctions internes peuvent tre appeles par la fonctionprincipale, mais pas par dautres fonctions ou depuis la fentre de commande.

    Exemple 3.5.3 :

    1 function [m, v] = myStat(x)2 % MYSTAT(X) : moyenne et variance des elements dune liste ou dun vecteur3 % un argument autre quune liste ou un vecteur conduit a une erreur4 [k,l] = size(x) ;5 if ( (k~=1) & (l~=1) )6 error(l"argument doit tre une liste ou un vecteur)7 end8 m = moyenne(x);9 v = variance(x);

    10 return

    11 function a = moyenne(u)12 % Calcul de la moyenne13 a = sum(u)/length(u);s

    14 function b = variance(u)15 % Calcul de la variance16 c = sum(u)/length(u);17 u2 = (u - c).^2;18 b = sum(u2)/length(u);

    Lensemble des trois fonctions est enregistr dans un seul fichier m-file portant le nom de la fonctionprincipale myStat.m.

    p. 48 AJ.Casadevall - mars 2013

  • 3.5. FONCTIONS

    3.5.2 Fonctions InlineLorsque le corps de la fonction se rsume une expression relativement simple, on peut crer

    la fonction directement dans lespace de travail courant, sans utiliser un m-file auxiliaire .Syntaxe

    La syntaxe des fonctions Inline est simple :

    nom-de-fonction = inline (expression , var1, var2, ...)

    Lexpression mathmatique qui constitue le corps de la fonction ainsi que les variables sontconsidres par MATLAB comme des chaines de caractres et doivent donc tre tapesentre apostrophes. Il est prfrable que les fonctions soient vectorises comme le sont les fonctions prdfinies. Il

    faut alors nutiliser que des oprateurs points dans lexpression dfinissant la fonction.. La dclaration des variables peut tre optionnelle dans la dfinition des fonctions Inline,

    MATLAB effectuant une dclaration implicite de celles-ci. Cette facilit, source dambigutsdans le cas de fonctions de plusieurs variables nest pas recommander dans ce cas.

    Exemple 3.5.4 :

    >> f = inline(x.^2 + x.*y, x, y)f =

    Inline fonction :f(x, y) = x.^2 + x.*y

    >> f(1, 2)ans =

    3.0000

    >> f([1 0], [2 1])ans =

    3.0000 0.0000

    Lexemple suivant met en vidence le mcanisme de dclaration implicite.Exemple 3.5.5 :

    La dfinition

    >> f = inline(x.^2)f =

    Inline fonction :f(x) = x.^2

    est quivalente :

    >> f = inline(x.^2, x)

    Ce mcanisme est ambigu ds quil y a plusieurs variables : la dfinition

    >> f = inline(x.^2 + x.*y)

    est quivalente :

    >> f = inline(x.^2 + x.*y, x, y)

    AJ.Casadevall - mars 2013 p.49

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    alors que

    >> f = inline(x.^2 + x.*t)

    est quivalente :

    >> f = inline(x.^2 + x.*t, t, x)

    3.5.3 Fonctions anonymesCe troisime mode de dfinition de fonctions utilise comme pour les fonctions Inline lespace

    de travail courant. La syntaxe minimale est peu explicite, mais les fonctions ainsi dfinies seraientplus efficaces que fonctions Inline.Syntaxe

    nom-de-fonction = @(var1, var2, ...) expression

    Contrairement aux fonctions Inline lexpression mathmatique qui constitue le corps de lafonction ainsi que les variables ne doivent pas tre tapes entre apostrophes. Il est prfrable que les fonctions soient vectorises comme le sont les fonctions prdfinies. Ilfaut alors nutiliser que des oprateurs points dans lexpression dfinissant la fonction.

    Exemple 3.5.6 :

    >> g = @(x, y) x.^2 + x.*yg =

    @(x, y) x.^2 + x.*y

    >> g(1, 2)ans =

    3.0000

    >> g([1 0], [2 1])ans =

    3.0000 0.0000

    3.5.4 Fonctions argument dautres fonctionsUne faon simple dutiliser une fonction comme argument dune autre fonction est de trans-

    mettre la fonction utilisatrice le handle de la fonction (le handle dune fonction est la rfrence(ladresse en mmoire) du code MATLAB qui dfinit le traitement effectu par la fonction).Le handle dune m-fonction ou dune fonction prdfinie de MATLAB est obtenu en faisant prcderle nom de la fonction par le symbole @. Par exemple, le handle de la fonction prdfinie exp [email protected] handle dune fonction Inline ou dune fonction anonyme est le nom avec lequel la fonction at dfinie.

    Dans ce premier exemple la fonction utilisatrice est dfinie comme une m-fonction.

    Exemple 3.5.7 :

    function y = trapeze(f, a, b)% Input : f : handle% a : borne infrieure

    p. 50 AJ.Casadevall - mars 2013

  • 3.5. FONCTIONS

    % b : borne suprieure% Output : aire du trapezesy = 0.5*(f(a) + f(b))*(b - a) ;return

    >> carre = inline(x.^2, x)carre =

    Inline fonction :carre(x) = x.^2

    >> trapeze(carre, 1, 2)ans =

    2.5000

    On peut galement dfinir la fonction trapze comme une fonction anonyme :

    Exemple 3.5.8 :

    >> trapeze2 = @(f, a, b) 0.5*(f(a) + f(b))*(b - a) ;

    >> carre = @(t) t.^2 ;

    >> trapeze2(carre2, 1, 2)ans =

    2.5000

    3.5.5 Commandes et fonctions nargin et nargoutLa commande nargin qui sutilise lintrieur du corps dune fonction, donne le nombre de

    paramtres dentre effectivement passs lors lappel de la fonction.

    Exemple 3.5.9 :

    fonction n = test(a, b)if (nargin ==1)

    n = a ;elseif (nargin == 2)

    n = a +b ;end

    La fonction nargin(nom-de-fonction) revoie le nombre prvu de paramtres dentre de lafonction dont le nom est pass en argument.

    Exemple 3.5.10 :

    >> nargin(test)ans =

    2

    La commande et la fonction nargout fonctionnent de mme pour les paramtres de sortie.

    AJ.Casadevall - mars 2013 p.51

  • CHAPITRE 3. EXPRESSIONS, SCRIPTS ET FONCTIONS

    3.6 Optimisation des calculsLes calculs sont acclrs de faon spectaculaire en utilisant des oprations vectorielles en lieu

    et place de boucles. Comparons les deux fonctions suivantes (la commande tic dclenche un chro-nomtre ; toc arrte le chronomtre et retourne le temps coul depuis tic) :

    Exemple 3.6.1 :

    1 function [t,b] = test1(n)2 % dtermine le temps mis pour crer la liste3 % des racines carres des entiers compris entre 1 et n4 m = 0 ;5 tic ;6 for k = 1 : 1 : n7 b(k) = m+sqrt(k) ;8 end9 t = toc ;

    10 return

    11 function [t,b] = test2(n)12 % dtermine le temps mis pour crer la liste13 % des racines carres des entiers compris entre 1 et n14 tic ;15 a = 1 : 1 : n ;16 b = sqrt(a) ;17 t = toc ;18 return

    Les rsultats obtenus montrent que test2 est plus efficace que test1.

    >>test1(1000)ans =0.1040

    >>test2(1000)ans =0.0023

    MATLAB dispose dun utilitaire appel profiler qui est prcieux pour tudier les performancesdune ou plusieurs fonctions. Les modalits dutilisation du profiler ont volu en fonction desversions de MATLAB. On les trouvera dans laide en ligne help profile .

    p. 52 AJ.Casadevall - mars 2013

  • 4MATLAB et lanalyse numrique

    4.1 Fonctions numriques" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2 Polynmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.3 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4 Fonctions dune variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    4.4.1 Recherche de minimum - fmin . . . . . . . . . . . . . . . . . . . . . . . . . 564.4.2