Une br`ve introduction ` Matlab e a

Paul Armand† 3 d´cembre 2004 e

Ce document s’adresse aux ´tudiants de la licence de math´matiques. Le but est e e d’acqu´rir une connaissance suffisante de Matlab, pour r´soudre les exercices d’ape e plication du cours d’analyse num´rique qui seront propos´s en travaux pratiques. e e

Table des mati`res e
1 Introduction 2 D´but e 2.1 D´marrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 2.2 Quitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Cr´er des matrices e 3.1 Matrice, vecteur, scalaire 3.2 Vectoriser . . . . . . . . . 3.3 Cr´er . . . . . . . . . . . . e 3.4 Acc´der . . . . . . . . . . e 3.5 Modifier . . . . . . . . . . 3.6 Aide . . . . . . . . . . . . 3.7 Exercices . . . . . . . . . 3 3 3 4 4 4 5 6 7 8 9 9 9 9 10 11 11 12 12 13

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

4 Op´rations sur les matrices e 4.1 Op´rations alg´briques . . . . . . e e 4.2 La division . . . . . . . . . . . . 4.3 Op´rations ´l´ments par ´l´ments e ee ee 4.4 Op´rateurs relationnels . . . . . . e 4.5 Op´rateurs logiques . . . . . . . e 4.6 Le type logical . . . . . . . . . . 4.7 Exercices . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

LACO - CNRS UMR 6090, Universit´ de Limoges, Facult´ des Sciences, 123, avenue Albert Thomas, e e 87060 Limoges (France) ; e-mail : armand@unilim.fr.

1

5 Fonctions usuelles 5.1 Fonctions scalaires . . 5.2 Fonctions vectorielles . 5.3 Fonctions matricielles 5.4 Exercices . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

14 14 15 15 16 16 16 17 17 17 17

6 Aide 6.1 Aide en ligne et recherche par 6.2 Fonctions pr´d´finies . . . . e e 6.3 Contenu de l’espace de travail 6.4 Contenu d’un r´pertoire . . . e 6.5 Exercices . . . . . . . . . . .

mot cl´ e . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

7 Textes et chaˆ ınes de caract`res e 17 7.1 Chaine = vecteur de caract`res . . . . . . . . . . . . . . . . . . . . . 17 e 7.2 Affichage, lecture et ´valuation . . . . . . . . . . . . . . . . . . . . . 18 e 8 Fichiers script 8.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Chemin d’acc´s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 8.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Boucles et contrˆles o 9.1 Branchement conditionnel (If...then...else) 9.2 Branchement multiple (Switch) . . . . . . . . . 9.3 Boucle finie (For) . . . . . . . . . . . . . . . . . 9.4 Boucle infinie (While) . . . . . . . . . . . . . . 9.5 Exercices . . . . . . . . . . . . . . . . . . . . . . 18 18 19 20 20 20 21 22 22 23

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

10 Les fonctions 24 10.1 D´claration, arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 24 e 10.2 Exemple : r´solution d’une ´quation non lin´aire . . . . . . . . . . . 25 e e e 10.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 11 Graphiques 11.1 Graphiques 2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Graphiques 3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 R´f´rences ee 28 29 30 31 33

2

1

Introduction

Matlab signifie Matrix laboratory. C’est un logiciel de calcul num´rique. Il est dese tin´ ` traiter des applications ` partir des outils de l’analyse num´rique matricielle. e a a e Matlab poss`de aussi tout un ensemble de fonctionnalit´s graphiques permettant de e e visualiser les r´sultats num´riques. Il poss`de des boˆ ` outils, c’est ` dire des fonce e e ıtes a a tionnalit´s suppl´mentaires, d´di´es ` des domaines particuliers du calcul scientifique, e e e e a comme la r´solution d’´quations aux d´riv´es partielles, l’optimisation, l’analyse de e e e e donn´es, etc. Matlab est aussi un langage de programmation avec des possibilit´s d’ine e terfaces vers des programmes ´crits en C ou en Fortran. e En Matlab les calculs sont effectu´s avec une arithm´tique ` pr´cision finie. Ceci le e e a e diff´rencie des logiciels de calcul symbolique tel que Maple, mais la comparaison n’a e pas lieu d’ˆtre. Calcul num´rique et calcul symbolique sont des outils compl´mentaires e e e du calcul scientifique. Matlab a initialement ´t´ d´velopp´ en Fortran par Cleve Moler. Aujourd’hui Matee e e lab est ´crit en C et utilise les biblioth`ques LINPACK et ARPACK. Il est distribu´ e e e par la soci´t´ The MathWorks (www.mathworks.com). Il existe des logiciels gratuits ee de calcul num´rique similaires ` Matlab. Le logiciel Octave est un premier exemple. e a La syntaxe d’Octave est tr`s semblable ` celle de Matlab. Il est distribu´ gratuitement e a e sous licence GNU (www.octave.org) et est inclus dans certaines distributions de Linux comme Mandrake. Scilab est un autre exemple de logiciel de calcul num´rique dans l’ese prit de Matlab. C’est un logiciel assez complet, avec une syntaxe un peu diff´rente de e celle de Matlab. Il est distribu´ gratuitement par la soci´t´ Saphir Control (www.saphire ee control.fr) et peut ˆtre install´ sous Windows ou Linux. e e

2
2.1

D´but e
D´marrer e

Sous Unix, on peut saisir la commande matlab dans une fenˆtre de terminal ou bien e cliquer sur l’icˆne associ´ ` Matlab. Le logo apparaˆ pendant quelques secondes dans o ea ıt une fenˆtre s´par´e et un bureau est cr´´ (figure 1). e e e ee Il contient plusieurs fenˆtres : e – fenˆtre des commandes (Command Window), e – historique des commandes (Command History), – r´pertoire courant (Current Directory), e – espace de travail (Workspace), – rampe de lancement (Launch Pad). Seule la premi`re nous int´resse pour l’instant. Pour que cette fenˆtre soit la seule e e e visible, il suffit de s´lectionner Desktop Layout/Command Window Only dans e ` le menu View (voir figure 2). A ce stade le prompt >> est visible dans la fenˆtre des e commandes. Il indique que Matlab attend une commande.

3

Fig. 1 – Bureau de d´marrage. e

2.2

Quitter

Pour quitter Matlab, s´lectionner Exit MATLAB dans le menu File (figure 3) ou e bien saisir la commande exit dans la fenˆtre des commandes. On peut aussi utiliser la e commande quit, elle permet d’ex´cuter un certain nombre de taches avant de quitter. e Important : sur la machine limrec, le nombre d’utilisateurs simultan´s du logiciel e est limit´ ` 16. Il est donc important de quitter correctement le programme avant de ea terminer une session Unix, sinon on prend le risque de laisser Matlab en attente sur la machine et ainsi d’empˆcher d’autres utilisateurs d’y acc´der. Si, pour une raison e e quelconque, il n’est pas possible de quitter Matlab normalement, vous devez avertir un responsable.

3
3.1

Cr´er des matrices e
Matrice, vecteur, scalaire

Avec Matlab on travaille essentiellement avec un seul type d’objet : une matrice. En Matlab une matrice est un tableau rectangulaire de nombres repr´sent´s en virgule e e flottante avec une double pr´cision, c’est ` dire 8 octets pour un nombre r´el et 16 e a e octets pour un nombre complexe. Une matrice 1 × 1 est interpr´t´e comme un scalaire, ee celle ayant une seule ligne ou une seule colonne comme un vecteur. >> mat = rand(2,3), scal = pi, vlig = [1 2 3 4], vcol = zeros(3,1) 4

Fig. 2 – Choix de la disposition du bureau.

Fig. 3 – Menu File. mat = 0.4103 0.8936 scal = 3.1416 vlig = 1 2 vcol = 0 0 0

0.0579 0.3529

0.8132 0.0099

3

4

3.2

Vectoriser

La plupart des op´rations et des fonctions agissent directement sur une matrice e toute enti`re ou bien colonne par colonne. Il est important de bien comprendre cela d`s e e le d´but. Ceci permet de simplifier consid´rablement l’´criture des programmes et aussi e e e de r´duire les temps d’ex´cution. Le langage de Matlab est interpr´t´, ` la diff´rence e e ee a e des langages compil´s comme Fortran ou C, d’o` une relative lenteur d’ex´cution qui e u e 5

doit ˆtre compens´e par une ´criture “optimis´e” des programmes. Par exemple, cr´ons e e e e e une matrice de taille 1000 × 1000. >> A = rand(1000,1000); Comptons le temps n´cessaire pour diviser tous les ´l´ments de A par 2. e ee >> tic, A=A/2; toc elapsed_time = 0.1097 Pour diviser 1 million de nombres par 2, Matlab a besoin d’environ 1 dixi`me de seconde. e Maintenant divisons chaque ´l´ment par 2, comme on le ferait dans un programme ´crit ee e en Pascal, c’est ` dire avec deux boucles imbriqu´es. a e >> tic, for i=1:1000, for j=1:1000, A(i,j)=A(i,j)/2; end, end, toc elapsed_time = 12.9849 Matlab a besoin de 100 fois plus de temps1 .

3.3

Cr´er e

Pour cr´er une matrice il suffit d’ouvrir un [, ´num´rer les ´l´ments ligne par ligne, e e e ee puis fermer le ]. Sur une mˆme ligne les ´l´ments sont s´par´s par une virgule ou un e ee e e espace, deux lignes successives sont s´par´es par un point virgule ou un retour chariot. e e Par exemple, l’instruction >> A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] cr´e une matrice 4 × 4 appel´e A. La r´ponse de Matlab est e e e A = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

L’instruction suivante cr´e la mˆme matrice, mais le r´sultat n’est pas affich´ car un e e e e point-virgule termine l’instruction : >> A = [1, 2, 3, 4 5, 6, 7, 8 9 10 11 12; 13, 14, 15, 16 ]; On peut aussi cr´er la mˆme matrice A avec l’instruction suivante : e e >> A = [1:4; 5:8; 9:12; 13:16]
1

Tests r´alis´s avec un Pentium III ` 650MHz et Matlab 6.0.0.88. e e a

6

Nous avons utilis´ ici l’op´rateur deux-points. Cet op´rateur est tr`s important, on e e e e l’utilise tr`s souvent. Il permet de discr´tiser un intervalle avec un pas constant. L’inse e truction >> u = 0:9 cr´e un vecteur u contenant les entiers de 0 ` 9. Par d´faut le pas est ´gal ` 1, mais on e a e e a peut sp´cifier une autre longueur de pas (essayez !) : e >> 0:2:9, 9:-3:0, 0:pi/3:2*pi Noter que dans la ligne ci-dessus, nous avons utilis´ une virgule pour s´parer deux e e instructions sur une mˆme ligne. On voit donc que virgule et point-virgule permettent e de s´parer des ´l´ments d’une matrice et que ce sont aussi des s´parateurs d’instructions. e ee e , ; s´pare 2 ´l´ments sur une ligne e ee s´pare 2 lignes e termine une instruction avec affichage termine une instruction sans affichage

Certaines fonctions permettent de cr´er des matrices particuli`res : e e – eye(n) cr´e une matrice identit´ de dimension n ; e e – ones et zeros cr´ent des matrices de 1 et de 0 ; e – rand et randn des matrices dont les ´l´ments sont choisis au hasard selon une loi ee uniforme sur ]0, 1[ et une loi normale centr´e r´duite ; e e – magic(n) cr´e un carr´ magique de dimension n (n ≥ 3) ; e e – diag permet d’extraire des diagonales ou bien de cr´er des matrices diagonales ; e – triu et tril permettent d’extraire les parties triangulaire sup´rieure et triangue laire inf´rieure. e

3.4

Acc´der e

Pour acc´der aux ´l´ments d’une matrice, on utilise la notation standard de l’alg`bre e ee e lin´aire : A(i,j) fait r´f´rence ` l’´l´ment de la ligne i et de la colonne j de A. Dans e ee a ee l’exemple pr´c´dent, l’instruction A(2,3) retourne la valeur 7. Seul un entier positif e e non nul est accept´ comme indice de matrice ou de vecteur. On peut extraire plusieurs e ´l´ments simultan´ment, par exemple : ee e >> A([1,3],2), A([1,3],[2,1,4]) On utilise l’op´rateur deux-points pour extraire une ligne, une colonne ou une souse matrice. L’instruction A(2,:) extrait la deuxi`me ligne, A(:,1) la premi`re colonne et e e A(2:4,1:3) retourne le bloc ans = 5 9 13 6 10 14 7 11 15

7

L’instruction A(:) cr´e un vecteur colonne contenant les ´l´ments de A ´num´r´s colonne e ee e ee par colonne. Notons que l’instruction A(7) retourne la valeur 10, car les ´l´ments d’une ee matrice sont num´rot´s selon ce mˆme ordre d’´num´ration. Ainsi, l’´l´ment A(i,j) e e e e e ee est num´rot´ i+m*(j-1), o` m est le nombre de lignes de A. e e u m + 1 2m + 1 · · · m + 2 2m + 2 · · · . . . . . . . . . m 2m 3m ... 1 2 . . . Cette num´rotation permet d’extraire des ´l´ments avec un tableau d’indices. Par e ee exemple, l’instruction >> A([1 2 3; 4 5 6]) retourne ans = 1 13

5 2

9 6

3.5

Modifier

On peut modifier les ´l´ments d’une matrice en leur affectant de nouvelles valeurs : ee >> A(4,4) = 0, A(1,:) = A(1,:)*10, A = [A; [1 1 1 1]]

Matlab poss`de aussi un ´diteur de tableau qui permet de modifier les dimensions et les e e entr´es d’une matrice. Pour utiliser cet ´diteur, s´lectionner Workspace dans le menu e e e View. Une fenˆtre contenant les variables en m´moire apparaˆ puis cliquer deux fois e e ıt, sur la variable ` ´diter. On peut aussi ouvrir A dans l”´diteur avec l’instruction open A ae e (figure 4).

´ Fig. 4 – Editeur de tableau.

8

3.6

Aide

L’instruction help permet d’obtenir de l’aide. Par exemle, >> help diag renvoie l’aide en ligne de la fonction diag. Si on ne cconnait pas le nom de la fonction qu’on veut utiliser, on peut faire une recherche par mot cl´ avec la fonction lookfor. e >> lookfor identity EYE Identity matrix. SPEYE Sparse identity matrix. L’utilisation de l’aide est un peu plus d´taill´e au paragraphe 6 e e

3.7

Exercices

Exercice 1 Soit A = [1:4 ; 5:8 ; 9:12 ; 13:16]. Quel est le r´sultat de l’instruction e A(10:-1:5) ? Comment cr´er un vecteur contenant les ´l´ments de A dans l’ordre suie ee vant : 16 12 8 4 15 11 ... ? Quel est le r´sultat de l’instruction [A(1,:),5] ? Come ment cr´er un vecteur contenant les ´l´ments de A dans l’ordre suivant : 1 2 3 4 ... ? e ee Quel est le r´sultat de diag(diag(A)) ? e Exercice 2 Cr´er une matrice de ce type e 0 0 0 0 0 0 94.4043 104.4365 90.5010 0 0 107.8118 105.6896 91.7829 0 0 97.3439 88.1222 77.9768 0 0 0 0 0 0

les ´l´ments de la matrice 3×3 centrale ´tant choisit suivant une loi normale d’esp´rance ee e e 2. 100 et d’´cart type 10 e Exercice 3 Cr´er une matrice carr´e de taille 10 avec 1 pour les ´l´ments (i, 11−i), e e ee pour i = 1, . . . , 10 et des 0 ailleurs. Exercice 4 Soit M = magic(4). Comment expliquer le r´sultat de l’instruction M(M) ? e

4
4.1

Op´rations sur les matrices e
Op´rations alg´briques e e
Les op´rations alg´briques usuelles sont : e e

Soit X une variable al´atoire et soit (a, b) un couple de nombres r´els. Alors E(aX +b) = aE(X)+b e e et σ(aX + b) = |a|σ(X).

2

9

+ * ’ \ /

addition soustraction produit transposition (complexe conjugu´e) e puissance division ` gauche a division ` droite. a

Toutes ces op´rations doivent respecter les r`gles usuelles de l’alg`bre lin´aire. e e e e >> M = [1,2] * [3;4], P = [1;2] * [3,4], Q = [1,2] * [3,4] M = 11 P = 3 4 6 8 ? ? ? Error using ==> * Inner matrix dimensions must agree. Quand les op´randes sont une matrice et un scalaire (par exemple A+1, A-1, A*2 e ou A/2), l’op´ration est effectu´e entre le scalaire et chaque ´l´ment de la matrice. e e ee >> twos = ones(2) + 1 twos = 2 2 2 2

4.2

La division

Les op´rateurs de division permettent de calculer une solution d’une ´quation e e lin´aire. Lorsque A est inversible, A\b calcule la solution de l’´quation Ax=b. C’est la e e mˆme chose que inv(A)*b, la solution ´tant calcul´e sans inversion explicite de la mae e e trice. Matlab ustilise une m´thode de Gauss avec pivotage partiel. Si la matrice est e singuli`re, Matlab retourne un message d’avertissement. Par exemple, e >> [1 3;2 6]\[1;1] Warning : Matrix is singular to working precision. ans = Inf Inf Lorsque A n’est pas carr´e, A\b retourne une solution calcul´e au sens des moindres e e carr´s. Par exemple, s’il y a plus de lignes que de colonnes et que A est de plein rang, e le r´sultat est une solution du probl`me de minimisation min Ax − b , pour la norme e e

10

euclidienne usuelle (voir les exercices 5 et 6). Matlab calcule la solution de l”´quation e normale A Ax = A b. L’op´rateur de division ` droite est d´fini par b/A = (A’\b’)’. Si A est inversible, e a e c’est la mˆme chose que b*inv(A). e

4.3

Op´rations ´l´ments par ´l´ments e ee ee

Matlab utilise un type d’op´rations particuli`res appel´es “array operations”. Ces e e e op´rations concernent *, , / et \. Lorsque un de ces op´rateurs est pr´c´d´ d’un point, e e e e e l’op´ration est effectu´e sur chaque ´l´ment de la matrice. e e ee >> [1:10].^2 ans = 1 4

9

16

25

36

49

64

81

100

>> [1:4]./[2:5] ans = 0.5000 0.6667

0.7500

0.8000

>> [1 2 3 ; 4 5 6 ; 7 8 9] .* eye(3) ans = 1 0 0 0 5 0 0 0 9 Ces op´rateurs sont tr`s utiles pour tracer des graphiques. e e Lorsqu’on effectue des calculs avec des nombres complexes, la transposition non complexe conjugu´e est obtenue avec l’op´rateur .’. e e >> Z1 = [1 ; i]’ , Z2 = [1 ; i].’ Z1 = 1.0000 0 - 1.0000i Z2 = 1.0000 0 + 1.0000i

4.4

Op´rateurs relationnels e

Les op´rateurs relationnels sont e == ∼= > >= < <= ´gal e diff´rent e strictement plus grand plus grand ou ´gal e strictement plus petit plus petit ou ´gal. e

11

Les deux op´randes doivent ˆtre de mˆme dimension, sauf si un des deux op´randes e e e e est un scalaire. Le r´sultat est une matrice de mˆme dimension n’ayant que des 0 e e (faux) et des 1 (vrai), la comparaison ´tant effectu´e ´l´ment par ´l´ment. Lorqu’un e e ee ee des deux op´randes est un scalaire,la comparaison est effectu´e entre chaque ´l´ment e e ee de la matrice et le scalaire. >> R = randn(1,6), R>0 R = 1.1892 -0.0376 0.3273 ans = 1 0 1 1 0

0.1746 1

-0.1867

0.7258

4.5

Op´rateurs logiques e

Les op´rateurs logiques sont e & | ∼ Calculons une table logique : >> a = [0;0;1;1]; b = [0;1;0;1]; EtOuDonc = [a,b,a&b,a|b,(~a)|b] EtOuDonc = 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 Une valeur num´rique est consid´r´e comme vraie (= 1) si elle est non nulle, sinon elle e ee est fausse (= 0). Par exemple, ∼A renvoie une matrice dont les ´l´ments valent 1 l` o` ee a u A a des ´l´ments nuls et 0 ailleurs. ee et ou non.

4.6

Le type logical

Le r´sultat d’une op´ration relationnelle ou logique est du type logical (figure 5). e e Un tableau de type logical peut ˆtre utilis´e comme tableau d’indice d’une matrice e e de mˆme dimension. e Dans l’exemple ci-dessous, R = randn(3,4) est une matrice de dimension 3 × 4 dont les valeurs sont choisies selon une loi normale. L’op´ration Rpos=R>0 retourne une e matrice de mˆme dimension telle que Rpos(i,j)=1 si R(i,j)>0 et Rpos(i,j)=0. La e matrice Rpos est utilis´e ensuite pour extraire les valeurs positives de R. e >> R = randn(3,4), Rpos=R>0, R(Rpos) R = -2.1707 0.6145 0.5913 -1.0091 -0.0592 0.5077 -0.6436 -0.0195 12

-1.0106 Rpos = 0 1 0 1 0 1 ans = 0.6145 0.5077 1.6924 0.5913 0.3803

1.6924 1 0 1 0 0 0

0.3803

-0.0482

Fig. 5 – Type logical. La fonction logical permet d’affecter le caract`re logique ` un tableau de donn´es e a e num´riques. Cette action permet d’utiliser le tableau comme d’un tableau d’indices e (voir l’exercice 11). >> A = [0,1;2 3]; A(logical(eye(2))) ans = 0 3

4.7

Exercices

Exercice 5 On consid`re les instructions suivantes e >> M = [eye(2);ones(1,2)], b = ones(3,1), x = M\b Montrer que la solution calcul´e correspond ` la valeur minimale de la fonction de deux e a variables f (x1 , x2 ) = (x1 − 1)2 + (x2 − 1)2 + (x1 + x2 − 1)2 . V´rifier qu’on obtient la e mˆme valeur avec l’instruction (M’*M)\(M’*b). e Exercice 6 Soit (xi , yi )i=1...n , n points de R2 tels que xi = i et yi = xi + i , o` i est u une variable al´atoire suivant une loi normale centr´e et d’´cart type σ = 0.5. Calculer e e e la droite d’ajustement lin´aire au sens des moindres carr´s de y en x. Rappel : cette e e droite est d´finie par l’´quation y = ax + b, o` a et b sont solutions du probl`me e e u e 2. min i (yi − axi − b) 13

Exercice 7 Cr´er une matrice M magique d’ordre 3, puis calculer a, b et c tels que e       1 1 1 0 1 −1 −1 1 0 0 1  + c 1 0 −1  . M = a  1 1 1  + b  −1 1 1 1 1 −1 0 0 −1 1 Exercice 8 Cr´er un vecteur des puissances de 2 de 0 ` 16. Cr´er une matrice 10 × 4, e a e contenant les puissances de 0 ` 9 des nombres 2, 3, 4 et 5. a Exercice 9 Quel est le r´sultat de l’instruction suivante ? e >> M = [1 2 3; 4 5 6; 7 8 9]; M ~= diag(diag(M)) Exercice 10 Cr´er une matrice triangulaire sup´rieur de dimension 10×10 avec seulee e ment des 1 dans sa partie sup´rieure. e Exercice 11 Soit A = [1 2 ;3 4]. Expliquer les r´sultats des deux instructions A(A) e et A(logical(A)). Exercice 12 Soit X une variable al´atoire de loi normale centr´e et r´duite. La probae e e bilit´ que X prenne des valeurs comprises entre −2 et 2 est sup´rieure ` 0.95. V´rifier e e a e exp´rimentalement si le g´n´rateur de nombre al´atoire de Matlab satisfait cette assere e e e tion.

5
5.1

Fonctions usuelles
Fonctions scalaires
Ce sont les fonctions math´matiques usuelles. e sin sinh exp rem real cos cosh log round imag tan tanh log10 floor conj acos acosh abs ceil angle asin asinh sqrt fix atan atanh sign

L’argument d’entr´e peut ˆtre un scalaire, un vecteur ou une matrice. L’argument de e e sortie est une matrice de mˆme dimension, la fonction ´tant appliqu´e sur chacun de e e e ses ´l´ments. ee >> log(0:5) Warning: Log of zero. ans = -Inf 0

0.6931

1.0986

1.3863

1.6094

14

5.2

Fonctions vectorielles

Lorsque l’argument d’entr´e de ces fonctions est un vecteur, le r´sultat est un scae e laire. min median max mean sum std prod any sort all

>> [min(rand(1,10000)), max(rand(1,10000))] ans = 0.0001 0.9999 Lorsqu’une telle fonction est appliqu´e ` une matrice, elle agit colonne par colonne et e a retourne un vecteur ligne. >> sum(magic(5)) ans = 65 65 65

65

65

Les fonctions any et all sont tr`s utiles. Si x est un vecteur, any(x) renvoie la valeur e logique 1 si au moins une composante du vecteur est non nulle, sinon elle renvoie la valeur logique 0 ; all(x) renvoie la valeur logique 1 si toutes les composantes de x sont non nulles, sinon elle renvoie 0.

5.3

Fonctions matricielles

Ce sont des fonctions usuelles de l’analyse num´rique matricielle. L’argument d’ene tr´e est une matrice. e cond det norm rank trace chol inv lu qr eig poly svd expm sqrtm conditionnement d´terminant e norme 1, 2, Frobenius, ∞ rang trace factorisation de Cholesky inverse factorisation LU factorisation QR valeurs propres et vecteurs propres polynˆme caract´ristique o e d´composition en valeurs singuli`res e e exponentielle de matrice racine carr´e de matrice e

Dans l’exemple ci dessous, on calcule les vecteurs propres (V) et les valeurs propres 1 1 (diagonale de D) de la matrice . 1 1 15

>> [V,D] = eigs(ones(2,2)) V = 0.7071 -0.7071 0.7071 0.7071 D = 2 0 0 0

5.4

Exercices

Exercice 13 Comment d´terminer l’´l´ment maximal d’une matrice quelconque ? e ee Exercice 14 Comment tester si une matrice carr´e est magique avec une seule inse truction ? Exercice 15 Avec la fonction diag, cr´er e  2 1  1 2   .. . M =    (0) la matrice suivante  1 (0) .. .. . . .. .. . 1 . 1 2    .   

Calculer ses valeurs propres et sa d´composition de Cholesky. e

6
6.1

Aide
Aide en ligne et recherche par mot cl´ e

La commande help fonc permet d’obtenir de l’aide sur la fonction fonc. Pour un affichage page par page du texte ` l’´cran utiliser la l’instruction more on. Pour a e d´sactiver ce mode d’affichage utiliser more off. Quand on ne connaˆ pas le nom de e ıt la fonction ` utiliser, la commande lookfor permet de faire une recherche par mot a cl´. Cette recherche se fait dans la premi`re ligne d’aide des fonctions, la ligne H1. Par e e exemple, lookfor sort affiche le nom des fonctions qui contiennent la chaˆ “sort” ıne dans leur ligne H1. >> lookfor sort CPLXPAIR Sort numbers into complex conjugate pairs. SORT Sort in ascending order. SORTROWS Sort rows in ascending order. EIGFUN Function to return sorted eigenvalues (used in GOALDEMO). V2SORT Sorts two vectors and then removes missing elements. SORT Sort for cell arrays of strings.

16

6.2

Fonctions pr´d´finies e e

Une fonction pr´d´finie de Matlab est soit une fonction int´gr´e (built-in function), e e e e soit une fonction ´crite en Matlab sauvegard´e dans une des biblioth`ques. La come e e mande which fonc indique si fonc est une variable, une fonction int´gr´e ou bien e e retourne le chemin d’acc`s au fichier fonc.m. e >> which min, which bench min is a built-in function. /usr/local/matlabr12/toolbox/matlab/demos/bench.m Nous verrons au paragraphe 10 comment cr´er ses propres fonctions. e

6.3

Contenu de l’espace de travail

La commande whos renvoie le nom des variables de l’espace de travail, leur taille, leur occupation en m´moire et leur classe. La fenˆtre “workspace” (voir la figure 5) e e permet aussi d’acceder ` ces informations. La commande clear permet de lib´rer la a e place m´moire occup´e par certaines variables. e e

6.4

Contenu d’un r´pertoire e

La commande dir retourne la liste des fichiers du r´pertoire courant. La commamde e pwd permet de connaˆ ıtre le nom de ce r´pertoire. Pour changer de r´pertoire utiliser e e cd (change directory). La commande type permet d’afficher le contenu d’un fichier et delete permet de d´truire fichier et objet graphique. Pour passer une commande Unix, e il suffit de commencer la ligne de commande avec un point d’exclamation. Par exemple, >> !emacs /usr/local/matlabr12/toolbox/matlab/demos/bench.m& ouvre le fichier bench.m avec l’´diteur emacs. e

6.5

Exercices

Exercice 16 Rechercher une fonction Matlab permettant de g´n´rer toutes les permue e tations de k nombres pris parmi n.

7
7.1

Textes et chaˆ ınes de caract`res e
Chaine = vecteur de caract`res e
Une chaˆ ınes de caract`res est encadr´e par deux apostrophes. e e

>> c = ’La variable c contient une chaine de caracteres’ Les textes sont repr´sent´s par des tableaux de caract`res. La variable c est un vecteur e e e de 48 caract`res. La plupart des op´rations vues dans la section 3 s’appliquent. Les e e instructions 17

>> c = [c,’.’], c(length(c):-1:1) c = La variable c contient une chaine de caracteres. ans = .seretcarac ed eniahc enu tneitnoc c elbairav aL Certaines fonctions permettent de transformer chaines en valeurs num´riques et vice e versa (voir la section 12). >> two = 2, second = num2str(two) two = 2 second = 2

Fig. 6 – Type caract`re. e

7.2

Affichage, lecture et ´valuation e

Certaines fonctions utilisent une chaine de caract`re comme argument d’entr´e. Par e e exemple, disp affiche un message ` l’´cran, error termine l’ex´cution d’une fonction a e e et retourne un message, input affiche un message et attend une entr´e au clavier. e Les fonctions eval et feval permettent d’ex´cuter une instruction ` partir d’une e a chaˆ de caract`res. Par exemple, l’instruction ıne e >> for i=2:5, eval([’I’,num2str(i),’=eye(i)’]), end retourne les matrices identit´s de dimension 2, 3, 4 et 5 dans des variables I2, . . . , I5. e La fonction feval permet de passer des arguments d’entr´e. Un exemple d’utilisation e est pr´sent´ ` la section 10. e ea

8
8.1

Fichiers script
Exemple

Un script est un fichier contenant une suite d’instructions qui sont ex´cut´es s´e e e quentiellement ` l’appel du fichier. L’utilisation d’un script est tr`s courante, cela evite a e 18

d’avoir ` saisir plusieurs fois de longues suites d’instructions. Pour ´diter un script, a e on peut utiliser son ´diteur pr´f´r´ ou bien l’´diteur par d´faut de Matlab avec la e eee e e commande edit. Le fichier doit ˆtre sauvegard´ avec l’extension .m. L’exemple suivant e e est un fichier script sauvegard´ dans le r´pertoire courant sous le nom durer.m. Les e e lignes commen¸ant par le caract`re % sont des commentaires. c e
% durer.m version du 23 septembre 2002 % calculs dans l’espace des matrices magiques d’ordre 4 % base de C1 = [1 0 C2 = [0 1 C3 = [0 0 C4 = [0 1 C5 = C4’ C6 = C3’ C7 = C1’ l’espace 0 0; 0 0 0 0; 0 0 0 1; 0 1 0 0; 0 0

0 1 0 0

1; 0; 0; 1;

0 1 1 0

1 0 0 0

0 0 0 1

0; 0; 0; 0;

0 0 0 1

0 0 0 0

1 0 1 0

0] 1] 0] 0]

% matrice de la gravure de D¨rer u D = [16 3 2 13;5 10 11 8 ; 9 6 7 12; 4 15 14 1] % d´composition de D sur la famille {C1, ..., C7} e C = [C1(:),C2(:),C3(:),C4(:),C5(:),C6(:),C7(:)] x = C\D(:)

Pour ex´cuter les instructions de ce fichier, entrer le nom du fichier, sans l’extension, e dans la fenˆtre des commandes de Matlab. e >> durer

8.2

Chemin d’acc´s e

Pour que Matlab associe correctement la commande durer avec le fichier durer.m, il faut que ce fichier soit dans le r´pertoire courant (le nom du r´pertoire courant est e e obtenu avec la commande pwd) ou bien dans un des r´pertoires de la liste PATH obtenue e avec la commande path. Si la r´ponse de Matlab est e ??? Undefined function or variable ’durer’. cela signifie que Matlab ne trouve pas le fichier durer.m. Dans ce cas, il faut en premier s’assurer que le fichier existe dans un des r´pertoires. Si le contenu du fichier est visible e dans la fenˆtre de l’´diteur, soit il n’a pas ´t´ sauvegard´, soit il a ´t´ sauvegard´ dans e e ee e ee e un r´pertoire diff´rent du r´pertoire courant. Pour rechercher un fichier on peut utiliser e e e la commande Unix suivante (` saisir dans une fenˆtre de terminal) : a e find ~ -name durer.m On peut aussi saisir la commande dans la fenˆtre de Matlab en la faisant pr´c´der e e e d’un ! : 19

>> ! find ~ -name durer.m /users/math/armand/ens/matlab/doc/durer.m Unix va retourner la liste des r´pertoires qui contiennent un fichier durer.m. Si le e fichier n’existe pas, la liste est vide. Si le fichier existe, c’est que le r´pertoire courant e de Matlab ne correspond pas au r´pertoire qui contient le fichier. Il suffit alors de e changer de r´pertoire courant avec la commande cd de Matlab. Il est aussi possible de e modifier la liste PATH, avec la commande path elle-mˆme ou bien en s´lectionnant Set e e Path dans le menu File du bureau Matlab.

8.3

Exercices

Exercice 17 Reproduire le script durer.m et le faire ex´cuter. Quelles sont les valeurs e e des coefficients αi tels que D = 7 αi Ci ? V´rifier que D est bien une matrice mai=1 gique. V´rifier que la somme des nombres des quatres cases centrales est aussi ´gale ` e e a 34.

9
9.1

Boucles et contrˆles o
Branchement conditionnel (If...then...else)

L’instruction if permet d’ex´cuter un bloc d’instructions en fonction de la valeur e logique d’une expression. Sa syntaxe est : if expression instructions end Le groupe d’instructions est ex´cut´ si seulement si l’expression est vraie. Il est possible e e d’utiliser des branchements multiples. if length(x) ~= 1 ’non scalaire’ elseif isnan(x) ’NaN’ elseif x > 0 ’positif’ elseif x < 0 ’negatif’ else ’nul’ end Si A et B sont deux matrices, il est possible d’utiliser l’expression A == B comme test logique. Le bloc d’instructions venant ` la suite du if A == B est ex´cut´ si et seulea e e ment si les deux matrices sont ´gales. Attention cependant ` ce test d’´galit´, car il e a e e renvoie un message d’erreur si les deux matrices n’ont pas les mˆmes dimensions. Il est e pr´f´rable d’utiliser la fonction isequal pour tester l’´galit´ entre plusieurs matrices. ee e e 20

9.2

Branchement multiple

(Switch)

C’est une instruction de branchement conditionnel. Sa syntaxe est : switch expression case valeur 1 instructions 1 case valeur 2 instructions 2 ... otherwise instructions end o` expression doit ˆtre un scalaire ou une chaˆ de caract`re. Dans le cas scalaire, u e ıne e expression est compar´e successivement avec valeur 1, valeur 2, etc. D`s que le e e premier test expression==valeur retourne la valeur vraie, le bloc d’instruction qui suit est ex´cut´. Si aucun test n’est valid´, le bloc qui suit otherwise est ex´cut´. e e e e e switch mod(x,3) case 0 ’multiple de 3’ case 1 ’x = 3 [1]’ case 2 ’x = 3 [2]’ otherwise ’autre’ end L’exemple ci-dessous pr´sente un cas o` expression est une chaˆ de caract`res. e u ıne e Noter l’utilisation des points de suspension pour continuer une instruction sur la ligne suivante. switch lower(car) case {’a’,’e’,’i’,’o’,’u’,’y’} disp([car ’ est une voyelle’]) case {’b’,’c’,’d’,’f’,’g’,’h’,’j’,’k’,’l’,’m’,’n’,’p’,... ’q’,’r’,’s’,’t’,’v’,’w’,’x’,’z’} disp([car ’ est une consonne’]) case {’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’} disp([car ’ est un chiffre’]) otherwise ’autre’ end

21

9.3

Boucle finie

(For)

Une boucle for permet de r´p´ter un certain nombre de fois un bloc d’instructions. e e Sa syntaxe est : for variable = expression instructions end L’exemple suivant permet d’´diter une table de multiplication. e n = T = for T end T 10; t = 1:n; []; i = 1:n = [T;t*i];

Plusieurs boucles peuvent ˆtre imbriqu´es, comme dans l’exemple qui suit (calcul d’une e e matrice de Hilbert). H = []; n = 10; m=n; for i = 1:n for j = 1:m H(i,j) = 1/(i+j-1); end end H La variable de contrˆle peut ˆtre un vecteur et l’expression une matrice. Par exemple, o e >> for u = eye(4), u, end ´num`re les vecteurs de la base canonique de l’espace euclidien de dimension 4. e e

9.4

Boucle infinie

(While)

Une boucle while permet d’ex´cuter un bloc d’instructions tant qu’une expression e logique est vraie. Sa syntaxe est : while expression instructions end L’exemple suivant permet de calculer le epsilon machine (= plus petite distance entre 1.0 et le nombre flottant suivant).

22

e = 1; while 1+e > 1 e = e/2 end epsilon = 2*e Attention ` modifier la valeur de la variable de contrˆle dans le bloc d’instructions, sinon a o la boucle n’a pas de fin. Pour forcer l’interruption d’une boucle en cours d’ex´cution, e utiliser la combinaison de touches Ctrl–C. L’instruction break permet de terminer l’ex´cution d’une boucle while ou for. Elle e peut ˆtre utile lorsqu’on veut placer le test de contrˆle ailleurs qu’en d´but de boucle. e o e L’instruction continue permet de passer ` la prochaine it´ration de la boucle while a e ou for qui la contient, en sautant les instructions qui lui font suite dans le corps de cette boucle. Des habitudes de programmation nous poussent souvent ` utiliser une ou plua sieurs boucles for ou while lorqu’il s’agit d’effectuer une op´ration sur chaque ´l´ment e ee d’un tableau. Avec Matlab il faut toujours avoir pr´sent ` l’esprit que la plupart des e a op´rations peuvent agir sur tous les ´l´ments d’une matrice ou bien sur tous ses vecteurs e ee colonnes simultan´ment. Il ne faut pas h´siter ` remplacer une boucle par quelques inse e a tructions simples ` chaque fois que cela est possible, il en r´sultera un gain en rapidit´ a e e d’ex´cution. Prenons l’exemple du calcul d’une table de multiplication. Dans l’exemple e pr´c´dent, la boucle for peut avantageusement ˆtre remplac´e par l’instruction e e e e n = 10; t = 1:n; T = t’*t; Avec n = 10 on obtient un gain en rapidit´ d’ex´cution d’environ 3, avec n = 500 le e e gain est sup´rieur ` 350. e a

9.5

Exercices

Exercice 18 Avec les fonctions de chronom´trage tic et toc, comparer les temps e de calcul n´cessaires pour cr´er une table de multiplication selon les deux m´thodes e e e expos´es ci-dessus. e Exercice 19 Recopier dans un fichier appel´ erathostene.m le script suivant. Faire e executer ce script et expliquer l’algorithme.
n = 49; T = ones(1,n); for k = 2:sqrt(n) if T(k)==1 T(2*k:k:n)=0; end end find(T)

Exercice 20 23

On consid`re les deux suites (xn ) et (yn ) d´finies par : e e xn = et √ 5+ 5 yn = 10 1 si 0 ≤ n ≤ 1, xn−1 + xn−2 si n ≥ 2 √ 1+ 5 2
n

√ 5− 5 + 10

√ 1− 5 2

n

, n ≥ 0.

1. Montrer que pour tout n ≥ 0, xn = yn . 2. Ecrire un programme de calcul des valeurs xn et yn pour 0 ≤ n ≤ 25 avec les formules indiqu´es. Ces valeurs seront m´moris´es dans deux vecteurs x et y. e e e 3. Que peut-on constater ?

10
10.1

Les fonctions
D´claration, arguments e

Une fonction est un fichier texte dont la premi`re ligne contient un en-tˆte de la e e forme suivante : function [s1, s2, ...] = nom_fonction (e1, e2, ...) Le reste du fichier contient la suite des instructions qui sont ex´cut´es lors de l’appel e e de la fonction. Les variables e1, e2, . . . , sont les arguments d’entr´e de la fonction. Les e variables s1, s2, . . . , sont les arguments de sortie. Il existe des diff´rences importantes entre un script et une fonction. Une fonction e poss`de son propre espace de travail. Une variable utilis´e ` l’int´rieur du corps de la e e a e fonction poss`de un caract`re local, elle n’existe que pendant l’ex´cution de la fonction, e e e sauf si elle appartient ` la liste des arguments de sortie ou bien si elle a ´t´ pr´alablement a ee e d´clar´e comme variable globale (mot-cl´ global). De mˆme, une variable de l’espace e e e e de travail courant, ne peut pas ˆtre r´f´renc´e depuis une fonction, sauf si elle est pass´e e ee e e en argument d’entr´e ou bien si elle est globale. e Voici un exemple tr`s simple. La fonction caracter retourne la valeur de la fonction e caract´ristique de l’intervalle [0, 1] (f (x) = 1 si x ∈ [0, 1], = 0 sinon). Si l’argument e n’est pas de type num´rique elle renvoie un message d’erreur. e
function [y] = caracter(x) %CARACTER Fonction caracteristique de [0,1] % CARACTER(X) retourne la valeur de la fonction caracteristique % de [0,1] evaluee sur les elements de X if isnumeric(x) y = x>=0 & x <=1; else error(’Argument non numerique’) end

24

Ce fichier est sauvegard´ dans le r´pertoire courant sous le nom caracter.m. L’ene e tˆte contient le mot-cl´ function, une seule variable de sortie, le nom de la fonction suivi e e de l’unique argument d’entr´e. Les trois lignes de commentaires qui suivent constituent e les lignes d’aide qui seront affich´es avec la commande help caracter. Les lignes d’aide e sont les premi`res lignes de commentaires contigu¨s situ´es apr`s l’en-tˆte, les autres e e e e e lignes de commentaire sont ignor´es par le help. La premi`re ligne de commentaire e e constitue la ligne H1. C’est dans cette ligne que la fonction lookfor recherche un mot-cl´. Par exemple, lookfor car, renvoie e CARACTER Fonction caracteristique de [0,1] CART2POL Transform Cartesian to polar coordinates. CART2SPH Transform Cartesian to spherical coordinates. ... Ensuite viennent les instructions qui constituent la partie ex´cutable de la fonction. e L’appel de cette fonction peut se faire dans le corps d’une autre fonction, dans un script ou directement dans la fenˆtre des commandes, sous r´serve que le chemin d’acc´s e e e au fichier caracter.m soit le r´pertoire courant ou bien qu’il soit indiqu´ dans le PATH. e e L’association entre l’appel ` une fonction et le fichier o` est sauvegard´ le texte de la a u e fonction, ob´it aux mˆmes r`gles que pour un fichier script (voir le paragraphe 8). e e e >> a = [0, 3, .4, -5, 1/2, pi], b = caracter(a) L’instruction ci-dessus renvoie b = 1 0 1 0 1 0

10.2

Exemple : r´solution d’une ´quation non lin´aire e e e

Dans l’exemple ci-dessous, nous montrons comment passer une fonction comme argument d’entr´e d’une autre fonction. Il s’agit de programmer une m´thode de e e r´solution num´rique d’une ´quation non lin´aire e e e e g(x) = 0, o` g : Rn → Rn . La m´thode que nous voulons programmer et tester est due ` Barzilai u e a et Borwein. C’est une m´thode it´rative qui g´n`re une suite de vecteurs {xk }k≥1 par e e e e la r´currence e xk+1 = xk − αk g(xk ), o` u αk = 1
xk −xk−1 2 xk −xk−1 ,g(xk )−g(xk−1 )

si k = 1, si k > 1.

25

Algorithme Barzilai-Borwein Entr´e : ε, x1 . Sortie : x∗ , tel que g(x∗ ) ≤ ε. e 1. Poser k = 1. 2. Calculer g(xk ). 3. Si g(xk ) ≤ ε, stop. 4. Calculer αk . 5. xk+1 = xk − αk g(xk ). 6. k = k + 1 et retour en 2.

function x = abb(fonc,x,epsilon,maxiter) %ABB Resolution d’une equation non lineaire, methode de Barzilai-Borwein % % Entree : fonc = fonction test % x = point de d´part e % epsilon = tol´rance du test d’arr^t, valeur par d´faut 1e-8 e e e % maxiter = nombre maximum d’it´rations, valeur par d´faut 100 e e % % Sortie : x = solution % v´rification e if nargin < 2, if nargin < 3, if nargin < 4, du nombre d’arguments d’entr´e et valeurs par d´faut e e error(’Nombre d’’arguments d’’entree trop petit’); end epsilon = 1e-8; end maxiter = 100; end

iter = 1; % compteur it´ration e while iter <= maxiter g = feval(fonc,x); if norm(g) <= epsilon, break, end if iter == 1, a = 1; else a = norm(x-x_)^2/dot(x-x_,g-g_); end x_ = x; g_ = g; x = x-a*g; iter = iter + 1; end if iter > maxiter, warning(’nombre maximum d’’iterations atteint’), end

La fonction abb est sauvegard´e dans un fichier appel´ abb.m. Un contrˆle du e e o nombre d’arguments d’entr´e est effectu´ grˆce ` la variable nargin. Cette fonction e e a a indique le nombre d’arguments d’entr´e pr´sents ` l’appel de la fonction abb. Si par e e a exemple les valeurs des deux premiers arguments entr´e sont donn´es, les variables e e epsilon et maxiter sont initialis´es ` leur valeurs par d´faut. Supposons que l’on e a e veuille tester la m´thode sur la fonction e x ∈ Rn → (ex1 − 1, . . . , exn − 1). 26

Il faut d’abord cr´er une nouvelle fonction Matlab qui va calculer les valeurs de la e fonction d´finie ci-dessus. e
function g = expon(x) %EXPON Fonction test if isnumeric(x), g = exp(x)-1; else error(’Argument non numerique’), end

Supposons que l’on fasse un essai avec n = 10, un point de d´part x1 choisi au e −10 × g(x ) . hasard (dans un voisinage de 0) et une pr´cision de 10 e 1 >> x = rand(1,10); x = abb(@expon,x,1e-10*norm(expon(x))) Le passage de la fonction comme argument d’entr´e de abb se fait en pr´fixant le nom e e de la fonction expon avec le caract`re @. Dans la fonction abb, l’appel de expon se fait e grˆce ` la fonction feval. L’instruction feval(fonc,x) est ´quivalente ` l’instruction a a e a expon(x). Supposons maintenant que l’on veuille faire un test avec la fonction x ∈ Rn → (x1 , 2x2 , . . . , nxn ). On cr´e une nouvelle fonction, appel´e prodn.m. e e
function g = prodn(x) %PRODN Fonction test if isnumeric(x), [n,m] = size(x); if n==1 g = (1:m).*x; elseif m==1 g = (1:n)’.*x; else error(’L’’argument n’’est pas un vecteur’) end else error(’Argument non numerique’) end

Le test se fait comme pr´c´demment : e e >> x = rand(1,10); x = abb(@prodn,x,1e-10*norm(prodn(x)))

27

10.3

Exercices

Exercice 21 On consid`re la fonction Matlab suivante : e
function s = fonc(p,a) %FONC % Entree : p = vecteur % a = matrice % Sortie : s = matrice de dimension size(a) s = p(1)*ones(size(a)); for k = 2:length(p) s = s.*a+p(k); end

1. Cr´er cette fonction. e 2. Quel est le r´sultat de l’appel fonc([1,-4,3],5) ? Expliquer. e 3. Mˆme question avec l’instruction fonc([1,-4,3],[0,1 ;2,3]). e 4. Sachant que p repr´sente le vecteur des coefficients d’un polynˆme, que calcule la e o fonction fonc et quel est l’algorithme utilis´ ? e Exercice 22 On consid`re l’´quation non lin´aire e e e g(x) = 0,
∂gi o` g : Rn → Rn est une fonction diff´rentiable, dont la jacobienne g (x) := ( ∂xj )i,j=1...n u e est suppos´e inversible dans un voisinage de la solution. La m´thode de Newton est une e e m´thode it´rative qui g´n`re une suite de vecteurs {xk } avec la r´currence e e e e e

xk+1 = xk − (g (xk ))−1 g(xk ). Ecrire une fonction Matlab similaire ` la fonction abb en utilisant l’algorithme de a Newton. Comparer les m´thodes de Barzilai-Borwein et de Newton en comptant le e nombre d’it´rations pour chaque exemple expon et prodn. e

11

Graphiques

Matlab poss`de un vaste ensemble de fonctionnalit´s graphiques. Nous ne pr´sentee e e rons seulement que quelques principes de base qui serviront ` visualiser courbes et a surfaces. Que ce soit pour tracer le graphe d’une fonction dans le plan ou dans l’espace, la technique peut se d´composer en trois temps. e 1. Discr´tiser le domaine de repr´sentation. e e 2. Evaluer la fonction en chaque point de ce domaine discr´tis´. e e 3. Ex´cuter l’instruction graphique avec les donn´es pr´c´dentes. e e e e

28

11.1

Graphiques 2d

La fonction plot permet de tracer des graphes de fonctions en deux dimensions. Prenons un exemple avec la fonction x → x sin(x). n = 5; x = -n*pi:2*n*pi/200:n*pi; y = x.*sin(x); plot(x,y) Noter l’utilisation de l’op´rateur .* pour ´valuer la fonction en chaque point de l’ine e tervalle discr´tis´. L’instruction plot(x,y) dessine une courbe passant par les points e e (x(i),y(i)). Les vecteurs x et y doivent avoir la mˆme longueur. On peut ajouter des e l´gendes sur le graphique. e title(’Courbe de la fonction y = x sin(x)’) xlabel([’x = -’,num2str(n),’\pi:’,num2str(n),’\pi’]) ylabel(’y’) Le r´sultat est sur la figure 7. e
Courbe de la fonction y = x sin(x) 15

10

5

0

y

−5

−10

−15 −20

−15

−10

−5

0 x = −5π:5π

5

10

15

20

Fig. 7 – Graphe de x → x sin(x). On peut dessiner plusieurs courbes sur un mˆme graphique. e figure(2) n = 5; x = -n*pi:2*n*pi/200:n*pi; y = x .* sin(x); plot(x,y,x,x,x,-x) legend(’y = x*sin(x)’,’y = x’,’y = -x’) L’instruction figure(2) ouvre une deuxi`me fenˆtre graphique. Le r´sultat est sur la e e e figure 8. 29

20 y = x*sin(x) y=x y = −x

15

10

5

0

−5

−10

−15

−20 −20

−15

−10

−5

0

5

10

15

20

Fig. 8 – Graphes de x → x sin(x), x → x et x → −x. Une nouvelle instruction graphique va en principe effacer le graphique courant et le remplacer par un nouveau trac´. L’instruction hold on permet d’ajouter un ou plue sieurs trac´s ` un graphique d´j` existant. Les trac´s sont ajout´s jusqu’au retour e a ea e e du mode par d´faut avec hold off. Supposons qu’on veuille visualiser les z´ros de la e e courbe sur le premier graphique. figure(1) hold on plot(-n*pi:pi:n*pi,zeros(1,2*n+1),’or’) hold off grid L’instruction figure(1) permet de choisir la premi`re fenˆtre graphique comme fenˆtre e e e courante. On peut choisir des styles vari´s pour r´aliser les trac´s, ici ce sont des ronds e e e rouges (voir la figure 9). Une grille est ajout´e avec l’instruction grid. e

11.2

Graphiques 3d

Pour tracer le graphe d’une fonction z = f (x, y) il faut d’abord g´n´rer une grille e e de points, ´valuer la fonction en chaque point, puis tracer le graphe. e x = -1.5:.1:1.5; y = x; [X,Y] = meshgrid(x,y); Z = sin(3*X.^2+2*Y.^2)./(X.^2+Y.^2+eps); mesh(Z) title(’Cowboy Hat’) Le trac´ est en figure 10. La fonction meshgrid g´n`re une grille de points repr´sent´e e e e e e par les matrices X et Y. La matrice X poss`de length(y) lignes, chaque ligne est une e 30

Courbe de la fonction y = x sin(x) 15

10

5

0

y

−5

−10

−15 −20

−15

−10

−5

0 x = −5π:5π

5

10

15

20

Fig. 9 – Graphes de x → x sin(x) et z´ros de la fonction. e copie de x. La matrice Y poss`de length(x) colonnes, chaque colonne est une copie de e y. Un couple (X(i),Y(i)) rep`re ainsi un point de la grille. Pour ´valuer la fonction e e sur la grille, on utilise les op´rateurs ´l´ment par ´l´ment. Le trac´ d’une surface peut e ee ee e se faire sous des formes diverses et vari´es (voir la figure 11). e

11.3

Exercices

Exercice 23 Dessiner le nuage de points (xi , yi )i=1...n de l’exercice 6 et la droite d’ajustement lin´aire. e Exercice 24 On consid`re la fonction f : R2 → R3 , d´finie par e e f (x, y) = (x2 , −y 2 , sin(xy)). Dessiner la surface de R3 , image du rectangle [0, 5] × [−1.5, 1.5] par la fonction f .

31

Cowboy Hat

3 2.5 2 1.5 1 0.5 0 −0.5 −1 35 30 25 20 15 10 5 0 0 10 5 15 25 20 30 35

Fig. 10 – f (x, y) =

sin(3x2 +2y 2 ) x2 +y 2

surf

surfl

4 2 0 −2 40 20 0 0 40 20

4 2 0 −2 40 20 0 0 40 20

contour 30 25 20 15 10 5 5 10 15 20 25 30 4 2 0 −2 40 20 0

surfc

40 20 0

Fig. 11 – subplot

32

12

R´f´rences ee
Cette section regroupe une partie des commandes et fonctions de Matlab.

Commandes g´n´rales e e
demo help info lookfor path type what which Aides sur les commandes et fonctions Programme de d´monstration e Aide en ligne Informations sur Matlab et The MatWorks Recherche par mot cl´ dans les textes d’aide en ligne e Contrˆle du chemin de recherche des commandes o Affiche le contenu d’un fichier M Liste des fichiers M, MAT et MEX du r´pertoire courant e Localise fonctions et fichiers Variables et espace de travail Efface variables et fonctions de l’espace de travail Affiche texte et matrice Longueur d’un vecteur Charge le contenu de variables sauvegard´es sur disque e D´fragmente la m´moire e e Sauve le contenu de variables sur disque Dimensions d’une matrice Affiche la liste des variables de l’espace de travail Identique ` who avec plus de d´tails a e ` Commandes systeme Change de r´pertoire e D´truit un fichier e Sauvegarde la session en cours dans un fichier texte Affiche le contenu du r´pertoire courant e Retourne la valeur d’une variable d’environement Ex´cute une commande syst`me et retourne le r´sultat e e e Ex´cute une commande syst`me e e ˆ ˆ Controle de la fenetre des commandes Efface la fenˆtre des commandes e Renvoie les commandes d’un fichier M Contrˆle le format d’affichage o Place le curseur en haut de la fenˆtre des commandes e Affichage page par page dans la fenˆtre des commandes e

clear disp length load pack save size who whos

cd delete diary dir getenv unix !

clc echo format home more

33

exit matlabrc quit

´ Demarrer et quitter Matlab Quitte Matlab Script de d´marrage e Ex´cute le script finish.m et quitte Matlab e

Op´rateurs et caract`res sp´ciaux e e e
+ * .* . kron \ .\ / ./ : ( ) [ ] . .. ... ,; % ! ’ .’ = == < > & | ∼ xor ´ ` ´ Operateurs et caracteres speciaux Plus Moins Produit Produit ´l´ment par ´l´ment ee ee Puissance de matrice Puissance ´l´ment par ´l´ment ee ee Produit tensoriel de Kronecker Backslash ou division ` gauche a Division ` gauche ´l´ment par ´l´ment a ee ee Slash ou division ` droite a Division ` droite ´l´ment par ´l´ment a ee ee Indices ou g´n´ration de vecteur e e Parenth`ses, arguments d’entr´e de fonction e e Crochets, arguments de sortie de fonction Point d´cimal e R´pertoire parent e Continue l’instruction sur la ligne suivante S´parateurs e Commentaires Commande syst`me e Transposition (complexe conjugu´), chaine de caract`re e e Transposition non complexe Affectation Egalit´ e Op´rateurs relationnels e ET logique OU logique NON logique OU EXCLUSIF logique

34

all any exist find isempty isinf isnan issparse isstr

Fonctions logiques Vrai si tous les ´l´ments d’un vecteur sont non nuls ee Vrai si au moins un ´l´ment d’un vecteur est non nul ee V´rifie si une variable ou une fonction existe e Retourne les indices des ´l´lements non nuls ee Vrai pour matrice vide Vrai pour ´l´ment infini ee Vrai pour NaN (Not-a-Number) Vrai pour matrice creuse Vrai pour chaine de caract`re e

Programmation
eval feval function global narchk Fonctions logiques Ex´cute une chaine de caract`res comme instruction e e Appel de function Cr´e une nouvelle fonction e D´finition d’une variable globale e Valide le nombre d’arguments d’entr´e e ˆ Instructions de controle Termine une boucle sinon, utilis´ avec if e sinon si, utilis´ avec if e Termine for, if et while Retourne un message d’erreur et termine une fonction R´p´tition e e Instruction conditionnelle Retour ` la fonction appelante a Boucle tant que Instructions interactives Attente d’une entr´e au clavier e Donne la main ` l’utilisateur juqu’` un return a a Cr´e un menu e Attente de r´ponse e

break else elseif end error for if return while

input keyboard menu pause

35

Cr´ation de matrice e
eye linspace logspace meshgrid ones rand randn zeros Matrices usuelles Matrice identit´ e G´n`re des vecteurs espac´s arithm´tiquement e e e e G´n`re des vecteur espac´s logarithmiquement e e e G´n`re une grille pour les graphes en 3D e e Matrice de 1 G´n´rateur al´atoire selon une loi uniforme e e e G´n´rateur al´atoire selon une loi normale e e e Matrice de 0 ´ ´ Variables et constantes predefinies Variable d’affectation par d´faut e Type d’ordinateur et de syst`me e Epsilon machine Unit´s imaginaires e Infini Not-a-number Nombre d’arguments d’entr´e d’une fonction e Nombre d’arguments de sortie 3.14159265358979 Plus grand nombre flottant Plus petit nombre flottant Horloges Date et heure sous forme de vecteur Temps CPU La date d’aujourd’hui Mesure un intervalle de temps Chronom`tre e Manipulation de matrice Cr´e ou extrait une matrice diagonale e Permutte les colonnes d’une matrice Permutte les lignes d’une matrice Modifie la taille d’une matrice Rotation de 90◦ dans le sens trigonom´trique e Extrait une matrice triangualaire inf´rieure e Extrait une matrice triangualaire sup´rieure e

ans computer eps i, j inf NaN nargin nargout pi realmax realmin

clock cputime date etime tic, toc

diag fliplr flipud reshape rot90 tril triu

36

compan hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson

´ Matrices speciales Matrice compagnon Matrice de Hadamard Matrice de Hankel Matrice de Hilbert Inverse d’une matrice de Hilbert Carr´ magique e Matrice de Pascal Matrice test pour le calcul de valeurs propres matrice de Toeplitz matrice de Vandermonde Matrice test pour le calcul de valeurs propres

Fonctions ´l´mentaires ee
abs acos acosh angle asin asinh atan atanh ceil conj cos cosh exp fix floor imag log log10 real rem round sign sinh sqrt tan tanh ´ ´ ´ Fonctions mathematiques elementaires Valeur absolue Cosinus inverse Cosinus hyperbolique inverse Argument Sinus inverse Sinus hyperbolique inverse Tangente inverse Tangente hyperbolique inverse Plafond Conjugu´ e Cosinus Cosinus hyperbolique Exponentielle Arrondi vers 0 Plancher Partie imaginaire Logarithme n´p´rien e e Logarithme d´cimal e Partie r´elle e Reste de la division euclidienne Arrondi vers l’entier le plus proche Signe Sinus hyperbolique Racine carr´e e Tangente Tangente hyperbolique

37

Analyse num´rique matricielle e
cond det norm null orth rank trace Analyse Conditionnement D´terminant e Norme Base orthonormale du noyau Base orthonormale de l’image Rang (= dimension de l’image) Somme des ´l´ments diagonaux ee ´ Equations lineaires Factorisation de Cholesky Inverse Moindres carr´s avec matrice de covariance donn´e e e Factorisation LU Moindres carr´s avec contrainte de positivit´ e e Pseudoinverse R´solution d’´quations lin´aires e e e Valeurs propres Valeurs propres et vecteurs propres Polynˆme caract´ristique o e

chol inv lscov lu nnls pinv \ /

eig poly

Analyse de donn´es e
cumprod cumsum max mean median min prod sort std sum trapz ´ ´ ´ Operations vectorielles elementaires Produits cumul´s des composantes e Sommes cumul´es des composantes e Plus grande composante Moyenne des composantes M´diane des composantes e Plus petite composante Produit des composantes Tri des composantes Ecart type des composantes Somme des composantes Int´gration num´rique, m´thode des trap`zes e e e e ´ ´ ´ Derivees approchees Approximation du Laplacien Diff´rences finies e Approximation du gradient

del2 diff gradient

38

corrcoef cov

´ Correlation Coefficients de corr´lation e Matrice de covariance

Polynˆmes o
conv deconv poly polyder polyfit polyval polyvalm residue roots ˆ Polynomes Produit de polynˆmes o Division de polynˆmes o D´finit un polynˆme ` partir des racines e o a Polynˆme d´riv´ o e e Interpolation polynomiale Valeur d’un polynˆme o Valeur d’un polynˆme avec argument matriciel o D´composition de fraction rationnelle e Racines d’un polynˆme o

M´thodes num´riques e e
fmin fmins fplot fzero ode43 ode45 quad quad8 ´ ´ Methodes numeriques Minimise une fonction d’une variable Minimise une fonction de plusieurs variables Graphe de fonction Z´ro d’une fonction d’une variable e Int´gration e.d.o. e Int´gration e.d.o., m´thodes d’ordre sup´rieur e e e Int´gration num´rique e e Int´gration num´rique, m´thodes d’ordre sup´rieur e e e e

Chaines de caract`res e
abs eval isstr setstr str2mat ´ ´ Commandes generales Convertit une chaine en une valeur num´rique e Ex´cute une chaine de caract`res comme instruction e e Vrai pour une chaine de caract`res e Convertit une valeur num´rique en chaine de caract`res e e Cr´e des matrices de chaines de caract`res e e Comparaisons Conversion en minuscules Comparaison de chaines de caract`res e Conversion en majuscules

lower strcmp upper

39

int2str num2str sprintf sscanf str2num

Conversions Entier → Chaine Valeur num´rique → Chaine e Ecriture format´e e Lecture format´e e Chaine → Valeur num´rique e

Fichiers
fclose fopen Ouverture et fermeture de fichier Ferme un fichier Ouvre un fichier ´ ´ Entree-sortie non formatees Lecture de donn´es binaires dans un fichier e Ecriture de donn´es binaires dans un fichier e ´ ´ Entree-sortie formatees Lecture de ligne, pointeur en fin de ligne Lecture de ligne, pointeur en d´but de ligne e Ecriture de donn´es format´es e e Lecture de donn´es format´es e e Position du pointeur de fichier Nature d’une erreur d’entr´e-sortie e Pointeur en d´but de fichier e Positionne le pointeur Renvoie la position du pointeur ´ Lecture et ecriture de chaine Ecriture de donn´es format´es en chaine de caract`res e e e Lecture de chaine de caract`res selon un format e

fread fwrite

fgetl fgets fprintf fscanf

ferror frewind fseek ftell

sprintf sscanf

40

Graphiques
bar fplot grid gtext hist plot polar stairs text title xlabel ylabel 2D Diagramme en barres Graphe de fonction Quadrillage Placement de texte ` la souris a Histogramme Graphe 2D Graphe en coordonn´es polaires e Graphe en escalier Placement de texte Titre de graphique L´gende axe horizontal e L´gende axe vertical e 3D Lignes de niveau Quadrillage Placement de texte ` la souris a Graphe 3D Graphe 3D avec effet d’ombre Placement de texte Titre de graphique L´gende x e L´gende y e L´gende z e Commandes diverses Cr´ation d’axes e Contrˆle des axes de coordonn´es o e Efface la figure courante Ferme une fenˆtre graphique e Ouvre une nouvelle fenˆtre graphique e Renvoie la position de la souris sur un graphique Plusieurs figures dans un mˆme fenˆtre e e

contour grid gtext mesh surf text title xlabel ylabel zlabel

axes axis clf close figure ginput subplot

41

Sign up to vote on this title
UsefulNot useful