Vous êtes sur la page 1sur 18

Initiation sur MatLab

Par Rafic YOUNES Enseignant Chercheur la Facult de Gnie Universit Libanaise Responsable Scientifique du Master de Recherche en Mcanique 3M

R.Y. 10. 04
1. 1.1 1.2 1.3 1.4 1.5 Introduction Dmarrage dune session MatLab Type des fichiers. Compatibilit entre DOS et Unix. Edition Documentation. Aide en ligne Information sur lespace de travail Coopration de MatLab avec des logiciels externes

2. Gnralits 2.1 Entres et traitement des donnes 2.2 Instructions de contrle 2.3 Les fonctions 2.4 Notations et raccourcis 2.5 Les fichiers 2.6 Commandes systmes 2.7 Chanes de caractres et messages 2.9 Copie dcran texte 2.10 Les graphiques 3. 4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. Rsum des commandes MatLab Applications Systmes dquations non linaires Traitement des polynmes Interpolation linaire et non linaire Intgration numrique Diffrentielles totales Equations aux drives partielles Optimisation linaire et non linaire Calcul symbolique Graphiques 2D et 3D Rfrences bibliographiques

Le logiciel MatLab met la disposition de lutilisateur un environnement performant pour mener bien des calculs numriques ou symboliques. Cet article constitue une initiation sur MatLab et sadresse aux dbutants qui dsirent prendre rapidement connaissance des fonctionnalits de ce logiciel. Les thmes abords couvrent lessentiel de ce quil faut connatre pour utiliser efficacement MatLab : types de donnes, fonctions MatLab, ainsi quun aidemmoire regroupant la majorit des commandes MatLab par thmatique. Enfin, une srie des applications dans des domaines diverses ont t prsentes. Elles sont convenables pour un utilisateur dbutant ou un ingnieur confirm.

Beyrouth 01/09/2005

1. Introduction
MatLab est un puissant outil de calcul numrique, de programmation et de visualisation graphique. Son nom signifie matrix laboratory, c'est dire un environnement interactif de travail avec des matrices. La facilit de dveloppement des applications dans son langage fait qu'il est pratiquement devenu le standard dans son domaine. Actuellement, on trouve des nombreuses botes outils (Toolboxes) qui contiennent des fonctions spcialises permettant d'utiliser l'environnement MatLab pour rsoudre des classes spcifiques de problmes.

Toolbox, Spline Toolbox, Chemometrics Toolbox, Fuzzy Logic Toolbox, etc.) Simulink: C'est l'extension graphique de MATLAB permettant de travailler avec des diagrammes en blocs. Blocksets: Ce sont des collections de blocs Simulink dvelopps pour des domaines d'application spcifiques (DSP Blockset, Power System Blockset, etc.).

1.1 Dmarrage d'une session MatLab.


Le lancement de MatLab sur un PC se fait tout simplement en l'appelant avec la commande MatLab dans une fentre. Cette fentre deviendra alors la fentre de commande MatLab. Sous Windows, il suffit de cliquer sur l'icne correspondante pour qu'une fentre similaire s'ouvre dans votre environnement. Il s'agit en effet d'une interface en mode texte avec l'interprteur de langage MatLab dans laquelle on peut excuter des instructions spcifiques ou lancer des programmes. L'affichage des rsultats numriques se fera en mode texte dans cette mme fentre ou dans une autre fentre en mode graphique (en faisant appel aux fonctions de visualisation de MatLab).

1.2 Types des fichiers. Compatibilit entre DOS et UNIX. Edition.


Les programmes MatLab sont des fichiers ASCII qui contiennent des commandes spcifiques. La convention est que le nom d'un tel fichier doit se terminer en .m. Pour excuter un tel programme en MatLab il suffit de taper son nom dans la fentre de commande, mais sans l'extension par dfaut .m. Les fichiers sont parfaitement compatibles entre les stations et les PC. C'est dire, en rcuprant par ftp des fichiers qui taient sur une station UNIX, ces fichiers resteront toujours excutables par MatLab PC (mme procdure pour le transfert PC -> UNIX). Une seule petite observation : il faut configurer le transfert ftp en mode ASCII, sinon (en binaire) la convention de fin de ligne qui est diffrente sous UNIX et DOS va faire un programme illisible. Il est possible demployer le mode de transfert binaire seulement pour les fichiers qui ont des noms termins en .mat. Ce sont des fichiers des donnes MatLab, qui utilisent le format binaire pour des raisons d'efficacit et de taille. L'dition de programmes .m est un processus totalement indpendant de MatLab. Lutilisateur peut favoriser son propre logiciel d'dition.

Avec ses fonctions spcialises, MATLAB peut tre aussi considr comme un langage de programmation adapt pour les problmes scientifiques. MATLAB est un interprteur : les instructions sont interprtes et excutes ligne par ligne. MATLAB fonctionne dans plusieurs environnements tels que X-Windows, Windows, Macintosh. Il existe deux modes de fonctionnement : Mode interactif: MATLAB excute les instructions au fur et mesure qu'elles sont donnes par l'usager. Mode excutif: MATLAB excute ligne par ligne un "fichier M" (programme en langage MATLAB). Les blocks de la figure prcdente sont prsents comme suit : Fentre Commande: Dans cette fentre, l'usager donne les instructions et MATLAB retourne les rsultas. Fentres Graphique: MATLAB trace les graphiques dans ces fentres. Fichiers M: Ce sont des programmes en langage MATLAB (crits par l'usager). Toolboxes: Ce sont des collections de fichiers M dvelopps pour des domaines d'application spcifiques (Signal Processing Toolbox, System Identification Toolbox, Control System Toolbox, uSynthesis and Analysis Toolbox , Robust Control Toolbox, Optimization Toolbox, Neural Network

1.3 Documentation. Aide en ligne.


La documentation de MatLab est particulirement riche. Le logiciel est livr en standard avec plusieurs livres dont : Users Guide - destin surtout aux dbutants. Cette documentation guide lentement dans les mandres du langage MatLab. Pour un dbutant, le passage par cette documentation est quasiment invitable. Reference Guide - tout comme son nom l'indique il s'agit d'un document qui dcrit tous les lments de langage MatLab (instructions, fonctions et leurs paramtres). Grce son index trs complet, il permet de retrouver facilement des informations. Building a Graphical User Interface - il s'agit d'un document qui traite les fonctions MatLab d'interaction

graphique avec l'utilisateur. Parmi toutes les documentations, c'est de loin le livre le moins complet. Heureusement, il contient de nombreux exemples qui peuvent conduire, par le biais de l'exprimentation, une parfaite matrise de l'interface graphique (si cela est vraiment ncessaire). External Interface Guide - c'est un des ouvrages les plus utiles parce qu'il traite l'interaction de MatLab avec des programmes externes, notamment celles crites en langage C. Signal Processing Toolbox User's Guide - le guide d'utilisation de la bote outils de traitement de signal. Il contient deux parties : Tutorial et Reference, conues de mme manire que les deux documentations correspondantes MatLab. Image Processing Toolbox User's Guide - le guide d'utilisation de la bote outils de traitement d'image. Statistical Toolbox User's Guide - le guide d'utilisation de la bote outils de statistique. De mme, l'aide en ligne est trs complte. Il suffit de taper dans la fentre de commande : help et le rsultat sera une numration de ce type : HELP topics: apps\MatLab - Establish MATLAB session paramtres. MatLab\general - General purpose commands. MatLab\ops - Operators and special characters. MatLab\lang - Language constructs and debugging. MatLab\elmat - Elementary matrices and matrix manipulation. MatLab\specmat - Specialized matrices. MatLab\elfun - Elementary math functions. MatLab\specfun - Specialized math functions. MatLab\matfun - Matrix functions - numerical linear algebra. MatLab\datafun - Data analysis and Fourier transform functions. MatLab\polyfun - Polynomial and interpolation functions. [...] For more help on directory/topic, type "help topic". Il s'agit d'une numration de toutes les sections de l'aide en ligne. Pour une aide sur une certaine section il suffit de taper help suivi du nom de la section. Par exemple, la commande help ops aura comme rsultat une liste de tous les oprateurs utiliss par MatLab. Pour une aide encore plus pointue, la syntaxe est help suivi par le nom de la commande. Supposant qu'on veut voir l'utilisation de la commande fft2, il suffit d'crire: help fft2 Une autre commande utile est lookfor strings qui recherche toutes les fonctions MatLab ou utilisateur qui contiennent dans leur help la srie de caractres 'string'. L'information fournie par l'aide en ligne est plus ou moins quivalente avec celle contenue dans le Reference Guide. Une autre source d'informations extrmement riche est le programme de dmonstration de MatLab. On peut le lancer avec la commande demo. Les sources du demo sont disponibles dans le rpertoire C:\MATLAB\TOOLBOX\MATLAB\DEMOS\ (pour les

PC) ou /u/MatLab/toolbox/MatLab/demos/ (pour les stations).

1.4 Information sur lespace de travail


Pour obtenir une liste des variables dans l'espace de travail, on utilise les instructions suivantes: who Affichage des variables dans l'espace de travail. whos Affichage dtaill des variables dans l'espace de travail.

1.5 Coopration de MatLab avec des logiciels externes


1.5.1 Accs aux fichiers de donnes externes En dehors du mcanisme classique de sauvegarde et du chargement des donnes de type load/save, MatLab possde des mcanismes alternatifs. La premire variante est implante toujours en utilisant les commandes load/save. Il s'agit de sauver une matrice sur le disque dur, en format ASCII. Il faut seulement rajouter la fin le commutateur -ascii. Exemple : save toto -ascii Dans le fichier de donnes, les lments seront spars par un espace, et les lignes par un saut de fin de ligne. Ce format a plusieurs avantages et plusieurs dfauts. Comme avantage, on peut citer le fait que le format ASCII est interprtable par la simple inspection visuelle du fichier avec un diteur de texte. Nul besoin de connatre le format interne MatLab, et c'est extrmement facile de programmer des procdures C pour crire ou lire un tel fichier ou mme pour le convertir dans le format Maple ASCII. Par contre, au fur et mesure que la matrice devient grande, la manipulation d'un tel fichier s'alourdit (a peut constituer un gros problme surtout pour ceux qui ont des petits dsagrments avec leur quota de disque dur). Enfin, MatLab sait utiliser de fonctions de manipulation des fichiers faon C. Il s'agit des fonctions classiques genre fopen, fclose, fwrite, fseek, fprintf, etc. On peut ainsi lire ou gnrer un format binaire ou n'importe quel format exotique. 1.5.2 Utiliser des procdures C dans l'environnement MatLab La mthode la plus simple est d'utiliser le "escape shell" !. La commande !mon_prog; indique MatLab qu'il faut excuter un logiciel externe qui s'appelle mon_prog. Une fois le logiciel externe fini, l'excution suit son cours en MatLab. La communication entre l'environnement et mon_prog peut se raliser par l'intermde de fichiers des donnes (voir la section prcdente). Gnralement, on essaye d'implanter avec mon_prog des sections critiques du programme qui prendrait beaucoup plus de temps et/ou de mmoire en MatLab. L'avantage est qu' la fin on garde sur le disque dur tous les rsultats intermdiaires et on peut les examiner tranquillement. Parmi toutes les mthodes de collaboration avec des programmes externes, celle ci est la plus inefficace. Un peu plus avance, mais plus complexe, est l'utilisation des fichiers .mex. Ce sont des fichiers

crits en langage C, compiles avec un compilateur spcial cmex, qui peuvent ultrieurement tre appeles comme n'importe quelle fonction. Ces sources doivent inclure le fichier entte "mex.h". Cette dmarche est particulirement lourde, car elle comporte aussi la cration d'une fonction pont (gateway routine). Des nombreux problmes de compatibilit de .mex entre diffrentes versions de MatLab se posent. "Ne pas utiliser les MEX que si vous avez absolument besoin" - je cite la documentation de MatLab. 1.5.3 Utiliser les fonctions MatLab dans le cadre d'un logiciel C C'est la modalit la plus efficace de faire cooprer MatLab et un logiciel externe. Il s'agit de lancer en tache de fond en mme temps que votre logiciel C, le noyau MatLab Engine. Vous pouvez faire appel ce noyau pour lire des fichiers des donnes en format MatLab, pour inverser des matrices ou faire des graphiques 3D. Une licence MatLab sera occupe seulement pendant que le noyau tourne en tache de fond et sera libre ds que le contrle total revient au logiciel principal. Pour utiliser les fonctions de MatLab dans les programmes en C il faut modifier le Makefile en rajoutant aux lignes de dfinitions du compilateur et de l'diteur de liaisons : CC = cc ..... -I/u/MatLab/extern/include Sous SunOS: LD = cc ..... /u/MatLab/extern/lib/sun4/libmat.a -lm sous Solaris: LD = cc ..... /u/MatLab/extern/lib/sol2/libmat.a -lm Dans le logiciel C il faut inclure la ligne d'entt suivante #include "engine.h" Le noyau MatLab s'appelle avec la procdure engOpen() et il se ferme avec la procdure engClose(). Une liste dtaille de toutes les fonctions de communication avec le noyau MatLab se trouve dans External Interface Guide, page 2-1. En ce qui concerne le PC, Borland C++ ne fait pas partie des compilateurs indiqus par Mathworks. Le seul compilateur qui pourrait ventuellement cooprer avec MatLab est le mcc.

= [ 12 1 4 8 5 13 7 9 2]

Les lments d'une mme ligne sont spars par un espace ou une virgule, les lignes sont elles-mmes spares par un point virgule ou un retour chariot. Une matrice lments complexes sera dfinie de manire trs simple : Soit A = [ 12 1; 4 8] +i*[ 5 3; 9 7] Soit A = [ 12+5i 1+3i; 4+9i 8+7i] Les imaginaires purs i ou j peuvent tre utiliss indiffremment. Attention de ne pas insrer d'espace dans la dfinition d'un nombre complexe. gnres par une suite d'instructions : Certaines fonctions de MATLAB gnrent automatiquement des matrices, ce sont par exemple les fonctions magic ou randn. Ecrire A=magic(n) va crer un carr magique A de dimension nn. Ecrire A=randn(m,n) va crer une matrice mn dont les lments seront alatoirement distribus suivant une loi normale centre. charges partir d'un fichier. Chaque lment d'une matrice est accessible par ses indices crits entre parenthses. L'lment de la 3me ligne et 4me colonne est A( 3,4) . Pour un vecteur x la 2me composante est x( 2) . Attention les indices sont forcment strictement positifs. L'indexation des lments d'un tableau commence toujours 1. 2.1.2 Lignes d'instructions MATLAB utilise un langage interprt. Chaque expression crite est interprte et value. La syntaxe est gnralement de la forme: variable = expression ; expression ; Le point virgule de terminaison de ligne indique si le rsultat de l'valuation est affich ou non l'cran selon qu'il est absent ou prsent. Cela facilite la mise au point en offrant la possibilit d'obtenir trs simplement des rsultats intermdiaires de calcul. Sous la premire forme l'expression est value et le rsultat assign la variable dfinie. Sous la deuxime forme l'expression est value et le rsultat est assign une variable interne appele ans. Diffrentes expressions, spares par des virgules ou des points virgules, peuvent apparatre sur une mme ligne. Une ligne d'instructions est gnralement termine par un retour chariot, cependant pour des lignes trop longue on peut rpartir sur plusieurs lignes en utilisant comme indicateur de continuation une suite d'au moins 3 points. Ainsi: x = [ 1 2 3 4] est quivalent : x = [1 2 ... 3 4] Il y a distinction entre majuscule et minuscule. Ainsi variable est diffrent de Variable. L'excution peut tre arrte par l'utilisation de CTRL_C ou CTRL_BREAK. Pour visualiser l'tat d'une session, la commande who ou whos renvoie la liste des variables existantes ainsi que leur type (rel ou complexe) et leur taille. Pour librer de l'espace mmoire on peut liminer une variable par clear nom_de_la_variable.

2. Gnralits sur MatLab


2.1 Entre et traitement des donnes
2.1.1 Matrices Comme il a dj t mentionn MATLAB travaille essentiellement sur des objets de type matriciel qui peuvent tre rels ou complexes. Par consquent un scalaire est une matrice 11 et un vecteur une matrice N1. Les matrices peuvent tre dfinies de plusieurs faons: sous forme d'une liste explicite: A = [ 12 1 4; 8 5 13; 7 9 2] est la matrice : 12 1 4 A = 8 5 13 7 92 qui peut aussi tre dfinie par:

Si l'on veut sauvegarder simplement la totalit des variables avant de quitter une session MATLAB, la commande save sauvegarde l'ensemble dans un fichier appel matlab.mat que l'on pourra recharger avec la commande load la session suivante. 2.1.3 Oprations sur les Matrices Les oprations suivantes sont accessibles: + addition - soustraction multiplication ^ lvation la puissance ' transpose conjugu \ division gauche / division droite Il y a vrification des dimensions des lments mis en jeu pour chaque opration et un message d'erreur est dlivr en cas de problme. Un seul cas chappe cette rgle c'est celui d'une opration entre un scalaire et une matrice pour lequel l'opration ( +,-,*,/) a lieu entre le scalaire et chacun des lments de la matrice. Les deux divisions possibles sont dfinies comme suit: Si A est une matrice carre inversible et b est un vecteur colonne (resp. ligne) de dimension compatible, alors: x = A\b rsout le systme A*x = b (resp. x = b/A rsout le systme x*A = b). Dans le cas de la division gauche si la matrice A n'est pas carre, elle est factorise selon la mthode d'orthogonalisation de Householder et les facteurs sont utiliss pour rsoudre le systme sur ou sous dimensionn au sens des moindres carrs. On pourra aisment vrifier que les divisions gauche et droite sont lies par: b/A = ( A \b ) . Les oprations *, , et / peuvent agir lment par lment si on les fait prcder d'un point. On pourra vrifier la diffrence de rsultat entre A*B et A.*B. directement

for k = n:-1:1, x = [x, 2*k], end On remarquera ici qu'il existe des fonctions MATLAB permettant de manipuler simplement les lignes ou colonnes de matrices. Ainsi renverser les composantes d'un vecteur s'effectue simplement en crivant y = flipud(x). flipud tant la contraction de flip up down. On trouvera de mme fliplr (pour left right) etc... Si on utilise une matrice au lieu d'un compteur la boucle est excute autant de fois que le nombre de colonnes de la matrice. Exemples: s = 0; A = randn(3) for cmpt = A s = s+1 end s = 0; A = randn(2) for cmpt = A s = s+sum(cmpt) end

2.2.2 WHILE La boucle est rpte tant que la relation reste vraie. La syntaxe est de la forme: while relation expression; end Supposons que l'on dispose d'une observation de signal reprsente par un vecteur x de taille N et que l'on veuille en calculer le spectre sur M points o M = 2n N. M peut tre calcul par la squence suivante: n = 0; while 2n size(x) n = n+1; end M = 2n Il suffira alors d'excuter y = fft(x,M) pour obtenir le rsultat dsir, la fonction fft compltant le vecteur x par M-N zros. 2.2.3 IF La syntaxe peut revtir les formes: 1. if relation expression; end 2. if relation expression; else expression; end 3. if relation expression; elseif relation expression; else expression; end L'expression n'est excute que si la relation est vraie. La notion de relation au sens de MATLAB est donne dans le paragraphe suivant. 2.2.4 Relations Les oprateurs de relation sont:

2.2 Instructions de contrle


Comme dans la plupart des langages il existe des instructions de contrle de la forme for, while ou if. On notera ici qu'en raison du caractre interprt du langage il faut, dans la mesure du possible, viter de les utiliser et les remplacer par la notion de boucle implicite que l'on verra plus loin. 2.2.1 FOR La syntaxe est de la forme: for compteur = dbut : pas : fin, ou for Matrice expression, expression; end La squence suivante: >> x = [ ]; for k = 1:n, x = [x, 2*k], end ou de manire quivalente: x = [ ]; for k = 1:n, x = [x, 2*k], end va crer un vecteur x de longueur n. Le vecteur renvers serait cr par: x = [ ];

< >

infrieur suprieur

<= infrieur ou gal >= suprieur ou gal == gal ~= diffrent de Les valuations de relations peuvent elles-mmes tre manipules par des oprateurs logiques tels que & (et), | (ou) et ~ (non). Quand une relation intervient entre des scalaires, le rsultat est un scalaire qui vaut 1 ou 0 suivant que la relation est vraie ou fausse. Quand une relation intervient entre deux matrices de mme dimension, le rsultat est une matrice constitue de 1 et de 0 suivant que la relation entre les lments correspondants des matrices est vraie ou fausse. Si on utilise une relation entre matrices dans un while ou un if l'interprtation sera vraie si tous les lments de la matrice rsultante de l'valuation de la relation sont 1. Suite cette interprtation il faudra prendre quelques prcautions d'usage. Ainsi le programme suivant: if A ~= B expression end rsultera dans l'excution de expression si et seulement si tous les lments de mmes indices dans A et B sont diffrents. Ce qui n'est pas forcment le rsultat escompt. Pour se ramener la diffrence au sens mathmatique du terme il faudra utiliser l'instruction any et le programme devient: if any(any(A ~= B)) expression end On applique deux fois any, car any est un oprateur vectoriel qui s'applique aux matrices dimension par dimension.

max(A) renvoie un vecteur ligne dont chaque composante correspond au maximum de chacune des colonnes de A, alors que max(max(A)) renvoie l'lment maximum de A. 2.3.3 Les fonctions matricielles La plupart des fonctions de MATLAB oprent sur des matrices et c'est ce qui fait en grande partie la puissance du logiciel. On peut citer eig (vecteur propre, valeur propre), chol (dcomposition de Cholesky), svd (dcomposition en valeurs singulires), lu (factorisation LU), qr (factorisation QR), det (dterminant), rank (rang) etc... Ces fonctions peuvent renvoyer un ou plusieurs arguments. Ainsi [X, V] = eig[A], renvoie une matrice X dont les colonnes sont les vecteurs propres de A et une matrice diagonale V constitue des valeurs propres de A. Alors que X = eig[A] renvoie un vecteur colonne X dont les composantes sont les valeurs propres de A. 2.3.4 Matrices creuses MATLAB est particulirement gourmand en place mmoire, aussi a-t-il t prvu de ne stocker que les lments non nuls des matrices. La manipulation s'effectue avec les commandes sparse et full. Ainsi sA = sparse(A) gnre une matrice sA qui ne comporte (en mmoire) que les lments non nuls de A. On peut revenir A par A = full(sA). On consultera l'aide de spdiags, speye, sparse, spones et sprandn.

2.4 Notations et raccourcis


2.4.1 Boucle implicite MATLAB tant un langage interprt l'utilisation de boucles ralentit considrablement l'excution. Pour pallier cet inconvnient il existe la notion de boucle implicite qui, elle, est excute vectoriellement donc plus rapidement. Ainsi crire n = 1:5, revient crer le vecteur ligne n = [1 2 3 4 5]. On peut changer le pas d'incrmentation en crivant n = 1:2:7, ce qui quivaut n = [1 3 5 7]. Ceci s'tend aux nombres non entiers (x = .1:.01:1.) et le pas d'incrmentation peut tre ngatif. Exemples: Soit le vecteur t = [-1;0;1;3;5] et la matrice A de Vandermonde construite partir de t. La construction directe en est: n = length(t); for j = 1:n for i = 1:n A(i,j) = t(i) (n-j); end end 2.4.2 Utilisation du ':' La notation ':' est trs utile pour travailler sur des sous matrices. Nous en donnons quelques variantes cidessous. A(1:3,4) est le vecteur colonne dont les composantes sont les trois premiers lments de la quatrime colonne de la matrice A. A(:,2) est la deuxime colonne de la matrice A A(1:3,:) est la matrice constitue des trois premires lignes de A A(:,[3 6]) est la matrice deux colonnes qui correspondent aux colonnes 3 et 6 de A.

2.3 Les Fonctions


On peut en distinguer trois types : les fonctions scalaires, les fonctions vectorielles et les fonctions matricielles. 2.3.1 Les fonctions scalaires Comme leur dfinition l'indique elles agissent principalement sur des scalaires. On peut citer sans les commenter: sin asin cos acos tan atan exp log abs sqrt sign round etc... Cependant on peut aussi les faire agir sur des matrices. Dans ce cas elles agissent lment par lment, ainsi sin(A) est la matrice o chaque lment est la racine carre de chaque lment de A. 2.3.2 Les fonctions vectorielles Elles sont prvues pour oprer sur des vecteurs lignes ou colonnes. On peut citer sans les commenter: max min sum prod mean std any etc... De mme que pour les fonctions scalaires, on peut les faire oprer sur des matrices. Dans ce cas elles agissent sur chacune des colonnes de la matrice. Pour obtenir une action ligne par ligne il suffit d'utiliser l'oprateur de transposition. Ainsi si A est une matrice,

etc...

A(:,[3 6]) = B(:,1:2) remplace les colonnes 3 et 6 de A par les deux premires colonnes de B.

2.5 Les fichiers


MATLAB peut excuter une suite d'instructions figurant dans des fichiers. De tels fichiers sont appels fichiers M ou 'M-files' car leur extension est toujours .m. Ces fichiers sont cres l'aide d'un diteur de texte standard. Il en existe deux types: les fichiers textes ou scripts et les fichiers fonctions. De mme pour les fichiers de donnes, on trouve des fichiers d'un format spcifique MATLAB comportant un en-tte que l'on cre par la commande save et que l'on charge par la commande load. 2.5.1 Fichiers script Un fichier script est une suite d'instructions MATLAB. Taper le nom du fichier sans son extension sur la ligne de commande MATLAB rsulte en l'xcution des instructions contenues dans le fichier. Un M-file peut en appeler un autre ou s'appeler rcursivement. Il est cependant plus courant d'utiliser des fichiers fonctions. 2.5.2 Fichiers function Les fichiers fonctions permettent d'tendre les possibilits de MATLAB. Ils sont l'quivalent des SUBROUTINE FORTRAN, des fonctions C etc... Ces fonctions utilisent des variables qui par dfaut sont locales, mais peuvent tre dclares global. La syntaxe est de la forme: function [out1, out2, ...] = function_name(in1, in2, ...) o outi dsigne une variable de sortie, et ini dsigne une variable d'entre. Exemple1: function a = aleat(m,n,min,max) % aleat(m,n) renvoie une matrice mn dont les lments suivent % une loi normale centre. % aleat(m;n;min,max) renvoie une matrice mn dont les lments % suivent une loi uniforme entre min et max. if nargin 3, a = randn(m,n); else a = (max - min + 1)*rand(m,n) + min; end Ce script sera sauvegard dans un fichier nomm aleat.m, le nom du fichier et de la fonction doit tre le mme. Les lignes prcdes d'un % qui suivent la dclaration de la fonction sont utilises comme aide. On y accde par help aleat. Cette fonction est appele sous la forme x = aleat(2,3), ou sous la forme x = aleat(2,5,-2,2). La fonction nargin est utilise pour tester le nombre d'arguments d'entre. On peut galement utiliser nargout pour traiter le nombre d'arguments de sortie. Exemple 2: function [moyenne, ecart-type] = stat(x) % Si x est une matrice elle est traite colonne par colonne % moyenne est le vecteur des moyennes

% ecart-type est le vecteur des ecart-type. [m,n] = size(x); if m == 1 m = n; end moyenne = sum(x) / n; ecart-type = sqrt(sum(x.2)/m - moyenne.2); On peut facilement obtenir le listing d'un M-file en excutant type file_name sur la ligne de commande MATLAB. 2.5.3 Visibilit des variables Seules les variables d'un script sont affichables l'aide de who ou whos, les variables internes une function sont locales au mme titre que dans le langage C. On peut cependant rendre des variables globales, ce qui vitent de les transmettre ventuellement plusieurs fonctions. 2.5.4 Fichiers de donnes Les fichiers MATLAB Il est possible tout instant de sauvegarder une ou plusieurs variables dans un fichier spcifique MATLAB dont l'extension sera .mat. La commande utiliser est save. Les diffrents formats et options sont lists cidessous: save fname X sauve seulement X. save fname X Y Z sauve X, Y, et Z. save fname X Y Z -ascii utilise le format ASCII 8-digit au lieu du binaire. save fname X Y Z -ascii -double utilise le format ASCII 16-digit. save fname X Y Z -ascii -double -tabs utilise le format ASCII 16-digit dlimit par des tabs. Pour recharger un tel fichier on utilisera load fname. Chaque variable ayant t sauvegarde par son nom, les variables recharges auront les noms, dimensions et valeurs au moment de la sauvegarde. 2.5.5 Les fichiers standards On appelle fichier standard tout fichier cre partir d'un langage de programmation que ce soit un fichier texte ou binaire. Ces fichiers sont accessibles en lecture ou criture l'aide d'une syntaxe proche de celle du langage C. L'ouverture s'effectue en allouant un pointeur de fichier par la fonction fopen. Les lecture et criture s'effectuent l'aide des fonctions fread et fwrite. La fermeture du fichier est ralise par fclose. Ouverture de fichier: fid = fopen('fname', permission) 'fname' est une chane de caractres spcifiant le nom du fichier. Permission prend les formes suivantes: 'r' lecture 'w' criture (cration si ncessaire) 'a' ajout (cration si ncessaire) 'r+' lecture et criture (pas de cration) 'w+' troncation ou cration pour lecture et criture 'a+' lecture et ajout (cration si ncessaire) Par dfaut les fichiers sont ouverts en mode binaire. Pour les ouvrir en mode texte il faut utiliser 'rt' ou 'wt'. Lecture d'un fichier: [a, count] = fread(fid,size,precision) Lecture des donnes binaires du fichier spcifi par fid et criture dans la matrice a. L'argument de sortie optionnel count renvoie le nombre d'lments lus.

L'argument size est optionnel; s'il n'est pas spcifi ou si il vaut inf, le fichier est lu entirement; s'il est spcifi, les formes valides sont: N pour lire N lments dans un vecteur colonne, inf pour lire tout le fichier, [M,N] pour remplir une matrice colonne par colonne. Dans ce dernier cas N peut tre inf, mais pas M. L'argument precision dsigne le type de donnes lire. C'est une chane de caractres qui prend les formes suivantes: 'char', 'schar', 'short', 'int', 'long', 'float', 'double', 'uchar', 'ushort', 'uint', 'ulong' etc... Ecriture d'un fichier: count = fwrite(fid,a,precision) Ecriture des donnes binaires de la matrice a dans le fichier spcifi par fid . L'argument de sortie optionnel count renvoie le nombre d'lments effectivement crits. L'argument precision dsigne le type de donnes lire. C'est une chane de caractres qui prend les mmes formes que pour la lecture. Fermeture de fichier: fclose(fid) On utilisera l'aide MATLAB pour l'utilisation de fonctions telles que fseek, fscanf, fprintf, etc...

Enfin Z = input('Entrez la valeur de Z: ') affichera le texte et attendra l'entre de la valeur qui sera valide lors de la frappe sur la touche Entre ou Enter.

2.8 Commandes systme


Certaines commandes quivalentes des commandes systme sont intgres MATLAB. Ainsi on pourra utiliser delete, type, dir etc.... MATLAB tant multiplateforme certaines commandes UNIX sont acceptes sous MS-WINDOWS c'est le cas par exemple de pwd, what, ls, .... Cependant toutes les commandes ne sont pas accessibles directement. Pour excuter n'importe quelle commande systme on la fera prcder d'un point d'exclamation !. Il en est de mme pour lancer un excutable (fichier .exe) partir d'une ligne de commande MATLAB.

2.9 Copie d'cran texte


La commande diary file_name permet de sauvegarder dans le fichier file_name toute la partie active de l'cran l'exception des graphiques. La sauvegarde s'effectue sous forme de texte ce qui permet une dition ultrieure du fichier.

2.6 Format d'affichage


Tous les calculs effectus dans MATLAB le sont en double prcision. Cependant le format d'affichage des rsultats peut tre contrl par la commande format. Le tableau ci-dessous rsume les diffrents formats utilisables: format short 4 dcimales (dfaut) format long 14 dcimales format short 4 dcimales notation scientifique e format long e 14 dcimales notation scientifique approximation par une fraction format rat rationnelle format hex format hxadcimal correspond une sortie en dollars et format bank cents format + +, -, espace Un format reste actif tant qu'il n'a pas t redfini par la commande format, l'exception des commandes format compact et format loose qui servent supprimer (resp. restaurer) les lignes blanches qui pourraient apparatre l'affichage.

2.10 Les graphiques


MATLAB peut afficher des courbes planes, des courbes 3D, des surfaces mailles 3D ou des surfaces facettes 3D. Les commandes respectives sont plot, plot3, mesh et surf. 2.10.1 Courbes planes La commande plot(y) trace la courbe correspondant au vecteur y en fonction du numro des composantes. plot(x,y) tracera le vecteur y en fonction du vecteur x si ils sont de mme taille. La commande plot ouvre une fentre graphique pour tracer la courbe. Les fentres graphiques sont numrotes, la fentre active tant par dfaut la fentre 1. Pour rendre active une fentre graphique on fera prcder le trac par la commande figure(n), o n est le numro de la fentre. >> x = -pi : .01 : pi; y = sin(x); plot(x,y) tracera la fonction sinus(x) dans l'intervalle [ -,] avec un pas de 0.01. Une commande plot suivante effacera le premier graphique pour tracer le nouveau dans la mme fentre si la commande figure n'a pas t utilise entre temps. Cependant il est possible de tracer des graphiques en surimpression l'aide de la commande hold on. Cette commande a pour effet de conserver le graphe prsent avant de tracer le suivant. La commande hold off annule cette possibilit. MATLAB permet galement de tracer directement partir d'une fonction avec la commande fplot. Soit la fonction sinus dfinie dans le fichier sinus.m par: function y = sinus(x) y = sin(x); En excutant: fplot('sinus', [-pi pi]), on obtiendra le graphe. Le graphe obtenu peut tre agrment d'un titre, de lgendes ou de texte. Les commandes MATLAB correspondantes sont: title('Ceci est le titre de la figure'); xlabel('Lgende des abscisses'); ylabel('Lgende des ordonnes');

2.7 Chanes de caractres et messages


Les chanes de caractres sont dfinies entre simples 'quotes'. Ainsi c = 'Ceci est une chane' dfinira la variable c comme une chane de caractres que l'on pourra utiliser pour afficher un message. L'affichage de messages s'effectue de plusieurs manires. On utilise pour cela les fonctions disp, error ou input. Par exemple disp(c) affichera la cha ne c l'cran. disp('Ceci est une cha ne') aura le mme effet. Si on utilise error('Erreur dans la fonction func'), Le texte sera affich et de plus l'excution du programme sera arrte.

gtext et text positionnement et criture dans la zone graphique. Un graphe possde des attributs qui peuvent tre modifis l'aide de commandes, on consultera l'aide de axis et plot. Il est galement possible de tracer plusieurs graphes dans la mme fentre l'aide de la commande subplot (voir aide). Enfin des reprsentations types sont obtenues l'aide des commandes polar, bar, hist, etc... Exemple: On utilisera la fonction peaks (help peaks). Dfinir M = peaks(20). plot(M) trace 20 courbes reprsentants les colonnes de M. Les numros de lignes servent d'abscisse. Rajouter un titre, une lgende en abscisse et une lgende en ordonne. Le script suivant permet un affichage multiple : >> y1 = M(:,1); y2 = M(:,2); >> subplot(211), plot(y1) >> subplot(212, plot(y2) 2.10.2 Courbes 3D La commande plot3 est identique la commande plot, elle ne fait appel qu' une coordonne supplmentaire. La syntaxe de base est plot3(x,y,z). Les axes, titres et lgendes se traitent comme dans le cas des courbes planes, la commande zlabel est disponible.. Exemple: >> t = 0:pi/50:10*pi ; >> plot3 (sin(t), cos(t), t). 2.10.3 Maillages et surfaces 3D La commande mesh permet de visualiser des courbes 3D sous forme de surfaces mailles. La surface maille est dfinie par les cotes (coordonnes z) de points situs au-dessus d'une grille rectangulaire du plan (x,y). La commande surf s'utilise de la mme faon mais produit une surface facettes colores. Le coloriage des facettes est modifiable l'aide de la commande shading. Il existe trois possibilits shading faceted, shading interp et shading flat. La commande shading s'utilise aprs la commande surf. Le profile de couleurs d'une surface est dfini par la commande colormap(argument) qui possde un certain nombre d'arguments prdfinis tels que hsv (dfaut), hot, cool, jet, pink, copper, flag, gray et bone. L'angle de vue est gr par la commande view. D'autres fonctions sont relies la visualisation 3D telles que meshz, surfc, surfl, contour et pcolor.

Gestions des commandes et des fonctions help what type lookfor which demo path cedit aide Listing du nom des M_files prsents impression d'un M_file recherche d'une entre dans le help localise les fonctions et fichiers lance la dmonstration Dfini les chemins d'accs aux fichiers et fonctions paramtres d'dition d'une ligne de commande information sur MATLAB et The MathWorks renvoie une rponse alatoire non 'neutre'

whatsnew affiche les fichiers README de la toolbox info why

Gestion des variables et de l'espace de travail who save load clear pack size disp affiche les variables courantes Sauve l'espace de travail sur disque restaure l'espace de travail partir du disque efface les variables et fonctions de la mmoire rorganise la mmoire renvoie la taille d'une matrice affiche une matrice de texte Fentre de commande MatLab clc efface la fentre de commande home curseur en haut de l'cran format dfinit le format d'affichage echo affiche les instructions excutes par un script more contrle de l'affichage pagin Commandes systme cd pwd dir, ls change le directory courant affiche le directory courant liste les fichiers whos affiche les variables courantes, format long

length renvoie la longueur d'un vecteur

delete suppression de fichiers getenv renvoie la variable d'environnement ! diary appelle et excute une commande systme sauvegarde le texte d'une session MATLAB Dmarrer et quitter MatLab quit, exit quitter MATLAB startup M_file de lancement de MatLab matlabrc M_file principal de lancement

3. Rsum des commandes MatLab


On a regroup par sujet d'intrt les diffrentes commandes et fonctions de MatLab. Il en existe d'autres que l'on pourra trouver dans les diffrentes botes outils (toolbox) qui viennent complter le logiciel de base.

Oprateurs sur les Matrices + * ^ / \ ' .' addition soustraction multiplication puissance division droite division gauche transpose conjugu transpose + -

Oprateurs sur les Tableaux addition soustraction

Intgration numrique quad trapz intgrale de Simpson mthode des trapzes Matrices prdfinies zeros ones eye diag toeplitz magic compan linspace matrice de 0 matrice de 1 matrice identit matrice diagonale matrice de Toeplitz carr magique matrice compagnon vecteurs linairement espacs quad8 intgrale de Newton-Cotes

.* multiplication .^ puissance ./ .\ division droite division gauche

kron produit de Kronecker Oprateurs Relationnels Oprateurs Logiques < > infrieur suprieur & | ~ xor et ou non ou exclusif

logspace vecteurs logarithmiquement espacs meshgrid grille pour les graphiques 3D rand randn hilb invhilb vander pascal hankel rosser wilkinson gallery nombres alatoires rpartition uniforme nombres alatoires rpartition normale Hilbert inverse de Hilbert (exact) Vandermonde Pascal Hankel matrice test pour le calcul des valeurs propres matrice test pour le calcul des valeurs propres deux matrices test spciales Dures et Date date clock etime tic, toc date courante horloge dure d'excution affiche le dbut et la fin d'excution

<= infrieur ou gal >= Suprieur ou gal == gal ~= diffrent de

Variables prdfinies ans eps realmax realmin pi i, j inf NaN flops nargin nargout rponse une expression sans assignation prcision de la virgule flottante plus grand nombre flottant plus petit nombre flottant positif [(-1)] Not a Number nombre d'oprations flottantes par seconde nombre d'arguments d'entre d'une fonction nombre d'arguments de sortie d'une fonction

hadamard Hadamard

computer type du calculateur Caractres spciaux = [] () . .. ... , ; % : assignation dfinition de matrices ou vecteurs; gre la priorit des oprations arithmtique point dcimal directory parent indique une ligne suite sparateur d'arguments ou d'instructions fin de lignes (matrices) ou suppression de l'affichage commentaires manipulation de sous matrices ou gnration de vecteurs

cputime temps CPU coul Manipulation de Matrices diag rot90 fliplr flipud tril triu .' : cration ou extraction de la diagonale rotation de 90 retournement gauche-droit retournement haut-bas partie triangulaire infrieure partie triangulaire suprieure transposition conversion matrice vecteur

reshape redimensionnent

10

Textes et chanes Fonctions logiques exist any all find isnan isinf finite isieee teste l'existence d'une variable ou d'une fonction vrai si un lment est vrai vrais si tous les lments sont vrais cherche l'indice des lments non nuls vrai si l'lment n'est pas un nombre vrai pour tout lment infini vrai pour tout lment fini vrai si la reprsentation est au format IEEE string abs blanks eval propos des chanes dans MATLAB convertit une chane en valeur numrique une chane d'espaces value une chane contenant du code MATLAB convertit un nombre entier en chane vrai si l'lment est une chane comparaison de chanes conversion en majuscule conversion en minuscule convertit une chane hexadcimale en flottant convertit un entier en une chane hexadcimale Mise au point (debug) dbstop dbcont met un point d'arrt reprend l'excution dbclear supprime un point d'arrt dbdown change le contexte local dbstack affiche qui appelle qui dbstatus liste des points d'arrt dbstep Instructions spcifiques input menu pause function eval feval global nargchk indicateur d'attente d'entre gnre un menu de choix pour l'utilisateur attente dfinition de fonction excute un chane de caractre excute une fonction dfinie dans une chane dfinit les variables comme globales valide le nombre d'arguments d'entre Traitement du son saxis modification de l'chelle d'amplitude sound convertit un vecteur en son auread lit un fichier audio au format SUN auwrite crit un fichier audio au format SUN lin2mu conversion loi linaire vers loi mu2lin conversion loi vers loi linaire Fonctions mathmatiques lmentaires abs angle sqrt real imag conj gcd lcm round fix sign rem exp valeur absolu ou module argument d'un complexe racine carre partie relle partie imaginaire complexe conjugu PGCD PPCM arrondi l'entier le plus proche troncature signe de reste de la division exponentiel keyboard considre le clavier comme un fichier script dbtype dbup dbquit excute une ou plusieurs lignes affiche un M_files avec lignes numrotes inverse de dbdown sortie du mode debug

num2str convertit un nombre en chane int2str isstr strcmp upper lower hex2num str2num convertit une chane en nombre

isempty vrai pour une matrice vide issparse vrai pour une matrice creuse isstr strcmp vrai pour une chane de caractres comparaison de deux chanes Instruction de contrle if else end for test conditionnel complte if terminaison de if, for et while instruction de rptition avec compteur

hex2dec convertit une chane hexadcimale en entier dec2hex

elseif complte if

while instruction de rptition avec test break interrompt une boucle for ou while return retour error affiche un message et interrompt l'excution

floor / ceil arrondi vers - / vers +

log / log10 log nprien / log dcimal

11

Sauvegarde et copie graphique print orient imprime ou sauve dans un fichier inv lu rref Fonctions trigonomtriques sin, asin, sinh, asinh cos, acos, cosh, acosh tan, atan, tanh, atanh cot, acot, coth, acoth sec, asec, sech, asech csc, acsc, csch, acsch 1./cos(z), acos(1./z), 1./cosh(z), acosh(1./z) 1./sin(z), asin(1./z), 1./sinh(z), asinh(1./z) chol qr nnls lscov null orth eig hess schur cdf2rdf rsf2csf balance qz svd pinv orientation paysage ou portait Dcompositions et factorisations de Matrices inversion dcomposition LU rduction de lignes factorisation de Cholesky dcomposition QR moindres carrs non-ngatifs moindres carrs avec covariance connue noyau orthogonalisation valeurs et vecteurs propres forme de Hessenberg dcomposition de Schur forme complexe diagonale vers forme relle diagonale par blocs forme relle diagonale par blocs vers forme complexe diagonale mise l'chelle pour le calcul des valeurs propres valeurs propres gnralises dcomposition en valeurs singulires pseudo-inverse Traitement de signal corrcoef cov filter filter2 cplxpair Analyse de donnes par colonne max min mean median std sort sum prod valeur max valeur min valeur moyenne valeur mdiane cart type tri en ordre croissant somme des lments produit des lments Conditionnement cond rcond suivant norme L2 ([(max)/( min)]) 1 bon, 0. mauvais unwrap coefficients de corrlation matrice de covariance filtrage monodimensionnel filtrage bidimensionnel tri en paires complexes suppression des sauts de phase FFT monodimensionnel (frquences de 0 1) FFT bidimensionnel FFT inverse FFT inverse FFT (frquences de -1/2 1/2) printopt configuration de l'imprimante

Fonctions prdfinies bessel fonction de Bessel beta rat rats erf erfinv ellipj expint log2 pow2 fonction beta approximation par un rationnel format de sortie pour rat fonction erreur erf inverse de erf fonction elliptique de Jacobi fonction intgrale exponentielle pour n=1 logarithme base 2 ou dcomposition mantisse, exposant calcule 2 puissance y gamma fonction gamma

polyeig polynme aux valeurs propres

ellipke intgrale elliptique complte

nextpow2 puissance de 2 immdiatement suprieure fft fft2 ifft ifft2 fftshift

cumsum vecteur des sommes partielles cumules cumprod vecteur des produits partiels cumuls hist histogramme Animations moviein initialise l'espace mmoire pour l'animation getframe enregistre une image pour l'animation movie joue l'animation

condest suivant norme L1 norm rank normes L1, L2, Lp et L rang normest estimateur de la norme L2

12

4. Applications
4.1 Systmes dquations non linaires :
On se propose de travailler pour la recherche des racines de la fonction non linaire suivante :

fval = 1.0e-006 * -0.4059 -0.4059

4.2 Traitement des polynmes :


Dans MATLAB, on peut obtenir la mme solution avec la fonction fzero. Pour cela, il faut crer le fichier.m MATLAB (f.m, par exemple) dans lequel sera programm f(x). % ****************************** function f=f(x) f=exp(x)-2*cos(x) % ***************************** Pour obtenir la solution de f(x) = 0 au voisinage de x = 0,5, on excute la commande fzro(f,0.5). Cette fonction affiche les valeurs obtenues de f(x) chaque itration pour donner la fin la solution recherche x*. >>d=fzero('f',0.5) f= -8.8818e-016 d= 0.5398 La boite outil Optimisation Toolbox propose les fonctions fsolve et fsolve2 qui permettent respectivement, la recherche des racines dune fonction dans un intervalle donn et les solutions dquations non linaires et de systmes dquations non linaires. Nous allons appliquer ces fonctions la rsolution dun systme de deux quations non linaires 2 inconnues, par exemple : Le produit de convolution : h(x) = f(x) g(x) est donn par : >>f=[3 2 -1 4]; >>g=[2 0 -3 5 -1]; >>h=conv(f,g) h= 6 4 -11 17 10 -19 21 -4 Ainsi, le polynme h(x) obtenu est : est reprsent par : >>f=[8 0 2 -3 4 -2] f =8 0 2 -3 4 -2 La fonction conv donne le produit de convolution de deux polynmes. Lexemple suivant montre lutilisation de cette fonction. Soient : Dans MATLAB, les polynmes sont reprsents sous forme de vecteurs lignes dont les composantes sont donnes par ordre des puissances dcroissantes. Un polynme de degr n est reprsent par un vecteur de taille (n+1). Le polynme :

2 x1 x2. e x1 = 0 x1 + 2 x2. e x 2 = 0
partir de litration x0 = [-5 -5]. Il faut, dabord, crer le fichier myfun.m MATLAB % ***************************** function F = myfun(x) F = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]; % ***************************** Aprs, on fait appel la routine suivante. >> x0 = [-5; -5]; >> [x,fval] = fsolve(@myfun, x0) Aprs 33 valuations de la fonction myfun, un zro est trouv. x= 0.5671 0.5671

La fonction deconv donne le rapport de convolution de deux polynmes (dconvolution des coefficients du polynme). Lexemple suivant montre lutilisation de cette fonction. Soient les mmes fonctions prcdentes f(x) et g(x) :

La division de g(x) par f(x) : h( x ) = par la fonction deconv : >>f=[3 2 -1 4]; >>g=[2 0 -3 5 -1]; >>h=deconv(g,f) h= 0.6667 -0.4444 et le polynme h(x) obtenu est :

g( x ) est donne f (x)

13

Soit le polynme suivant :

Aprs factorisation, on a :

>>Val_prop=eig(A) Val_prop = 2 5 Pour valuer le polynme P(x) en un point donn, on doit utiliser la fonction polyval. On value ce polynme pour x=1, par exemple : On veut valuer en x=2.5 le polynme suivant :

o r1, r2, , rn sont les racines du polynmes P(x). Exemple :

Ce polynme est quivalent :

>>C=[3 -7 2 1 1]; >>x=2.5; >> y=polyval(C,x) y= 23.8125 Si x est un vecteur contenant plusieurs valeurs, y sera aussi un vecteur qui contiendra le mme nombre dlments que x.

Un polynme dordre n possde n racines qui peuvent tre relles ou complexes. Le polynme :

qui est reprsent dans MATLAB par : >>P=[2 1 4 5]; a pour racines ri. Pour trouver ces racines, on doit excuter la fonction roots. Do : >>r=roots(P); et le rsultat donn est : >> r r= 0.2500 + 1.5612i 0.2500 - 1.5612i -1.0000 Les trois racines de ce polynme (dont 2 sont complexes) sont donnes sous forme dun vecteur colonne. Quand les racines sont connues, les coefficients peuvent tre recalculs par la commande poly. Exemple : >>poly(r) ans 1.0000 0.5000 2.0000 2.5000 =

4.3 Interpolation linaire et non linaire


4.3.1. Interpolation au sens des moindres carrs Dans le domaine de lanalyse numrique des donnes, on a souvent besoin dtablir un modle mathmatique liant plusieurs sries de donnes exprimentales. Linterpolation polynomiale consiste approcher la courbe liant les deux sries de mesures par un polynme. Les coefficients optimaux de ce polynme sont ceux qui minimisent la variance de lerreur dinterpolation. Ce principe (voir cours) est connu sous le nom de la mthode des moindres carr. La fonction polyfit retourne le polynme P de degr n permettant dapprocher la courbe y = f(x) au sens des moindres carrs. Exemple : >> x=[1.1 2.3 3.9 5.1]; >>y=[3.887 4.276 4.651 2.117]; >>a=polyfit(x,y,length(x)-1) a -0.2015 1.4385 -2.7477 5.4370 =

La fonction poly accepte aussi une matrice comme argument dont elle retourne le polynme caractristique. Exemple : >>A=[3 1;2 4]; >>p=poly(A) p 1 -7 10 =

Ainsi, le polynme dinterpolation de y (dordre length(x)-1=3) est :

Pour dduire lerreur entre les valeurs exprimentales et le modle obtenu par la fonction polyfit, on dispose de la fonction polyval qui retourne la valeur du polynme P pour toutes les composantes du vecteur (ou de la matrice) x. Ainsi, cette fonction donne : >>yi=polyval(a,x) yi 3.8870 4.2760 4.6510 2.1170 =

Ainsi, le polynme caractristique de la matrice A est :

Les racines de ce polynme sont les valeurs propres de la matrice A. ces racines peuvent tre obtenues par la fonction eig :

On remarque ici que les valeurs exprimentales de y sont bien restitues (y=yi). Dans ce cas, on a un

14

coefficient de corrlation qui est gal 1 (voir la dfinition de ce coefficient dans le cours). Pour mieux comprendre ces fonctions prdfinies dans MATLAB, on va simuler une courbe exprimentale par une sigmode laquelle on superpose un bruit du type Gaussien. Cette courbe sera donne par :

donnes. En effet, un polynme dordre 5 donne une meilleure approximation de la sigmode. Ainsi, dans le programme prcdent (sigreg.m), on change dans le 1 par 5 dans la fonction polyfit, et on obtient les rsultats suivants : >> regres Polynme d'interpolation P= 0.0002 -0.0000 -0.0111 0.0008 0.2326 0.4844 La variance de l'erreur d'interpolation est : 0.002279

Le programme correspondant lapproximation des ces donnes dans MATLAB (regres.m, par exemple) est le suivant : %****************************************** % Gnration de donnes exprimentales: * % y=1./(1+exp(-x))+0.05*randn(1,length(x))* clc; % Effacer l'cran clear all; % Effacer des variables de l'espace de travail x=-5:0.1:5; % Intervalle de dfinition et de calcul de la sigmode % Fonction sigmode bruite y=1./(1+exp(-x))+0.05*randn(1,length(x)); plot (x,y); % Trac de la sigmode bruite title('Fonction sigmode bruite - Polynme d''interpolation'); xlabel('x');ylabel('y'); % Polynme d'interpolation d'ordre 1 P=polyfit(x,y,1); % Valeurs du polynme d'interpolation Vp=polyval(P,x); % Trac du polynme d'interpolation hold on; plot(x,Vp,'--'); % Calcul de l'erreur d'interpolation erreur=y-Vp; % Trac de la courbe de l'erreur plot(x,erreur,':') grid gtext('Mesures') gtext('Erreur') gtext('Modle') hold off % Affichage du polynme d'interpolation disp('Polynme d''interpolation') P Var_erreur=num2str(std(erreur).^2); disp(['La variance de l''erreur d''interpolation est : ',Var_erreur]) %************************************* Aprs excution du programme, on obtient lordre 1 (droite affine : fig. 1 ci-dessous) les rsultats suivants : >> regres Polynme d'interpolation P= 0.1309 0.5008 La variance de l'erreur d'interpolation est : 0.011277 On remarque ici que le polynme dinterpolation dordre 1 nest pas une bonne approximation pour ces Interpolation par un polynme dordre 5 4.3.2. Interpolation non linaire Une interpolation consiste relier les points exprimentaux par une courbe sous forme de segments de droites ou de courbes polynomiales. Ceci peut tre ralis par la fonction interp1. La commande interp1(x,y,xi,type) retourne un vecteur de mmes dimensions que xi et dont les valeurs correspondent aux images des lments de xi dtermines par interpolation sur x et y. Si f est linterpolation de y, la chane type spcifie alors le type dinterpolation qui doit tre parmi les suivants : linear : interpolation linaire, spline interpolation par splines cubiques, cubic interpolation cubique. : :

Interpolation linaire

Si on ne spcifie pas le type, linterpolation linaire est choisie par dfaut.

15

Exemple 1 : >>x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x,y,xi,cubic); plot(x,y,'o',xi,yi)

Interpolation par splines cubiques La fonction interp2 ralise lespace trois dimensions (3D). linterpolation dans

4.4. Intgration numrique


Interpolation cubique Exemple 2 : Dans le cas suivant, on tudiera ces diffrents types dinterpolation sur un mme exemple de valeurs discrtes de la fonction cosinus. On appellera lalgorithme : interpol.m. %************************************* % Utilisation de la fonction interp1 * clear all; clc; x=0:10; y=cos(x); % Points interpoler z=0:0.25:10; % Le pas du vecteur z est< celui de x % Interpolation linaire figure(1); f=interp1(x,y,z); % Trac des valeurs relles et de la courbe d'interpolation plot(x,y,'*r',z,f); grid on; xlabel('Interpolation'); % Interpolation par splines cubiques figure(2); f=interp1(x,y,z,'spline'); plot(x,y,'*r',z,f); grid on; xlabel('Interpolation par splines cubiques'); %************************************* En excutant ce programme, on obtient les courbes suivantes : Dans ce cas, on a : Dans Matlab (Toolbox), il existe 2 fonctions appeles 'quad' et 'quad8' pour l'intgration numrique. La fonction 'quad' utilise la mthode de Simpson et la fonction 'quad8' utilise les formules de Newton-Cotes l'ordre 8. Ces deux fonctions sont utilises de la faon suivante : quad('fonction_f',a,b) quad('fonction_f',a,b,tol) quad('fonction_f',a,b,tol,trace)

Dans la premire forme, la tolrance 'tol' qui correspond l'erreur relative E, est considre gale 0,001 par dfaut. Ainsi, le calcul quadratique de l'intgrale est ritr jusqu' ce que la tolrance soit satisfaite. Si la 3me forme est utilise avec une valeur non nulle de 'trace', un graphique d'volution des itrations sera affich sur l'cran. Quand la fonction 'quad8', elle est utilise de la mme manire que la fonction 'quad' dans les 3 formes d'expressions prcdentes. Exemple : Soit calculer l'intgrale suivante :

avec la transformation suivante :

On obtient donc :

Interpolation linaire

16

Or, on connat la fonction (x) (fonction Gamma) eulrienne du deuxime espce qui est dfinie par :

o f(x) est un rel. Pour un entier n strictement positif, (n) a la proprit suivante :

On pourra donc s'en servir pour calculer la factorielle d'un entier naturel n : Fonction (x) Dans Matlab, cette fonction est note 'gamma'. Exemple : La factorielle de 10 gamma(10+1)=gamma(11) : >> fact=gamma(11) fact = 3628800 Cette proprit est l'origine du nom de la 'fonction factorielle', attribue souvent la fonction 'Gamma'. La fonction 'gamma' est donc prdfinie dans Matlab. Cette fonction permet, de part sa dfinition pour tous les arguments rels positifs, d'introduire 'la factorielle' des arguments non entiers. Exemple : function f=fct(x); % fonction intgrer f=(x-1).*exp(-x.*(x-2)); Trac de la fonction intgrer : >>x=0:0.01:5; >>ft=fct(x); >>plot(x,ft); >>grid; title('fonction intgrer'); >>xlabel('x');ylabel('f(x)'); est donne par D'aprs le changement de variable effectu, cette intgrale s'crit : Revenons maintenant l'intgration de la fonction f(x):

Calculons cette intgrale par les fonctions Matlab 'quad8' et 'gamma'. La fonction 'quad8' ncessite l'criture de la fonction intgrer dans un fichier contenant l'extension '.m' (programme Matlab).

>> format long >>gamma(0.5) ans = 1.77245385090552 >>racine_de_pi=sqrt(pi) racine_de_pi = 1.77245385090552 >>gamma(0) Warning: Divide by zero. ans = Inf >>gamma(-2) Warning: Divide by zero. ans = -Inf Trac de la fonction Gamma Tracer la fonction Gamma pour x [-3, 3]. >>x=-3:0.1:3; >>gx=gamma(x); >>plot(x,gx);grid;title('Allure de la fonction Gamma'); >>xlabel('x');ylabel('Gamma(x)'); >>hold on;plot(x,zeros(size(x)))

17

Dans le programme donn ci-dessous (quadgamm.m), on calcule l'intgrale prcdente par les fonctions 'quad8' et 'gamma', pour lesquelles on compare les performances en terme de temps de calcul et du nombre d'oprations en virgule flottante. %*************************************** % Calcul de l'intgrale de f(x) par la * % la fonction 'quad8' sur un K6-233 * %*************************************** clear all; clc; flops(0); % Mise zro du compteur d'oprations tic; % Dclenchement du compteur temps de calcul Iquad=quad8('fct',0,5) Nbre_op1=flops, %Arrt du compteur doprations tps_q=toc, %Arrt du compteur de temps de calcul %*************************************** % Calcul de l'intgrale de f(x) par la * % la fonction 'gamma' * %*************************************** flops(0); tic; Igamma=gamma(1)/2 Nbre_op2=flops tps_g=toc En excutant le programme quadgamm.m, on obtient les rsultats suivants : >> format long >> quadgamm Iquad = 0.49999987773178 Nbre_op1 = 686 tps_q = 0.06000000000000 Igamma = 0.50000000000000 Nbre_op2 = 40 tps_g = 0.05000000000000 D'aprs ces rsultats, on remarque bien que le nombre d'oprations en virgule flottante et le temps d'excution dans le cas de l'utilisation de la fonction 'gamma' sont nettement infrieurs ceux que l'on obtient en utilisant la fonction 'quad8'. La fonction 'gamma' prend des valeurs trs grandes au voisinage de zro et des entiers ngatifs. Afin d'viter un dpassement de capacit, MATLAB dispose de la fonction 'gammaln' qui retourne le logarithme nprien.

Le solveur choisi, par exemple ode45, ode23, ode113, ode15s, ode23s, ode23t, ou ode23tb, rsout le problme de Cauchy ci-dessus en utilisant une mthode et une prcision choisies par l'utilisateur. La syntaxe de base est [T,Y] = solver(odefun,tspan,y0) % odefun: fonction au second membre du systme % diffrentiel ci-dessus f(t,y) % tspan : [t0,t1,...,tf] temps o on veut calculer la % solution y % y0 : Condition initiale y(t0) (vecteur colonne n composantes) % T : En sortie les temps o est calcule la solution % Y : Les valeurs de la solution aux temps T

4.5 Equations diffrentielles


On renvoie [3] pour une prsentation des quations diffrentielles et des mthodes numriques pour les rsoudre. Matlab possde plusieurs solveurs approchs pour les quations diffrentielles du type

18