Vous êtes sur la page 1sur 48

D PARTEMENT STPI T ROISIME A NNE P RORIENTATION ICBE

Analyse Numrique Initiation M ATLAB

F. Deluzet, A. Huard, A. Lin, J. Morchain, P. Poncet, G.Quinio

2006/2007

Table des mati` eres


1 Initiation ` a Matlab 1.1 Pour commencer . . . . . . . . . . . . . . 1.2 Utiliser les aides en ligne . . . . . . . . . . 1.2.1 La recherche par mot clef . . . . . 1.2.2 La recherche par navigation . . . . 1.3 Variables et Matrices . . . . . . . . . . . . 1.3.1 Matrices . . . . . . . . . . . . . . 1.3.2 Op erations usuelles . . . . . . . . 1.3.3 Op erations sur les tableaux . . . . 1.3.4 Manipulations sur les matrices . . 1.4 Boucles et tests . . . . . . . . . . . . . . . 1.4.1 La boucle for . . . . . . . . . . . . 1.4.2 La boucle while . . . . . . . . . . . 1.4.3 Le choix conditionnel if . . . . . . . 1.4.4 Utiliser un chier de commandes . 1.5 Fonctions de base . . . . . . . . . . . . . . 1.5.1 Fonctions scalaires . . . . . . . . . 1.5.2 Fonctions vectorielles . . . . . . . . 1.5.3 Fonctions matricielles . . . . . . . . 1.6 Graphiques . . . . . . . . . . . . . . . . . 1.6.1 Visualisation des courbes en 2D . . 1.6.2 Visualisation des courbes en 3D (*) 1.6.3 Visualisation des surfaces (*) . . . 1.6.4 La notion dobjets graphiques (*) . 1.7 M-chiers . . . . . . . . . . . . . . . . . . 1.7.1 Scripts et fonctions . . . . . . . . . 1.7.2 Fonctions . . . . . . . . . . . . . . 1.7.3 Fichiers de sauvegarde . . . . . . . 1.7.4 Lecture de donn ees ext erieures . . . 2 Annexe : lexique non exhaustif 3 Bibliographie 3 3 4 4 5 6 6 9 11 11 12 12 13 14 15 16 16 18 18 18 18 21 22 24 27 27 29 35 33 35 43

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

` TABLE DES MATIERES

Chapitre 1 Initiation ` a Matlab


Matlab est un logiciel de calcul et de visualisation, dont les entit es de base sont des matrices : Matlab est une abr eviation de Matrix Laboratory. Matlab est un langage interpr et e : il propose des facilit es de programmation et de visualisation, ainsi quun grand nombre de fonctions r ealisant diverses m ethodes num eriques. La meilleure fa con dapprendre ` a utiliser ce logiciel est de lutiliser vous m eme, en faisant des essais, en commettant des erreurs et en essayant de comprendre les messages derreur qui vous seront renvoy es. Ces messages sont en anglais ! Ce document est destin e` a vous aider pour quelques premiers pas avec Matlab. Les sections et sous-sections signal ees par (*) donnent des compl ements qui pourront vous etre utiles ` a lavenir, mais peuvent etre r eserv ees pour une lecture ult erieure.

1.1

Pour commencer

Nos salles de TP utilisent un environnemment Linux. Pour acc eder au logiciel Matlab, vous avez plusieurs possibilit es : - Vous pouvez utiliser les ic ones du menu d eroulant de KDE, et suivre les arborescenses ` a partir du menu CRI. Vous aurez acc` es ` a plusieurs versions de Matlab. Les sessions compl` etes mettent en uvre une machine virtuelle java. Elles peuvent se r ev eler un peu trop lourdes lorsquil y a de nombreux utilisateurs. Elles ouvrent une fen etre du type de celle repr esent ee ` a la gure 1.1. - Vous pouvez acc eder aux m emes versions ` a partir dun terminal. Cest cette fa con de proc eder que nous vous recommandons. Elle vous permet en eet de mieux organiser votre travail. Vous devez : ouvrir un terminal (ic ne sur la barre de t ches de votre ecran), cr eer un r epertoire pour le TP en cours. Aujourdhui, vous aller cr eer le r epertoire InitMatlab en entrant la commande : mkdir InitMatlab vous rendre dans ce r epertoire : cd InitMatlab lancer par exemple une session compl` ete : 3

` MATLAB CHAPITRE 1. INITIATION A matlab -jvm

Fig. 1.1 Exemple de session matlab avec le support java (matlab -jvm). Vous reconna trez votre fen etre de travail par le prompt : >> Vous pourrez quitter Matlab en tapant dans cette fen etre : >> quit Dans la suite de cette s eance, vous etes invit es ` a tester les instructions pr esent ees en les tapant apr` es le prompt. Les instructions et variables Matlab sont donn ees dans une typographie de machine ` a ecrire. Les op erations math ematiques et valeurs repr esent ees par ces variables sont ecrites en italiques. Un certain nombre de chiers vous sont fournis. Vous pourrez les r ecup erer en utilisant un navigateur et en vous rendant ` a ladresse : http ://www-gmm.insa-toulouse.fr/huard/InitMatlab/

1.2
1.2.1

Utiliser les aides en ligne


La recherche par mot clef

La commande lookfor est une commande de recherche par mot clef. Elle permet de retrouver toutes les fonctions Matlab dont les commentaires introductifs contient une chaine de caract` eres donn es.

1.2. UTILISER LES AIDES EN LIGNE

Si, par exemple, je cherche une fonction permettant de tracer un histogramme, je peux entrer linstruction : lookfor histogram En r eponse, jobtiens la liste suivante : HIST Histogram. HISTC Histogram count. ROSE Angle histogram plot. On utilise ensuite la commande help pour plus de pr ecisions. Cette commande ache les commentaires de la fonction indiqu ee. Ces commentaires contiennent lobjet de la fonction ainsi que les di erents formats dappel. Ils contiennent egalement une rubrique See Also qui donne les noms de fonctions dont lobjet est en rapport avec la fonction consid er ee. Ces commentaires sont ach es sur la fen etre de travail.

Fig. 1.2 Page daccueil de la fen etre ouverte par helpwin.

1.2.2

La recherche par navigation

La fonction helpwin ouvre une fen etre qui donne acc` es ` a ces commentaires sur une fen etre s epar ee. Lacc` es est arborescent, partant dun classement par domaine dapplication jusqu` a laide de chaque fonction. Le lien est fait avec les aides des renvois sugg er es par la rubrique See Also.

` MATLAB CHAPITRE 1. INITIATION A

La gure 1.2 nous montre sa page daccueil. On peut cliquer sur une ligne pour continuer sa recherche... La commande helpdesk donne acc` es ` a une documentation hypertexte compl` ete support ee par le navigateur internet. Il sut alors de se laisser guider dans sa recherche. Cette aide nest pas accessible lorsque lon utilise Matlab sans le support java.

1.3
1.3.1

Variables et Matrices
Matrices

Dans Matlab, toutes les variables repr esentent des matrices. Par exemple, on multiplie deux matrices a et b par a*b, et le produit de deux scalaires s ecrit de la m eme fa con : ils sont interpr et es comme des matrices 1X1. On peut d enir une matrice dans Matlab de plusieurs fa cons : par la liste de ses el ements, en la g en erant par une suite dinstructions et de fonctions, en la lisant dans un chier ext erieur. Si lon repr esente la touche enter de votre clavier par le symbole , les instructions suivantes : >> A = [3 2 -2 ;-1 0 1 ;1 1 0] et >> A = [ 3 2 -2 -1 0 1 1 1 0 ] cr eent la m eme matrice 3X3. Dans la suite, le symbole ne sera plus indiqu e. Le symbole = d esigne lop erateur daectation. Il permet de xer ou de changer la valeur dune variable. En ayant execut e lune ou lautre de ces commandes, vous aurez remarqu e que Matlab ache la valeur de la variable A que vous venez de d enir. Vous pouvez eviter lachage en faisant suivre la commande dun point-virgule. Ne la retapez pas pour le v erier ; en utilisant la ` eche ascendante de votre clavier , vous pouvez rappeler la commande >> A = [3 2 -2;-1 0 1;1 1 0] et ajouter le point-virgule >> A = [3 2 -2;-1 0 1;1 1 0] ; Matlab distingue les majuscules et les minuscules ; si vous tapez :

1.3. VARIABLES ET MATRICES >> a vous recevrez le message : ??? Undefined function or variable a.

Lensemble des variables actives peut etre consult e gr ace aux commandes whos et who : >> t = 1; >> whos Name Size Bytes A 3x3 72 Grand total is 9 elements using 72 bytes

Class double array

La commande clear permet de d etruire une variable. >> who Your variables are: A t >> clear t >> who Your variables are: A La commande clear all r einitialise lenvironnement (en d etruisant toutes les variables actives). L enum eration des el ements dune matrice ou dun vecteur peut etre implicite. Essayez par exemple : >> m = [-3:3] >> x = [1:-0.25:-1] Les matrices m et x sont des matrices ` a une ligne (vecteurs-lignes). Matlab vous fournit les dimensions dune variable par la fonction size : >> size(m) ans = 1

Si lon veut un vecteur, on peut taper >> m = m ou >> x = x(:)

` MATLAB CHAPITRE 1. INITIATION A

Lapostrophe d enit la transposition : A repr esente la matrice AT . Les deux points imposent le format colonne : >> format compact % pour eviter les sauts de ligne ` a laffichage. >> A ans = 3 -1 1 2 0 1 -2 1 0 >> A(:) ans = 3 -1 1 2 0 1 -2 1 0 On peut aussi cr eer directement un vecteur en s eparant les composantes par un point-virgule : >> b = [3 ; 0 ; 2 ] ; size(b) Un coecient quelconque dune matrice est r ef erenc e par ses indices de ligne et de colonne, dans cet ordre. Par exemple, linstruction : >> A(1,2) renvoie la r eponse : ans = 2 ans est le nom dune variable qui re coit le dernier r esultat dune instruction ou dune suite dinstructions lorsquil na et e aect e` a aucune variable. On peut faire sacher la valeur dune variable sans achage de son nom ni de ans >> disp(A(1,2)) Certaines fonctions de Matlab cr eent des matrices particuli` eres. Les quelques matrices suivantes sont parmi les plus couramment utilis ees : eye(n) renvoie la matrice identit e, habituellement not ee In en math ematiques ; essayez eye(4), ones(n,m) renvoie une matrice ` a n lignes et m colonnes dont tous les coefcients sont des 1, zeros(n,m) matrice ` a n lignes et m colonnes dont tous les coecients sont des 0 ; elle sert beaucoup pour les initialisations. linspace(a,b,n) cr ee une matrice ligne de n points r eguli` erement espac es sur lintervalle [a, b] (bornes comprises). rand cr ee une matrice al eatoire. Essayez >> B = rand(3,4). Dans quel intervalle sont choisis les coecients de cette matrice ? La commande help permet de recevoir des informations (en anglais !) sur une fonction ; essayez : >> help linspace, >> help rand

1.3. VARIABLES ET MATRICES

1.3.2

Op erations usuelles

Matlab permet deectuer les op erations usuelles en etendant leur d enition aux matrices selon les r` egles de lalg` ebre lin eaire. Laddition et la soustraction ne m eritent aucun commentaire particulier, sinon que les tailles des matrices doivent etre egales, essayez : >> >> >> >> 3+5 ans -2 A + ones(3) m + x La derni` ere commande aura entrain e cette r eponse cinglante : ??? Error using ==> + Matrix dimensions must agree. Matlab autorise que les dimensions ne soient pas egales lorsquune des variables est un scalaire. A + 1 fournit la m eme valeur que A + ones(3). La multiplication de deux variables sera possible si les matrices quelles repr esentent respectent les r` egles de concordance des dimensions : >> >> >> >> >> 3*4 c = A*b C = A*B b*c b*c

Comme les variables A et B repr esentent respectivement des matrices 3 3 et 3 4, la variable C repr esente une matrice 3 4, mais la commande B*A susciterait un message derreur de dimensions. On peut aussi remarquer que le produit scalaire des vecteurs b et c sobtient directement par b*c , alors que b*c d enira une matrice 3 3 (de rang 1 !). Matlab autorise que les dimensions ne concordent pas lorsquune des variables repr esente un scalaire. Matlab distingue la division ` a gauche et la division ` a droite : >> 3/4 ans = 0.7500 >> 3\4 ans = 1.3333

10

` MATLAB CHAPITRE 1. INITIATION A

Ainsi cette division doit elle sinterpreter comme le produit par linverse de la variable situ ee du c ot e vers lequel penche la barre : 3/4 repr esente 3 1 alors que 3 \ 4 4 1 ee se g en eralise aux variables repr esentant des matrices : repr esente 3 4. Cette id >> x = A\b ; >> A*x - b Comment interpr eter le dernier r esultat renvoy e par la machine ? Vous aurez compris que la variable x contient la solution du syst` eme lin eaire A x = b. Au passage, vous remarquerez que cette nouvelle aectation de la variable x ecrase la pr ec edente. Quelle reexion vous sugg` ere le r esultat de : >> b/A On peut se demander ce que repr esente la matrice M d enie par >> M = A\eye(3) Matlab autorise le produit et les divisions par un scalaire. L el evation ` a une puissance donn ee est d enie par le symbole >> >> >> >> 2^3 A^2 A^0 A^(-1) Vous avez retrouv e la matrice M . Les r` egles de priorit e des op erations sont conformes ` a celles qui sont utilis ees dans la plupart des langages de programmation. Elles sont donn ees par le tableau suivant : Niveau de priorit e Op eration 1 puissance 2 multiplication et division 3 addition et soustraction A niveau de priorit e egale, les op erations sont eectu ees de la gauche vers la droite. Les parenth` eses vous permettent dorganiser les priorit es dans vos calculs. Leur utilisation est recommand ee pour eviter les ambiguit es et risques derreurs. >> >> >> >> >> >> 2 + 3^2 2 + 3*3^2 2 + (3*3)^2 (2 + 3*3)^2 A^2\A A*A\A : essayez

1.3. VARIABLES ET MATRICES

11

1.3.3

Op erations sur les tableaux

Une matrice peut etre vue comme un tableau de valeurs, ind ependament de lalg` ebre lin eaire. Matlab permet de travailler avec les valeurs contenues dans un tableau. Pour laddition et la soustraction, il ny a pas de di erence entre matrice et tableau de valeurs. Pour la multiplication, les divisions et l el evation ` a une puissance, on fait pr ec eder le symbole dop eration dun point. Les tableaux doivent avoir la m eme taille : >> >> >> >> >> >> A.^2 M.*A b./c C.*B A.*B A.^[2 1 2 ; 2 0 1 ; 1 1 1]

On remarquera que A. 2 el` eve ` a la puissance 2 chaque el ement de A. Cest un raccourci pour A. (2*ones(3)).

1.3.4

Manipulations sur les matrices

Matlab permet de manipuler les matrices par blocs : Essayez par exemple : C = [ones(3), rand(3,2) ; rand(2,3), eye(2)] On peut ensuite en extraire la sous-matrice form ee des trois derni` eres colonnes : C1 = C(:,3:5); et on retrouve ones(3) en faisant acher C(1 :3,1 :3). Matlab propose quelques fonctions qui facilitent certaines manipulations. La fonction diag extrait la diagonale dune matrice, sous forme dun vecteur, ou cr ee une matrice diagonale, ` a partir dun vecteur ; essayez par exemple les instructions suivantes : >> >> >> >> R = rand(5); diag(R) diag(ans) diag(diag(R))

Largument g en eral de diag est double ; entrez : >> help diag Vous constatez que lon peut ainsi extraire dune matrice ses el ements dune parall` ele ` a la diagonale. Essayez :

12 >> >> >> >>

` MATLAB CHAPITRE 1. INITIATION A diag(R,1) diag(R,-2) d = ones(4,1); M = 2*eye(5)-(diag(d,1)+diag(d,-1))

tril renvoie la partie triangulaire inf erieure dune matrice, el ements diagonaux compris. Elle admet aussi plusieurs arguments >> tril(R) >> tril(R,1) triu renvoie la partie triangulaire sup erieure dune matrice. reshape reformate une matrice, cest-` a-dire change le nombre de lignes et de colonnes, en prenant les el ements colonne par colonne. repmat cr ee une grande matrice en recopiant une matrice donn ee selon le format fournit.

1.4

Boucles et tests

Les principales instructions de contr ole propos ees par Matlab sont for, while et if ; elles fonctionnent ` a peu pr` es comme leurs equivalents dans les autres langages de programmation.

1.4.1

La boucle for

La boucle for doit respecter la syntaxe suivante : for compteur = expression instructions end Generalement, expression est un vecteur de la forme d ebut :incr ement :fin et compteur prend successivement toutes les valeurs de expression pour executer instructions. Les instructions suivantes permettent de calculer une valeur approch ee de ex , pour x = 10, en utilisant la formule :
n

e >> >> >> >> >> >>

x k =0

xk k!

(1.1)

x = 10; n = 50; s = 1; terme = 1; for k = 1:n, terme = x*terme/k ; s = s + terme ; end; s

1.4. BOUCLES ET TESTS

13

On pourra v erier plus tard que la valeur obtenue, s 2.2026 104 est assez proche de e10 . Plusieurs boucles peuvent etre embo t ees. Comme Matlab est un language interpr et e, il faut essayer d eviter les boucles quand cest possible. Pour cela on peut utiliser des boucles implicites. Pour construire la matrice H = (hi,j ) M3 (R) avec 1 hi,j = , on peut utiliser les instructions suivantes : i+j1 >> n = 3; >> H = zeros(3); >> for i = 1:n for j = 1:n H(i,j) = 1/(i+j-1); end; end; >> H Notez que lon a initialis e la variable H. Cest recommand e lorsque cest possible. Notez egalement que lon a indent e les boucles : cest recommand e pour une meilleure lisibilit e! On peut aussi construire H de la fa con suivante : >> >> >> >> >> J J I E H = = = = = 1:n; repmat(J,n,1); J; ones(n); E./(I+J-E);

Remarque 1 Dans le premier exemple dutilisation de for, la boucle tenait dans une ligne. Dans ce cas, une virgule doit s eparer linitialisation de la boucle de linstruction suivante. Dans la second exemple, puisque lon va ` a la ligne, le prompt de Matlab ne r eapparait que lorsque la boucle est correctement termin ee.

1.4.2

La boucle while

Linstruction while respecte la syntaxe suivante : while expression instructions end expression d esigne le r esultat dune op eration logique. Elle est construite en utilisant des op erateurs relationnels et logiques.

14

` MATLAB CHAPITRE 1. INITIATION A

Op erateurs relationnels Op erateur egal di erent sup erieur inf erieur ou egal Symbole == = > <=

Op erateurs logiques Op erateur et logique non logique ou logique Symbole & |

Les instructions seront ex ecut ees tant que expression sera vraie. Toute valeur di erente de 0 est assimil ee au 1 logique, cest-` a-dire au vrai. Essayez >> >> >> >> >> x = [1 -1 1] ; y = [1 1 -1]; x>0, ~(x>0),~x>0 x>=y x>0 & y>0 x>0 | y>0

Les instructions suivantes permettent de trouver approximativement le plus petit nombre positif repr esent e dans larithm etique utilis ee par Matlab : >> x = 1 ; while x>0 , xm = x; x = x/2; end; xm

1.4.3

Le choix conditionnel if

Linstruction if respecte la syntaxe suivante : if expression instructions end Les instructions ne seront ex ecut ees que si expression est vraie. Il est possible de proposer une alternative, en indiquant les instructions ` a executer lorsque expression est fausse : if expression instructions 1 else instructions 2 end Il est egalement possible dembo ter les choix propos es : if expression1 instructions 1 elseif expression2 instructions 2

1.4. BOUCLES ET TESTS else instructions 3 end

15

1.4.4

Utiliser un chier de commandes

Les exemples dutilisation de la boucle for nous ont amen es ` a ecrire plusieurs lignes de commandes. Lorsque lon veut recommencer lex ecution dun de ces exemples en modiant la valeur dun param` etre, il faudra rappeler toutes les lignes qui suivent sa d enition : cest le cas si lon veut evaluer (1.1) pour une autre valeurs de x ou de n. Cette op eration devient tr` es d esagr eable lorsque lon a emboit e des boucles ! De m eme que vous utilisez un brouillon avant de rendre un devoir, de fa con ` a pouvoir faire des ratures, changer les expressions o` u vous avez d etect e une erreur, vous pouvez editer un chier de commandes Matlab dont vous vous servirez comme dun brouillon. Un tel chier sappelle un M-chier. Il devra etre enregistr e sous le nom de votre choix avec le suxe .m. Pour ecrire ce chier, vous devez utiliser un editeur : Matlab vous en propose un auquel vous pouvez acc eder en vous servant des ic ones de la fen etre. Nous allons illustrer cette possibilit e en traitant un exemple qui utilise la boucle while et le branchement if : il sagit de tester la conjecture de Syracuse. On part dun nombre entier di erent de 1. Sil est impair, on le multiplie par 3 et on ajoute 1 ; sinon, on le divise par 2. On recommence avec ce nouveau nombre tant quil nest pas egal ` a 1. Dans ce cas, en eet, on reproduira ind eniment le cycle { , 1, 4, 2, 1, }. Quelque soit le nombre entier dont on part, on nit toujours par obtenir la valeur 1. Cest en tous cas ce que montre lexp erience, car personne na jamais trouv e de contre exemple. Mais, on a jamais pu d emontrer quil devait en etre ainsi ! On vous propose de tester cette conjecture. Lobjectif de lexercice est d ecrire un programme Matlab qui propose ` a lutlisateur de donner un nombre entier di erent de 1, et ` a partir de ce nombre, de compter le nombre dit erations de la suite de Syracuse avant quelle natteigne la valeur 1. On prendra la pr ecaution de limiter le nombre dit erations ` a 1000 pour eviter que le programme ne tourne ind eniment. Cela pourrait se produire en cas derreur de saisie. Pour cela, vous allez commencer par editer le chier dans lequel vous ecrirez ce programme. Vous pouvez utiliser le chier qui vous est fournit sous le nom de Syracuse.m et qui contient le squelette de programme qui est donn e au tableau 1.1. Il vous faut remplacer les points de suspension par des instructions appropri ees. Voici quelques indications : - La fonction input permet de proposer ` a lutilisateur de rentrer un entier n initial.

16

` MATLAB CHAPITRE 1. INITIATION A

% Syracuse :

Tester la conjecture de Syracuse

n = input(Entrez un entier superieur a 1 : ) ; compteur = 1 ; % Compteur des it erations while ... & ... if rem(n,2) ... n = ... ; else n = ... ; end compteur = compteur +1; end compteur

Tab. 1.1 Programme Syracuse.m - Le symbole % permet de placer des commentaires. - Le nombre dit erations sera donn e par la variable compteur. - la boucle while sera cotr ol ee par deux expressions logiques, qui autoriseront son ex ecution tant que n restera di erent de 1 et compteur inf erieur ou egal ` a 1000. - Le test sur la parit e de n utilise la fonction rem (abr eviation de remainder) qui donne le reste de la division enti` ere par 2 : ce reste vaut 1 si n est impair et 0 sinon. Remarque 2 On ne sest pas trop brid e en limitant le nombre des it erations ` a 1000. Pour des valeurs initiales inf erieures ou egales ` a 10 000, la suite la plus longue est obtenue pour une valeur initiale de 6171. Sa longueur est 262.

1.5
1.5.1

Fonctions de base
Fonctions scalaires
sin cos tan exp log rem abs sqrt sign round tanh acosh

Ce sont les fonctions usuelles ; par exemple :

Ces fonctions font partie des fonctions el ementaires propos ees par Matlab. Pour en avoir la liste, vous pouvez taper : >> help elfun

1.5. FONCTIONS DE BASE Comme la liste est longue, vous pouvez contr oler son d element : >> more on, help elfun, more off

17

Le d element se fait ligne ` a ligne (en tapant une touche quelconque) ou par pages de 20 lignes (en tapant la barre despacements). Vous pouvez maintenant comparer la variable s calcul ee en utilisant la formule (1.1) avec e10 ; >> s - exp(10) Quelle commande devrez-vous entrer pour obtenir la valeur absolue de lerreur relative ? Ces fonctions traitent les variables matricielles comme des tableaux de nombres ; si la variable A repr esente une matrice A, la variable S = sin(A) repr esentera une matrice S dont les coecients sont si,j = sin(ai,j ). Pour lexponentielle et la racine carr ee, qui poss` edent une version matricielle, Matlab propose les fonctions expm et sqrtm. Le cas des polyn omes est un peu particulier : un polyn ome peut etre d eni par ses coecients : on utilise dans ce cas une matrice ligne : par exemple, le polyn ome 3 2 Q(x) = x + 2x 3 sera repr esent e par : >> Q = [1 2 0 -3]; Sa valeur au point x = 1.2 sera fournie par : >> polyval(Q,1.2) Les racines du polyn ome Q seront fournies par la fonction roots. A linverse, on peut aussi d eterminer les coecients dun polyn ome ` a partir de ses racines en utilisant la fonction poly : >> r=[1 2 3]; K = poly(r) >> polyval(K,r) Ces instructions assignent ` a K la valeur [1 -6 11 -6] qui d enit le polyn ome 3 2 K (x) = x 6x + 11x 6. Le polyn ome ainsi calcul e a toujours le coecient de son terme de plus fort degr e egal ` a 1. Comme les fonctions usuelles polyval traite les matrices comme des tableaux, Il faudra utiliser la fonction polyvalm pour evaluer un polyn ome de matrice. Comparez polyval(K,A) et polyvalm(K,A). Certaines fonctions sp eciales sont egalement propos ees par Matlab : par exemple, les fonctions de Bessel de premi` ere esp` ece not ees J (x) sont donn ees par la fonction besselj dont le format dappel le plus courant est, pour le param` etre entier nu et la variable x : y = besselj(nu,x) ; Vous pouvez retrouver linformation sur le format dutilisation par : >> help besselj La liste de ces fonctions sp eciales vous sera renvoy ee par la commande : >> more on, help specfun, more off

18

` MATLAB CHAPITRE 1. INITIATION A

1.5.2

Fonctions vectorielles

Ces fonctions sont plutot destin ees ` a agir sur des vecteurs, lignes ou colonnes. Elles sont tr` es utiles ` a lanalyse des donn ees. Citons par exemple : max min sum prod mean std sort find

dont vous trouverez lobjet par la commande help lorsquil nest pas evident. Elles agissent aussi sur les matrices, mais colonne par colonne. Essayez par exemple : >> >> >> >> b = rand(3,3) ; c = max(b) ; d = max(max(b)); b,c,d sort(c) sort(b)

Vous pouvez modier le chier Syracuse.m pour retrouver le r esultat annonc e` a la remarque 2 en utilisant une boucle for et la fonction max.

1.5.3

Fonctions matricielles

Citons en quelques-unes : eig : valeurs et vecteurs propres dune matrice, inv : inverse, expm : exponentielle de matrice, size : dimensions de la matrice, norm : norme (2 par d efaut, mais aussi 1 ou ), rank : rang. Une liste un peu plus compl` ete, mais non exhaustive, de ces fonctions vous est fournie en annexe. Une liste compl` ete est fournie en r eponse ` a la commande >> more on, help matfun, more off

1.6
1.6.1

Graphiques
Visualisation des courbes en 2D

Matlab permet de tracer facilement le graphe de fonctions scalaires. Cela se fait ` a laide de la fonction plot . Elle prend en argument des paires de vecteurs de m eme dimension. Voici par exemple le moyen dobtenir le graphe de la fonction cos 3x sur lintervalle [0, 2 ] : >> x = [0:0.01:2*pi] ; y =cos(3*x) ; plot(x,y); Le format de base de la fonction plot est en fait le suivant :

1.6. GRAPHIQUES plot(x,y,s) ;

19

o` u x contient les absisses, y les ordonn ees, et s est une chaine de 1 ` a 3 caract` eres : s=ctm, pour la couleur (c) et le style (tm), qui peuvent etre choisis dans le tableau suivant :

Couleur y m c r g b k w jaune magenta cyan rouge vert bleu noir blanc : -. -+ o * x

Style trait continu (t) pointill es (t) trait-point (t) tirets (t) plus (m) cercles (m) etoiles (m) croix (m)

Les style de trac e suivis de (t) sont des trac es continus, avec une interpolation entre les points fournis, alors que pour les autres on utilise des marqueurs pour ne repr esenter que les points (xi , yi). On peut combiner ces deux styles. On peut tracer les graphes de plusieurs fonctions simultan ement. Essayez maintenant : >> z = sin(2*x);plot(x,y,x,z); On peut alors l egender notre graphique de la fa con suivante : >> legend(cos(3x),sin(2x)); On peut egalement obtenir ces deux courbes par la succession de commandes : >> plot(x,y); >> hold on; >> plot(x,z); La seule di erence est que cette fois, les deux graphes sont trac es avec la m eme couleur. hold on g` ere le graphique courant de fa con que les commandes graphiques ` a suivre vont sajouter ` a ce graphique. hold off est a valeur par d efaut : dans ce cas une nouvelle commande plot eacera le graphique existant. Les axes sont d enis automatiquement ; on peut choisir les bornes des coordonn ees du graphe ` a laide de la fonction axis . Essayez par exemple : >> axis([-1 5 -1.5 1.5]); Pour la suite de notre travail, il est pr ef erable que vous entriez maintenant la commande :

20 >> hold off;

` MATLAB CHAPITRE 1. INITIATION A

Le format de la fonction plot permet bien s ur de repr esenter facilement des courbes param etriques : >> plot(y,z); On obtient, pour les valeurs d enies plus haut, une courbe connue sous le nom de courbe de Lissajoux. Les instructions suivantes vont r eduire l eg` erement l echelle, donner un titre et un nom aux axes, et faire appara tre une grille sur le fond : >> >> >> >> >> axis([-1.1 1.1 -1.1 1.1]) title(Courbe de Lissajoux); xlabel(x : axe des absisses); ylabel(y : axe des ordonnees); grid

Vous obtiendrez limpression sur papier dun graphe en utilisant la commande print qui enverra limpression sur limprimante ` a laquelle est reli e votre ordinateur. Cest la derni` ere de vos gures qui sera imprim ee.

Exercice On consid` ere la fonction d enie par F (x) = 0.01 exp x + 10 cos x 3 x. (1.2)

On vous demande d ecrire un M-chier ExempleCourbe.m pour tracer la courbe repr esentant cette fonction sur lintervalle [1, 10], en utilisant ses valeurs aux points k xk = 1 + , 0 k 1100. Vous xerez la taille de la fen etre de visualisation de 100 fa con que les absisses soient comprises entre 1 et 11 et les ordonn ees entre 50 et 200. Vous pourrez compl eter cette gure en y ajoutant les axes et un titre. Ces axes peuvent etre trac es ` a la main en utilisant les fonctionnalit es de la fen etre graphique (voir les ic ones). Vous les obtiendrez aussi en terminant votre programme par les instructions donn ees dans lencadr e ci-dessous.
... hold on ; plot([0,9],[0,0],9,0,>) plot([0,0],[-20,150],0,150,^) hold off ;

1.6. GRAPHIQUES Exercice

21

Vous allons cr eer un chier qui repr esente la fonction de Bessel de param` etre = 0 sur lintervalle [0, 50], et v erier graphiquement que ses racines sur cet intervalle sont bien approch ees par les expressions rj (2 j 1) + , 1 j 15. 2 4 (1.3)

Vous appellerez ce chier VisuRacBess.m. Il devra contenir des instructions pour : - d enir les absisses x (utiliser la fonction linspace), - d enir le param` etre et calculer les y = J (x), en utilisant la fonction fzero. Cette fonction r esoud les equations non lin eaires. Lalgorithme utilis e combine plusieurs m ethodes, dont celles de la s ecante et de bissection. On doit fournir une valeur pour initialiser les it erations, et il est bon de disposer dune valeur assez voisine de la solution cherch ee. On se servira donc des expressions (1.3). - repr esenter sur la m eme gure les y et laxe des x, - calculer les rj , (d enir un tableau R en utilisant une variable J = [1 :15] ; ), - repr esenter sur la gure pr ec edente les points (rj , 0) par le symbole . On voudrait pouvoir donner un titre ` a cette gure, et pour cela repr esenter les lettres grecques et : cela peut se faire de la fa con suivante : title(La fonction J_{\nu } pour \nu = 0); On peut souhaiter des caract` eres un peu plus grands pour ce titre : title(La fonction {\nu } pour \nu = 0,Fontsize,12); La taille de fonte est pr ecis ee par la propri et e Fontsize, suivie de la valeur choisie. A Cette instruction utilise les r` egles du langage L TEXqui est un langage de programmation de traitement de texte particuli` erement bien adapt e ` a la gestion des formules math ematiques. Elle appelle quelques commentaires : Le caract` ere permet de mettre en position dindice les caract` eres entre accolades qui le suivent. A Le caract` ere \ permet ` aL TEX de reconna tre ses commandes. Vous en trouverez quelques-unes dans le tableau 1.2.

1.6.2

Visualisation des courbes en 3D (*)

La fonction qui permet de repr esenter une courbe dans lespace R3 est plot3. Sa syntaxe est plot3(x,y,z,s) ; et cette fois x, y et z sont des vecteurs de m eme dimension contenant les trois coordonn ees. Essayez :

22

` MATLAB CHAPITRE 1. INITIATION A

minuscules grecques

majuscules grecques

symboles math ematiques

Commande

Symbole

Commande

Symbole

Commande

Symbole

\alpha \beta \gamma \omega \lambda \pi \rho \nu

\Delta \Theta \Gamma \Omega \Lambda \Phi \Psi \Sigma

\leq \geq \int \infty \sim \partial \in \rightarrow

Tab. 1.2 Principaux symboles math ematiques reconnus par Matlab. >> theta = pi*[-4:0.04:4]; r = linspace(1,6,201); >> x = r.*(1+cos(theta)); y = r.*sin(theta); z = r; >> plot3(x,y,z,k*); grid;

1.6.3

Visualisation des surfaces (*)

Matlab permet de repr esenter des surfaces donn ees en coordonn ees cart esiennes ou sous forme param etrique. La forme param etrique peut s ecrire : x = x(s, t) y = y (s, t) z = z (s, t) o` u les param` etres s et t parcourent un certain domaine. Plusieurs fonctions permettent cette repr esentation, parmi lesquelles mesh repr esente un treillis, et surf une surface pleine. Elles ont le m eme format dappel : surf(X,Y,Z,C) ; X,Y et Z sont des matrices de m emes dimensions contenant les coordonn ees de points de la surface. C permet de d enir les couleurs et peut etre omis. Nous allons repr esenter le c one dequation x2 + y 2 2xz = 0 en utilisant la repr esentation param etrique donnee pour (, ) ] , [] 0, 12[ par : x = (1 + cos ), y = sin , z = . On peut proc eder de la fa con suivante :

1.6. GRAPHIQUES >> >> >> >> >> n = 31 ; theta = pi*[-n:2:n]/n ; r = linspace(0,12,n); X = r*(1+cos(theta)) ; Y = r*sin(theta) ; Z = r*ones(size(theta)); surf(X,Y,Z);

23

Il est important de remarquer que X, Y et Z sont des matrices de m eme taille ! La surface repr esent ee laisse apparaitre les traces dune grille qui la recouvre. Laspect de la surface est contr ol e par la variable shading, dont les valeurs possibles sont faceted (valeur par d efaut), flat (supprime le treillis), et interp (adoucit les transitions). Essayez : >> shading interp; Les couleurs sont d enies par une matrice C de m eme taille que celles des coordonn ees, et par d efaut, cette matrice est C=Z, de sorte que dune certaine fa con, la couleur est proportionnelle ` a laltitude du point de la surface. Tout cela d epend du choix dune palette graphique. Essayez : >> C = rand(size(Z)) ; surf(X,Y,Z,C); La palette de couleurs de la fen etre de visualisation est d enie par la variable colormap. Sa valeur par d efault est jet . Essayez : >> colormap(cool); La liste des palettes disponibles est fournie avec celle de toutes les fonctions ou variables de contr ole dun graphique 3D par la commande : >> more on, help graph3d, more off Examinons ` a pr esent le trac e dune surface donn ee par son equation cart esienne z = f (x, y ). En g en eral, on dispose dune famille de valeurs de x et dune famille de valeur de y stock ees dans 2 vecteurs, respectivement x et y. On va devoir construire deux matrices X et Y telles que les colonnes de X et les lignes de Y soient constantes : ces matrices seront utilisees pour le calcul des valeurs de f . On peut utiliser la fonction meshgrid . Ainsi, pour repr esenter la surface d equation z = exp(x2 y 2) , 2 < x, y < 2, on pourra proc eder comme suit : >> [X,Y] = meshgrid(-2:.2:2, -2:.2:2); >> Z = X .* exp(-X.^2 -Y.^2); >> surf(Z); Si on ne souhaite que le treillis, on remplace la fonction surf par mesh. Si lon souhaite des isolignes, on utilise la fonction contour3 ; par exemple : >> v = linspace(0,max(max(Z)),20); contour3(Z,v);

24

` MATLAB CHAPITRE 1. INITIATION A

1.6.4

La notion dobjets graphiques (*)

Di erents objets et leur identication Lorsque que lon trace une gure, par exemple la courbe repr esentant la fonction y = sin x sur lintervalle [3.5, 3.5], on utilise une fonction graphique de Matlab. On peut le faire simplement de la fa con suivante : >> x = linspace(-3.5,3.5) ; >> y = sin(x); >> plot(x,y); Les commandes pr ec edentes auront cr e e la gure 1.3
1

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

1 4

Fig. 1.3 Une gure obtenue par la commande de base plot. La fonction plot que lon a utilis e a g en er e un assez grand nombre de donn ees. Ces donn ees sont les caract eristiques de notre gure. Le syst` eme de repr esentation graphique de Matlab est un syst` eme orient e objet, et les donn ees qui caract erisent une gure sont relatives aux di erents objets qui la constituent. Certaines de ces donn ees peuvent etre pr ecis ees lors de lappel de la fonction : on peut choisir le type de trac e, sa couleur ... Dautres pourraient l etre en utilisant des fonctions qui le permettent : legend, xlabel... Si lon avait voulu modier la position la taille de la fen etre graphique, il aurait cependant fallu utiliser la fonction figure avant la fonction plot et xer les valeurs de la propri et e Position.

1.6. GRAPHIQUES

25

Pour g erer une fen etre graphique, il convient de pouvoir identier ces objets, avant de xer ou de modier leurs propri et es. Cette identication se fait par les handles, litt eralement les poign ees pour les attraper ! La premi` ere etape consiste ` a r ecup erer ces handles. La fonction findobj le permet. Voici ce que peut fournir son appel : >> h = findobj h = 0 1.0000 151.0015 152.0022 Il ne sagit pas ensuite dutiliser les valeurs ach ees, mais de se rappeler que h est un vecteur de 4 composantes dont chacune est un handle. Quels sont les objets ainsi identi es ? >> get(h,type) ans = root figure axes line La premi` ere composante dont la valeur est 0 est la racine, cest-` a-dire l ecran. La seconde est le fen etre. Son handle est egalement d esign e par la fonction gcf (get current gure). Cette structure est arborescente : ` a partir de la racine, on peut trouver une ou plusieurs fen etres ; dans chaque fen etre, un ou plusieurs syst` emes daxes, et dans chacun dentre eux, un ou plusieurs courbes. Modier les propri etes Chaque type dobjet g` ere certaines propri et es. On va commencer par modier la taille de la fen etre. Pour cela, il faut modier la propri et e Position. Pour voir comment elle est d enie, nous r ecup erons sa valeur. >> get(h(2),Position) ans = 181 457 560 420 Vous naurez pas les m emes valeurs. Ces valeurs repr esentent respectivement la distance la fen etre au bord gauche de l ecran, sa distance au bord inf erieur de l ecran, sa largeur et sa hauteur. Elles sont donn ees en Pixels. Pour modier la taille de cette fen etre, il faut conna tre la taille de l ecran. Cest une propri et e de la racine :

26 >> get(h(1),ScreenSize) ans = 1 1 1280

` MATLAB CHAPITRE 1. INITIATION A

1024

On peut pr ef erer travailler en coordonn ees relatives avant de xer cette taille : >> set(h(2),Units,normalized,Position,[0.1 0.3 0.6 0.4]) Pour conna tre lensemble des propri et es relatives ` a lobjet figure, il sut de taper get(h(2)). Pour obtenir la liste de ces propri et es avec les valeurs autoris ees, lorsquelles sont pr ed enies, on tape set(h(2)). Lobjet h(3) est de type axes. On peut lister le champ de ses propri et es avec leur valeur actuelle : >> get(h(3)) Nous allons supprimer lencadrement, modier les limites de laxe des y , xer les positions et valeurs des ticks de laxe des x : >>set(h(3),Box,off) >>set(h(3),Ylim,[-1.1 1.1]) >>set(h(3),Ytick,[]) >>set(h(3),Xtick,[-pi -pi/2 0 pi/2 pi]) >>set(h(3),XtickLabel,-pi|-pi/2|0|pi/2|pi)
A On remarquera que les symboles L TEX ne sont pas pris en compte pour etiqueter les ticks. Une propri et e du nom de Title gure dans la liste des propri et es de lobjet axes et sa valeur est un nombre r eel. Il sagit l` a encore dun handle, car le titre est lui m eme un objet graphique.

>>htit = get(h(3),Title) >>set(htit) >>set(htit,string,Fonction sinus,FontSize,12) >>set(htit,Color,[1 0 0]) La couleur obtenue est le rouge. La d enition des couleurs peut se faire par un tableau de 3 valeurs comprises entre 0 et 1 qui donnent respectivement les poids relatifs du rouge, du vert et du bleu. (syst` eme rgb). Le blanc est [1 1 1] et le noir [0 0 0]. On peut aussi modier certaines propri et es de lobjet de type line On en obtient la liste par get(h(4)). Pour conna tre les possibilit es oertes au niveau des types de trac e, >>set(h(4),Linestyle) >>set(h(4),Marker)

1.7. M-FICHIERS
Fonction sinus

27

pi

pi/2

pi/2

pi

Fig. 1.4 Figure modi ee gr ace ` a la manipulation des hanlde. On peut alors proposer >>set(h(4),Linestyle,none,Marker,+) >>set(h(4),Markersize,4) >>set(h(4),Ydata,cos(x)) La gure apr` es modication ressemblera, sauf pour les couleurs, ` a la gure 1.4. Il faudrait quand m eme modier son titre ...

1.7
1.7.1

M-chiers
Scripts et fonctions

Bien que lon puisse faire beaucoup de choses en travaillant directement dans la fen etre de commandes de Matlab, nous avons d eja constat e que quil etait souvent plus pratique dutiliser des M-chiers. Ils permettent - de corriger plus facilement ses erreurs, - de garder un travail en cours pour le reprendre plus tard, - dex ecuter plusiers fois un programme en modiant certains param` etres, - d echanger son travail avec des camarades. Jusqua pr esent, ces chiers etaient des chiers dinstructions, ou chiers scripts. Un chier script est un chier contenant une suite dinstructions Matlab directement ex ecutables. Ces instructions sont ex ecut ees en utilisant les variables de lespace de travail, ou en cr eant des variables dans cet espace. Matlab utilise egalement des M-chiers. En fait, un grand nombres des fonctions que nous avons rencontr ees sont ecrites dans des M-chiers. Il sagit de chiers fonction. Vous pouvez egalement cr eer vos propres fonctions. Un chier fonction a sa premi` ere ligne dinstruction ex ecutable qui commence par le mot clef function. Il peut recevoir des variables en entr ee, mais utilise ces

28

` MATLAB CHAPITRE 1. INITIATION A

variables en dehors de lespace de travail. Aucune des variables cr e ees ou modi ees lors de son ex ecution nest visible depuis lespace de travail ` a moins quelle ne soit une variable en sortie de la fonction ! Nous allons illustrer la di erence entre ces deux types de chiers sur un exemple. Si le fonction f est susament r eguli` ere, la formule de Taylor permet dobtenir une valeur approch ee de sa d eriv ee en un point x, pour un pas h, suivant f (x + h) f (x) h = f (x) + f (x) + O(h2 ) h 2 f (x). (1.4)

% % % %

Fichier ScriptDn1 pour calculer la derivee numerique de sinus au point 1 pour le pas h = 0.01.

function Res = Fonc1Dn1(h); % Derivee numerique de sinus % au point 1 en fonction du % pas h. x = 1; Dn = (sin(x+h) -sin(x))./h; Res = Dn;

x = 1; h = 0.01; Dn = (sin(x+h) -sin(x))./h;

Tab. 1.3 Fichier script et chier fonction. Le tableau 1.3 montre le contenu du chier script ScriptDn1.m et du chier fonction FoncDn1.m Une fois ces deux chiers sauvegard es dans votre espace de travail, vous pourrez tapez les commandes quivantes : >> >> >> >> >> >> clear all ScriptDn1 who Err = abs(Dn-cos(1)) clear all FoncDn1

Matlab nest pas content et il vous le dit : ??? Input argument "h" is undefined. Error in ==> FoncDn1 at 6 Dn = (sin(x+h) -sin(x))./h; Lerreur est comment ee ; Matlab vous indique le num ero de la ligne o` u elle sest produite. A pr esent, nous fournissons le pas en appel de la fonction

1.7. M-FICHIERS >> pas = 0.01 ; FoncDn1(pas) ans = 0.5361 >> Err = abs(Dn-cos(1)) ??? Undefined function or variable Dn. >> who Your variables are: ans pas

29

>> Der = FoncDn1(pas); >> Der-ans On peut faire quelques remarques : - Le chier script s ex ecute sans quon lui fournisse darguments. Le chier fonction a besoin quon lui fournisse les arguments quil ne cr ee pas, ici le pas. - Le nom de la variable aect ee de la valeur de ce pas dans lespace de travail na pas dimportance ; cest sa valeur qui est pass ee. - Les variables cr e ees par l ex ecution du script sont vues dans lespace de travail. Celles qui sont cr e ees lors de l ex ecution de la fonction ne le sont pas. Ce sont des variables locales. Largument en sortie prend le nom quon lui donne dans la session Matlab.

1.7.2

Fonctions

Fonctions simples Nous avons d ej` a rencontr e la fonction F (x) = 0.01 ex + 10 cos x 3 x. Dans ce cas, on dispose de deux fa cons pour cr eer une fonction Matlab qui calcule les valeurs de F : - comme la fonction F peut se d enir en une seule ligne, on peut le faire avec la fonction inline >> F1 = inline(0.01*exp(x)+10*cos(x)-3*x) - de fa con plus g en erale, on peut editer un chier que lon va appeler F2.m qui devra commencer par le mot-clef function : vous pouvez le d enir de la fa con suivante function y = F2(x) ; y = 0.01*exp(x)+10*cos(x)-3*x; La premi` ere d enition est ` a utiliser lorsque lon nenvisage pas dutilisation ult erieure de cette fonction. La d enition au moyen dun chier permet de la conserver. Cependant, ainsi quelle est r edig ee, cette fonction a encore le d efaut que son objet nest pas imm ediatement lisible ; on risque de lavoir oubli e quand on aura besoin de la r eutiliser. Il faut donc la commenter.

30

` MATLAB CHAPITRE 1. INITIATION A

Cela se fait sur des lignes qui commencent par le symbole % . Ce symbole transforme en commentaires tous les caract` eres qui le suivent dans la ligne courante. Entre autres commentaires, vous devrez toujours indiquer le format dappel de la fonction. Voici comment je vous sugg` ere d ecrire ce chier : function y = F2(x) ; % fichier fonction definissant la fonction F2(x) qui sert dexemple % au polycopie dinitiation a Matlab. % Lappel se fait selon : % >> y = F2(x); y = 0.01*exp(x)+10*cos(x)-3*x; Ces commentaires sont plac es imm ediatement apr` es la premi` ere ligne (de d eclaration). De cette fa con, ils constitueront la r eponse fournie par Matlab ` a la commande : >> help F2 Les variables internes dun chier fonction sont locales ; elles ne sont pas vues depuis lespace de travail. Corollairement, les variables de lespace de travail que vous souhaitez utiliser dans une fonction doivent etre pass ees en argument. La commande global permet de d enir des variables globales. Elles doivent etre d eclar ees globales au d ebut de la fonction et dans lespace de travail. Exercice La formule (1.4) est dite dordre 1 car lerreur dapproximation de la d eriv ee est de la forme O(h). On peut obtenir une formule dordre 2, cest-` a-dire avec une erreur 2 en O(h ) en utlisant la formule h2 f (x + h) f (x h) = f (x) + f (x) + O(h3 ) 2h 6 f (x). (1.5)

On vous demande d ecrire une fonction Fonc2Dn1.m qui calcule la d eriv ee approch ee de la fonction sinus au point x = 1 pour le pas h en utilisant la formule (1.5) Vous ecrirez egalement un script TestDn.m dans lequel : - vous d enirez le vecteur des pas, pas = 10.^(-[1 : 16]); - vous calculerez les d eriv ees approch ees pour ces pas en utilisant les deux fonctions ; - vous calculerez les erreurs Err1 et Err2 commises dans chaque cas ; - vous repr esenterez ces erreurs en fonction du pas avec des coordonn ees logarithmiques : loglog(pas, Err1, b-+, pas, Err2, r-*) ; - vous pourrez r e echir et commenter cette gure !

1.7. M-FICHIERS Fonctions de plusieurs variables

31

On peut passer plusieurs arguments ` a une fonction. Supposons que lon souhaite cr eer une fonction Matlab qui calcule la fonction F(a, b) pr esentant un pic peu marqu e au point a et un pic plus marqu e au point b : F(a, b) (x) = 1 2 + . 2 2 (x a) + 0.01 (x b) + 0.002

Les param` etres a et b seront des variables de la fonction que lappellera par exemple Foncapics. On peut encore proc eder de deux fa cons. - la premi` ere utilise la fonction inline : Essayez. la seconde consiste ` a cr eer le chier Foncapics.m, par exemple : function y = Foncapics(x,a,b); % Cette fonction pr esente un pic peu marqu e pour % x=a et un pic plus marqu e pour x= b. % Lappel se fait selon % >> y = Foncapics(x,a,b); % x est une matrice ; a et b sont des scalaires. y = 2./((x-a).^2+0.01) + 1./((x-b).^2+0.002); Exercice Cr e ez les fonctions Fonc1Dn2.m et Fonc2Dn2.m qui calcule la d eriv e de la fonction sinus en un point x et pour un pas h ` a xer par lutilisateur. Exercice (*) Modiez les fonctions pr ec edentes de fa con que lon puisse passer un vecteur x et un vecteur h en arguments. Le format dappel devra pr eciser : % Pour un vecteur x de longueur nx et un vecteur h % de longueur nh les d eriv ees seront calcul ees dans % une matrice Dn telle que size(Dn) = [nx, nh]. Vous pouvez utiliser la fonction repmat. Passage dune fonction en argument On veut maintenant calculer lapproximation de la d eriv ee dune fonction ` a choisir par lutilisateur. La fonction Fonc1Dn3.m r ealise cet objectif. Les restrictions dutilisation sont donn ees dans le commentaire.

32 function Dn = Fonc1Dn3(fonc,x,h);

` MATLAB CHAPITRE 1. INITIATION A

% Approximation ` a lordre 1 de la d eriv ee de la % fonction fonc au(x) point(s) x pour le pas h. % Appel se fait selon : % >> Dn = Fonc1Dn3(fonc, x, h) % Variables en entree : % - fonc est le nom de la fonction, % - x est scalaire ou vecteur, % - h, scalaire, est le pas du calcul. xp = x + h; y = feval(fonc,x); yp = feval(fonc,xp); Dn = (yp - y)/h; Le passage dune fonction en argument m erite quelques commentaires : - si fonc.m est une fonction pr ed enie de Matlab (par exemple sin) ou le nom dun chier de fonction (par exemple F2), on pourra ecrire lun ou lautre des deux appels ci-dessous : >> Dn = Fonc1Dn3(F2, x, pas); >> Dn = Fonc1Dn3(@F2, x, pas); - si fonc est le nom dune fonction d enie par inline, (par exemple F1), on devra formuler lappel selon : >> Dn = Fonc1Dn3(F1, x, pas); A vous de cr eer la fonction Fonc2Dn3.m pour une approximation ` a lordre 2. Arguments optionnels en entr ee (*) Le nombre de variables en entr ee nest pas n ecessairement x e. La fonction FoncDn4 propose de choisir lordre de la formule dapproximation de la d eriv ee que lon va utiliser. On xe par d efaut cet ordre ` a 1. On utilise les fonctions pr ec edentes pour calculer les approximations de la d eriv ee. function Dn = FoncDn4(fonc, x, h, ordre); % % % % % % % % % Approximation ` a lordre 1 ou 2 de la d eriv ee de la fonction fonc au(x) point(s) x pour le pas h. Appel : >> Dn = FoncDn4(fonc, x, h); ou >> Dn = FoncDn4(fonc, x, h, ordre); Variables en entree : - fonc est le nom de la fonction, - x est scalaire ou vecteur, - h, scalaire, est le pas du calcul.

1.7. M-FICHIERS % - ordre est optionnel ; par defaut, ordre = 1.

33

if nargin ==3 ordre = 1; end switch ordre case 1 Dn = Fonc1Dn3(fonc, x, h); case 2 Dn = Fonc2Dn3(fonc, x, h); otherwise Dn = []; disp(Ordre non valable); return end Cette fonction appelle quelques commentaires : - nargin renvoie le nombre de variables utilis ees dans lappel ` a la fonction. - le branchement d enit par switch, case, end na pas et e pr esent e pr ec edemment. Il permet de choisir parmi plusieurs instructions suivant la valeur dune variable, ici ordre. Essayez de le remplacer par un test multiple utilisant if, elseif ... - les fonctions appel ees, ici Fonc1Dn3.m et Fonc2Dn3.m doivent etre d enies dans le m eme r epertoire que la fonction qui les appelle. Nombre variable darguments (*) La fonction dont on veut calculer la d eriv ee peut d ependre de param` etres, comme la fonction F(a, b) ci-dessus. On utilisera dans ce cas la fonction varargin, comme le montre lexemple ci-dessous : function Dn = Fonc1Dn5(fonc,x,h,varargin); % % % % % % % % % Approximation ` a lordre 1 de la d eriv ee de la fonction fonc au(x) point(s) x pour le pas h. Appel : >> Dn = Fonc1Dn5(fonc, x, h, p1, p2,...) ; Variables en entree : - fonc est le nom de la fonction, - x est scalaire ou vecteur, - h, scalaire, est le pas du calcul. - p1, p2, eventuels parametres de fonc

xp = x + h; y = feval(fonc,x,varargin{:});

34 yp = feval(fonc,xp,varargin{:}); Dn = (yp - y)/h;

` MATLAB CHAPITRE 1. INITIATION A

varargin d esigne une liste de longueur quelconque de variables qui peuvent etre de tout format ; elle est g er ee comme une cellule de tableaux. Les cellules de tableaux sont un des moyens propos es par Matlab pour g erer une collection de variables de types et formats di erents. Les lignes suivantes d enissent une cellule de tableaux et font sacher quelques-uns de ses el ements : >> C ={1:3, rand(2),coucou}; >> C{1} ans = 1 2 3 >> c = C{3} c = coucou Les el ements dune cellule sont ordonn es comme ceux dune matrice, par ligne et par colonne ; on y fait r ef erence par lutilisation daccolades au lieu de parenth` eses. Exercice Ecrivez une fonction Fonc2Dn5.m qui fournisse une approximation ` a lordre 2 de la d eriv ee de la fonction argument en autorisant cette fonction ` a d ependre de param` etres. Ecrivez ensuite une fonction FoncDn6.m qui permette de choisir lordre, mais ne limpose pas. Son appel se fera selon >> Dn = FoncDn6( fonc, x, h, ordre, p1, p2, ...) Lorsque lon ne veut pas xer lordre et que la fonction fonc d epend de param` etres, on passera la matrice vide [] pour la variable ordre. Plusieurs arguments en sortie On peut red enir la fonction F2 de fa con quelle fournisse aussi la d eriv ee F de la fonction F : F (x) = 0.01 ex 10 sin x 3. Cela peut se faire de la fa con suivante : function [y, yprime] = F2bis(x); % fichier fonction d efinissant la fonction % F(x) = 0.01*exp(x)+10*cos(x)-3*x; % ainsi que sa derivee. % Lappel se fait selon : % y = F2bis(x);

1.7. M-FICHIERS % et renvoie alors seulement les valeurs de F, ou selon % [y, yprime] = F2bis(x); y = 0.01*exp(x)+10*cos(x)-3*x; yprime = 0.01*exp(x) -10*sin(x) -3;

35

Les deux arguments en sortie sont plac es entre crochets. Dans les deux formats dappel, on calcule F (x) et F (x). On peut ne faire calculer que F (x) si lon ne veut pas les valeurs de la d eriv ee : function [y, yprime] = F2ter(x); % fichier fonction d efinissant la fonction % F(x) = 0.01*exp(x)+10*cos(x)-3*x; % ainsi que sa derivee. % Lappel se fait selon : % y = F2ter(x); % et renvoie alors seulement les valeurs de F, ou selon % [y, yprime] = F2ter(x); y = 0.01*exp(x)+10*cos(x)-3*x; if nargout==2 yprime = 0.01*exp(x) -10*sin(x)-3; end

1.7.3

Fichiers de sauvegarde

Il est possible de sauvegarder des variables de lespace de travail en vue dune utilisation ult erieure. Cela se fait ` a laide de linstruction save. Le format le plus simple est le suivant : save nomfichier X Y Z Les variables X, Y et Z seront sauvegard ees dans un chier nomfichier.mat. On peut les retrouver par lappel : load nomfichier Les chiers que vous avez ainsi sauvegard es apparaissent dans le r epertoire courant sous le nom nomfichier.mat. Ces chiers ne sont lisibles que par Matlab. Vous pouvez souhaiter exporter vos donn ees pour les utiliser dans une autre circonstance. Il faut alors cr eer un chier ASCII. On peut le faire en simple (par d efaut) ou double pr ecision. Essayez : >> >> >> >> >> >> A = rand(1,3); save data1 A save data2.txt A -ascii save data3.txt A -ascii -double clear all load data1

1.7. M-FICHIERS >> >> >> >> >> load data2.txt whos data2 - A load data3.txt data3 - A

33

Exercice Nous aurons besoin, pour un prochain TD, de disposer dun certain nombre de racines de l equation J0 (x) = 0. Nous allons cr eer un chier contenant les valeurs approch ees des 200 plus petites racines de cette equation. Pour ce faire, vous modierez le chier VisuracBess.

1.7.4

Lecture de donn ees ext erieures

Matlab peut lire des chiers cr e es par dautres logiciels. Nous allons prendre lexemple de chiers cr e es par Excell. Ces chiers peuvent vous etre fournis sous plusieurs formats : pour les chiers .xls, vous pourrez utiliser les fonctions xlsread ou importdata ; pour les chiers .txt, vous pourrez utiliser les fonctions textread ou importdata. Exercice Vous pouvez recopier ` a ladresse indiqu ee en introduction les chiers Traction.xls et Bruits.txt. Vous allez lire ces chiers depuis Matlab. Pour chacun deux, vous allez r ecup erer une matrice de deux colonnes. La premi` ere colonne est constitu ees dabsisses, et la seconde dordonn ees. Vous repr esenterez les courbes repr esentant chacun de ces echantillons.

34

` MATLAB CHAPITRE 1. INITIATION A

35

36

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Chapitre 2 Annexe : lexique non exhaustif

Caract` eres sp eciaux et op erateurs logiques Symbole = () [] . .. ... ; , % : Usage instruction daectation utilis ees pour marquer la priorit e dune expression arithm etique ; contiennent les variables en entr ee des fonctions utilis e pour former matrices et vecteurs ; contient les variables en sortie des fonctions point d ecimal r epertoire au-dessus du r epertoire courant continue une suite dinstructions ` a la ligne suivante termine une ligne ; evite lachage s epare les el ements ou instructions dune ligne et les variables dune fonction commentaires utilis es pour la g en eration de vecteurs lignes d el ements r eguli` erement espac es, par d efaut avec un incr ement entier, sinon avec un incr ement ` a pr eciser ; d esigne lensemble des indices dun tableau selon une de ses dimensions force le format vecteur colonne se place avant et apr` es une chaine de caract` eres permet de d enir ` a lint erieur dune chaine de caract` eres identicateur de fonction depuis la version 6 permet lexecution dune commande du syst` eme dexploitation ET logique ; op` ere el ement par el ement pour les tableaux avec faux valant 0 et toute valeur non nulle valant vrai OU logique NON logique OU exclusif, semploie sous la forme xor(A, B) fonction vectorielle logique qui vaut 1 si un el ement du vecteur est non nul et 0 sinon ; elle op` ere sur chaque colonne pour une matrice et semploie sous la forme any(A) fonction vectorielle logique qui vaut 1 si chaque el ement du vecteur est non nul ; semploie et op` ere comme la pr ec edente pour les tableaux

( :) @ ! & | xor any

all

37

Op erateurs arithm etiques Symbole + * .* \ .\ / ./ ^ .^ . Usage addition soustraction produit matriciel ; les dimensions doivent etre compatibles (sauf le cas dun scalaire) produit el ement par el ement ; les deux variables doivent avoir les m emes dimensions division ` a gauche, ou solution de syst` eme(s) lin eaire(s) : C = A \ B si A*C=B division ` a gauche, el ement par el ement division ` a droite, ou solution de syst` eme(s) lin eaire(s) : C = B/A si C*A=B division ` a droite, el ement par el ement puissance de scalaire ou de matrice puissance de chaque el ement dun tableau conjugu ee transpos ee transpos ee Op erateurs relationnels Symbole < <= > >= == = Usage inf erieur, compare el ement par el ement des tableaux de m eme taille et prend pour valeur un tableau de cette taille , de coecients 1 (vrai) ou 0 (faux) inf erieur ou egal, op ere comme le pr ec edent sup erieur sup erieur ou egal egal di erent Variables et fonctions dint er et g en eral Symbole helpdesk helpwin help doc what type lookfor ans whos who save load clear Usage acc` es ` a une documentation hypertexte de Matlab (version compl` ete) fen etre daide arborescente (version simple) aide en ligne documentation relative ` a une fonction (version compl` ete) fournit la liste des M-chiers du repertoire courant ache le contenu dun M-chier indique les occurences dune chaine de caract` eres dans laide en ligne r esultat de la derni` ere instruction lorsquil nest pas aect e ache la liste des variables courantes, et leur format ache la liste des variables courantes sauvegarde une ou plusieurs variables de la session dans un chier retrouve les variables sauvegard ees pr ec edemment supprime une ou plusieurs variables de la session

38

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Variables et fonctions dint er et g en eral Nom Usage function d enit une fonction ; feval evalue une fonction dont le nom est donn e en argument nargin nombre de variables en entr ee dune fonction nargout nombre darguments en sortie dune fonction varargin liste darguments variable en entr ee ; cellule de tableaux varargout liste darguments variable en sortie ; une cellule de tableaux global d enit des variables globales pause arr` ete la session en attente dune r eponse de lutilisateur disp ache une variable sans donner son nom, ou un texte input renvoie lutilisateur au prompt pour entrer une valeur find fournit les indices des el ements non nuls dun tableau for boucle de r ep etition dune suite dinstructions g er ee par un compteur while boucle de r ep etition dune suite dinstructions g er ee par une expression logique if instructions ex ecut ees sous condition ; sembo te avec else, elseif switch branchement conditionn e par les valeurs dune variable ; g er ee par case end cl ot le corps dinstructions de for, while et if break arr` ete l ex ecution des boucles for ou while return renvoie vers la fonction dappel ou lespace de travail error ache un message derreur et quitte une fonction size dimensions dun tableau length longueur dun vecteur linspace cr ee un vecteur de composantes uniform ement r eparties entre deux valeurs logspace cr ee un vecteur de composantes r eparties logarithmiquement entre deux valeurs reshape change les dimensions dun tableau ( avec les m emes el ements) repmat cr ee un tableau en reproduisant une matrice selon les dimensions sp eci ees cat cr ee une matrice par concatenation cell cr ee une cellule de tableaux format pr ecise le format dachage echo controle lachage des commandes ex ecut ees more controle le nombre de lignes de chaque page ach ee tic ouvre le compteur de dur ee dexecution dune suite de commandes toc ferme le compteur ouvert par tic cputime compteur de temps CPU num2str convertit des donn ees num eriques en chaine de caract` eres sprintf ecrit des donn ees formatt ees dans une chaine de caract` eres textread lit des donn ees dun chier texte importdata lit des donn ees dun chier de lespace de travail cd change le repertoire de travail quit termine une session Matlab

39

Arithm etique, polyn omes et manipulation de donn ees Usage pr ecision relative de larithm etique virgule-ottante utilis ee unit e imaginaire des nombres complexes valeur absolue ou module dun nombre complexe argument dun nombre complexe racine carr ee partie r eelle partie imaginaire conjugu e complexe plus grand diviseur commun plus petit multiple commun arrondi ` a lentier le plus proche arrondi vers 0 arrondi vers arrondi vers reste apr` es division enti` ere : rem(x,y)= x-fix(x./y).*y reste sign e : mod(x,y)=x-floor(x./y).*y plus grande composante dun vecteur ; pour une matrice, la fonction renvoie un vecteur ligne form e des maxima de chaque colonne min plus petite composante dun vecteur sort trie les composantes dun vecteur, par d efaut dans lordre croissant fliplr inverse lordre des colonnes dun tableau flipud inverse lordre des lignes dun tableau mean moyenne des composantes dun vecteur sum somme des composantes dun vecteur std ecart-type des composantes dun vecteur cov matrice de covariance prod produit des composantes dun vecteur cumsum sommes cumul ees des el ements dune matrice selon une dimension ` a pr eciser poly construit un polyn ome de racines donn ees roots racines dun polyn omes polyval evalue un polyn ome donn e par ses coecients conv produit de polyn omes, ou convolution de vecteurs deconv division polyn omiale ou d econvolution de vecteurs polyder fournit le polyn ome d eriv e diff op erateur aux di erences ; permet de construire les di er ences nies ou divis ees fft transform ee de Fourier rapide en dimension 1 ifft transform ee de Fourier rapide inverse en dimension 1 fft2 transform ee de Fourier rapide en dimension 2 Nom eps pi i,j abs angle sqrt real imag conj gcp lcm round fix ceil floor rem mod max

40

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Alg` ebre lin eaire Nom zeros ones eye rand randn diag tril triu inv lu chol qr null orth rank eig svd pinv det cond condest norm trace expm sqrtm Usage matrice de 0 matrice de 1 matrice identit e matrice al eatoire, de coecients uniform ement distribu es sur [0, 1] matrice al eatoire, de coecients normalement distribu es extrait la diagonale dune matrice, ou cr ee une matrice diagonale ou bande extrait la partie triangulaire inf erieure dune matrice extrait la partie triangulaire sup erieure dune matrice inverse dune matrice (par r esolution de syst` emes lin eaires) factorisation lu dune matrice, avec strat egie de pivot partiel factorisation de Choleski dune matrice sym etrique d enie positive factorisation orthogonale-triangulaire dune matrice fournit une base orthonorm ee du noyau fournit une base orthonorm ee de limage rang dune matrice tous les el ements propres dune matrice carr ee valeurs et vecteurs singuliers dune matrice pseudo-inverse dune matrice d eterminant nombre de conditionnement pour la r esolution des syst` emes lin eaires, en norme 2 estimation du conditionnement dune matrice carr ee, en norme 1 norme dune matrice (plusieurs normes sont propos ees) trace dune matrice exponentielle de matrice racine carr ee matricielle dune matrice carr ee

Analyse Nom exp, log, log10 sin, asin, sinh, asinh cos, acos, cosh, acosh tan, atan, tanh, atanh cot, acot, coth, acoth besselj, bessely, besselh gamma, gammainc beta, betainc erf, erfinv Usage exponentielle de base e, logarithme n eperien et de base 10 sinus, arcsinus, sinus hyperbolique et argsh cosinus,... tangente,... cotangente,... fonctions de Bessel fonctions gamma fonctions beta fonction derreur (ou fonction de Gauss) et sa r eciproque

41

Graphiques et visualisations Nom figure plot fplot bar hist pie polar stem subplot hold axis title legend text xlabel semylogy plot3 bar3 meshgrid mesh hidden surf surfnorm contour meshc clabel quiver contour3 view colormap colorbar getframe movie image print findobj get get Usage cr ee une nouvelle fen etre de visualisation graphe lin eaire en dimension 2 graphe dune fonction entre deux valeurs graphe en rectangles verticaux histograme graphe en camembert graphe en coordonn ees polaires graphe en segments marqe e de donn ees discr` etes permet de partitionner une fen etre de visualisation conserve le graphique courant d enit les bornes des axes ache un titre (chaine de caract` eres ` a fournir) ache une l egende sur la gure ache un commentaire (chaine de caract` eres ` a fournir) en un point donn e par ses coordonn ees pr ecise le nom de la variable en absisse graphique avec une echelle logarithmique en ordonn ee graphe lin eaire en dimension 3 graphe en parall` elogrames verticaux construit un jeu de coordonn ees pour la visualisation tridimensionnelle dune fonction de 2 variables visualise une surface maill ee en dimension 3 fait apparaitre (off) ou disparaitre (on) les parties cach ees dune surface maill ee visualise une surface ombr ee (en couleurs) en dimension 3 repr esente les normales aux surfaces en dimension 3 repr esente les isolignes dune surface en dimension 2 combine mesh et contour fait apparaitre les valeurs des isolignes repr esente des gradients par des ` eches repr esente les isolignes dune surface en dimension 3 sp ecie le point de vue dun graphe en dimension 3 d enit le jeu de couleurs ache une echelle des couleurs forme un vecteur colonne ` a partir dun graphique en vue dune animation execute lanimation visuelle avec la matrice pr ec edente cr ee une image en interpretant les valeurs des coecients dune matrice imprime un graphique, ou le sauvegarde en format pdf, post-script ou jpeg r ecup` ere les handles des objets graphique de la session r ecup` ere les valeurs de propri` et es dun objet identi e par son handle xe les valeurs de propri` et es dun objet identi e par son handle

42

CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF

Chapitre 3 Bibliographie
Matlab Guide, D. J. Higham, N. J. Higham, SIAM, 2000. Introduction to Scientic Computing, A Matrix-Vector Approach Using MATLAB, C.F. Van Loan, MATLAB curriculum Series, 1997. Apprendre et Ma triser Matlab, versions 4 et 5 et SIMULINKr , M. Mokhtari, A. Mesbah, Springer, 1997.

43