Vous êtes sur la page 1sur 54

Recueil d'exercices (avec corrigs)

Mthodes numriques

Manfred Gilli

Dpartement d'conomtrie Universit de Genve Dcembre 2003

M. Gilli

Mthodes numriques  Recueil d'exercices

Table des matires


1 Introduction
1.1 sys-expl01 . . . . . . . . . . . . . . . . . . . . . mlab00 . . . . mlab01a . . . mlab01c . . . mlab01b . . . mlab01d . . . mlab01e . . . mlab16 . . . . MatMult . . . mlab15 . . . . mlab02 . . . . mlab02a . . . mlab02b . . . mlab02c . . . mlab02d . . . prog00 . . . . prog07 . . . . prog08 . . . . prog09 . . . . evalexp . . . Horner . . . . LotkaVolterra BreakEven . . BreakEven2 . Determinant . DerivNum . . Bracketing . . fact . . . . . . MaxMin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 Factorisations 4 4
4 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 8.1 8.2 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8

2 Programmation
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 4.1 5.1 5.2 5.3 5.4 5.5 5.6 5.7 6.1 6.2 6.3 6.4 6.5

4 5 5 5 5 5 5 6 6 6 6 7 7 7 8 8 8 8 9 9 9 10 10 10 11 11 11 11

complex1 . . TriLinv . . . rsl09 . . . . . rsl09b . . . . GaussJordan Chol0 . . . . Chol1 . . . . stosim . . . . givens00 . . . svdprox . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

19

19 20 20 20 21 21 21 21 21 22 22 23

8 Systmes non-linaires

JacNum . . . . . . . . . . . . . . . . . . . . . . rsnl01 . . . . . . . . . . . . . . . . . . . . . . . mc01 . . . mc02 . . . mc-eqn00 lauchli3 . lauchli . . lauchli2 . MCnl01 . mcnl-gn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

9 Moindes carrs

23

23 23 23 23 24 24 24 25 25 26 26 28 29 30 30 31 31 31 31 32

10 Option pricing

3 Prcision nie et stabilit numrique


apf00 . . . . . . nstab01 . . . . nstab02 . . . . nstab03 . . . . nstab06 . . . . nstab07 . . . . nstab08 . . . . ApproxNumCos

12

12 12 12 12 13 13 13 13 13

10.1 prog09 . . . . . . 10.2 BSplot . . . . . . 10.3 FiniteDiMethod 10.4 AsianOpt . . . . 10.5 BarrierOpt . . . 10.6 OptionPricing00 10.7 mnf-cc1 . . . . . 10.8 mnf-cc2 . . . . . 10.9 mnf-cc3 . . . . . 10.10compare-FDM . 10.11FDMCiba . . . . 10.12MCBasketPricing 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 simul00 simul01 VaMv . MCpi . RandU . Moca-00 GPDex MCVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

11 Simulation

32

4 Complexit des algorithmes

Strassen . . . . . . . . . . . . . . . . . . . . . . fzero00 . bissect . Newton0 USA . . racine . FPI00 . FPI01 . mat-triu rsl06 . . rsl01c . rslmi01 . Obstacle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

5 Recherche des zeros d'une fonction

14

14 14 15 15 16 17 17

32 33 33 34 34 34 35 36 36 37 38 38 38 38 38 39 39 39

12 Optimisation

12.1 PL00 . . . . . . . . . . . . . . . . . . . . . . . . 12.2 ARML . . . . . . . . . . . . . . . . . . . . . . . 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 graph00 . kron-0 . . kron-1 . . Maple-00 Maple-01 Maple-02 Maple-03 Maple-04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

13 A classer

38

6 Systmes linaires
. . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

18

18 18 18 18 19

M. Gilli

Mthodes numriques  Recueil d'exercices

13.9 mlab-xxa . . . 13.10mlab04 . . . . . 13.11mlab05 . . . . . 13.12mlab07 . . . . . 13.13mlab07b . . . . 13.14mlab08 . . . . . 13.15mlab09 . . . . . 13.16mlab10 . . . . . 13.17mlab10a . . . . 13.18mlab12 . . . . . 13.19mlab13 . . . . . 13.20mlab14 . . . . . 13.21Mlab-intro00 . 13.22Mlab-intro01 . 13.23nlp00 . . . . . . 13.24ode-ex1 . . . . 13.25Poisson . . . . 13.26prog01 . . . . . 13.27prog02 . . . . . 13.28prog03 . . . . . 13.29prog05 . . . . . 13.30prog06 . . . . . 13.31prog06-b . . . . 13.32prog07 . . . . . 13.33prog08 . . . . . 13.34ras . . . . . . . 13.35Recurrence . . 13.36rsl00 . . . . . . 13.37rsl01b . . . . . 13.38rsl01 . . . . . . 13.39rsl02 . . . . . . 13.40rsl03 . . . . . . 13.41rsl05 . . . . . . 13.42rsl07 . . . . . . 13.43rsl10 . . . . . . 13.44rsl11 . . . . . . 13.45rsl12 . . . . . . 13.46rsl13 . . . . . . 13.47rsl14 . . . . . . 13.48SprintModel . . 13.49SparseLinSys01 13.50Suites . . . . . 13.51svd-ex1 . . . . 13.52svd-ex2 . . . . 13.53vis-00 . . . . . 13.54xxx-00 . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

39 39 40 40 40 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 46 46 46 47 47 48 48 49 49 50 50 50 50 50 51 51 51 51 52 52 53 53 53 54

M. Gilli

Mthodes numriques  Recueil d'exercices

Index
Programmation Commandes lmentaires 2.4, 2.5, 2.6, 2.7, 2.9 Repetition, choix 13.32, 13.33, 2.19, 2.8 2.20, 2.21, 2.24 Graphisme 13.33, 10.1, 2.21, 2.22, 2.23 Oprateurs logiques 13.33 Fonctions 2.15, 10.1, 5.5 Algorithmes rcursifs 2.28, 4.1, 2.24 Calcul en prcision nie Virgule ottante 3.1 Stabilit numrique 3.2, 3.3, 3.4, 3.5, 3.6, 3.7 Complexit des algorithmes 4.1 Recherche des zeros d'une fonction Cas unidimensionnel 5.1, 5.6, 5.7 Resolution systmes linaires Systmes triangulaires 6.1, 6.2, ??, 10.3 Matrices creuses 13.49 Mthodes itratives 6.4, 6.5 Factorisations 7.5, 7.8, 7.9, 7.10, 7.1, 11.3 7.7 Resolution systmes non-linaires Mthode de Newton 8.2 Mthodes itratives 8.2 Moindres carrs 9.3 Optimisation Programmation linaire ?? Maximum de vraisemblance 12.2 Moindres carrs 12.2 Applications de la nance Valuation d'options 10.3, 10.4, 10.1, 10.5, 10.6, 10.12, 10.112 Simulation Variables discrtes 11.1, 7.8 Variables continues 11.3

1 Introduction
1.1 sys-expl01
An de se familiariser avec le systme opratif Windows et l'diteur de texte Bloc-notes on suggre d'exprimenter les commandes suivantes : 1. Crer un rpertoire oiec sur l'unit h:. 2. Copier le chier ex1.dat qui se trouve sur l'unit v: dans le rpertoire metri\oiec dans le rpertoire cre sous 1. 3. Vrier l'existence du chier ainsi copi. Quelle est sa taille en octets ? 4. Renommer le chier ex1.dat en ex1.txt. 5. A l'aide de l'diteur de texte Bloc-notes parcourir le texte du chier ex1.txt et quitter le chier sans le modier. 6. Crer un nouveau chier. Insrer votre nom en premire ligne suivi d'une ligne blanche puis du texte :  Calcul symbolique sur ordinateur avec Maple V. Introduire nouveau une ligne blanche. 7. Insrer le chier ex1.txt la n du chier courant. On procdera avec copier/coller entre deux fentres Blocnotes. 8. Corriger l'orthographe du mot mathmatiques du texte insr. 9. Dtruire, puis restituer des caractres, mots et lignes de votre choix dans le texte. 10. Localiser toutes les occurences de la chane de caractres  no. 11. Dplacer le deuxime paragraphe la n du texte. 12. Remplacer la chane de caractres  aussi capable du premier paragraphe (ligne 6) par l'expression  egalement en mesure. 13. Remplacer dans le texte le mot logiciel par le mot programme en utilisant les fonctions de recherche d'une chane de caractres.

2 Programmation
2.1 mlab00
Evaluer la prcision de calcul de Matlab. On rappelle que la prcision est dnie par la valeur de la plus petite dirence entre deux nombres que le programme est capable de dtecter. Le problme dit  3n + 1" de la thorie des nombres s'nonce comme : Choisir un entier positif. Si cet entier est pair on le divise par 2, sinon on le multiplie par 3 et on additionne 1. Appliquer au resultat le mme procd jusqu' ce que l'on obtienne 1. Question : Existe-t-il un entier positif pour lequel ce procd continue indniment ? Programmer le procd avec Matlab.

M. Gilli

Mthodes numriques  Recueil d'exercices

2.2 mlab01a
Exprimenter toutes les commandes MATLAB presentes au cours. Capter la sance de travail (essais et rsultats) dans un chier et le conserver.

la matrice de transition ; on obtient l'tat des parts de march aprs une priode x(1) , en eectuant le produit
x(1) = Ax(0) .

2.3 mlab01c
Le modle input-output de Leontief peut s'crire
x=Cx+d

En considrant le processus de transition stationnaire, c'est--dire A constante durant les priodes successives, exprimenter numriquement partir de combien de priodes le march sera en quilibre. (On ngligera les variations partir du troisime digit aprs la dcimale.) 2. Exprimenter numriquement l'volution la matrice An pour n = 1, 2, . . . entiers positifs croissants, si A vaut :

(1)

a) d)

o x (n 1) est le vecteur des productions des n secteurs de l'conomie, d (n 1) est le vecteur des demandes nales de chaque secteur et C (n n) est la matrice d'input-output donnant, par son lment gnrique cij , la proportion de biens du secteur i utiliss pour produire une unit des biens du secteur j. Lorsque C et d contiennent des valeurs non ngatives et que la somme de chaque colonne de C est infrieure ou gale un, le vecteur de production x solution de (1) existe et contient des lments non ngatifs. 1. Isoler x en l'exprimant en fonction de C , d et de la matrice identit. 2. Calculer le vecteur de production x pour une conomie trois secteurs dcrite par .2 .2 .0 40 C = .3 .1 .3 et d = 60 . .1 .0 .2 80 Utiliser l'oprateur \ de MATLAB. 3. On peut calculer (I C)1 par la formule
(I C)1 = I + C + C 2 + C 3 +

.6 .2 .9 0

.5 1.2 1.0 .9

b) e)

.6 .16 .99 0

.5 1.2 1.0 .99

c) f)

.6 .1 1.0 0

.5 1.2 1.0 1.0

2.5 mlab01d
Dire si les propositions suivantes sont vraies ou fausses. Donner un contre-exemple spcique lorsque la proposition est fausse. Rpondez en vous aidant de MATLAB. 1. Si la 1re et la 3me colonne de B sont les mmes, alors la 1re et la 3me colonne du produit A B sont aussi les mmes. 2. Si la 1re et la 3me ligne de B sont les mmes, alors la 1re et la 3me ligne de A B sont aussi les mmes. 3. Si la 1re et la 3me ligne de A sont les mmes, alors la 1re et la 3me ligne de A B sont aussi les mmes. 4. (A B)2 = A2 B 2 .

(2)

si C m 0 lorsque m . Cela signie que l'on peut approcher (I C)1 aussi prcisment qu'on le dsire par la formule (2) en prenant m susamment grand. (a) Soit Dm = I + C + + C m . Trouver une relation liant Dm+1 Dm qui ne fait pas intervenir C m+1 . (b) Grce la relation prcdente, proposer une procdure itrative pour calculer (I C)1 selon (2). (c) Vrier votre rponse avec MATLAB pour les donnes de la question 2.

2.6 mlab01e
Soient Amn et Bnp deux matrices quelconques. Dire si les propositions suivantes sont vraies ou fausses. Donner un contreexemple spcique lorsque la proposition est fausse. Rpondez en vous aidant de MATLAB. 1. Si la 1re et la 3me colonne de B sont les mmes, alors la 1re et la 3me colonne du produit A B sont aussi les mmes. 2. Si la 1re et la 3me ligne de B sont les mmes, alors la 1re et la 3me ligne de A B sont aussi les mmes.

2.4 mlab01b
Les problmes donns par la suite sont rsoudre l'aide du logiciel MATLAB. On conservera les rsultats dans un chier. 1. On considre le vecteur x(0) = [.2 .3 .5] , qui reprsente les parts de march de 3 entreprises. On admet que, pendant une priode unitaire donne, la part de march cde par l'entreprise j l'entreprise i est donne par le coecient aij . Soit A = aij .8 .2 .1 A = .1 .7 .3 .1 .1 .6

3. Si la 1re et la 3me ligne de A sont les mmes, alors la 1re et la 3me ligne de A B sont aussi les mmes. 4. (A B)2 = A2 B 2 .

2.7 mlab16
On note
1 u1 = 2 , 3 5 u2 = 2 , 1 1 u3 = 3 7

M. Gilli

Mthodes numriques  Recueil d'exercices

1. Dnir ces vecteurs sous Matlab. 2. Calculer u1 + u2 , u1 + 3u2 5u3 , u3 /5. 3. Calculer u1 norm.)
2,

2.10 mlab02
Les observations de trois variables y , x1 et x2 sont donnes dans la matrice Xo ci-aprs :
y x1 1 x2

u2

1,

u3

(Utilisez la fonction Matlab

2.8 MatMult
1. A l'aide d'une boucle for programmer le produit scalaire de deux vecteurs a Rn et b Rn
n

Xo =

0 NaN 2 1 4 2 6 1 1

2 0 1 1 2 1 0 0

0 2 1 0 NaN 1 3 1 0

s=
i=1

ai b i .

An d'estimer les paramtres du modle


y = o + 1 x1 + 2 x2 + u

Pour n = 5, gnrer les vecteurs a et b avec la commande rand et vrier votre rsultat en vous servant de la commande Matlab dot. 2. A l'aide de trois boucles for programmer le produit C = AB de deux matrices A Rnr et B Rrm
r

cij =
k=1

aik bkj .

Pour n = 10, m = 8 et r = 5 gnrer les matrices A et B avec la commande rand et vrier le rsultat de votre procdure.

2.9 mlab15
On considre la matrice tridiagonale d'ordre n dnie par
2 1 An = 1 2 .. . 1 .. . 1 1 2

il faut liminer les lignes de Xo qui contiennent des observations manquantes (NaN). D'autre part, on souponne la prsence d'observations aberrantes. On considrera une observation d'une variable z comme aberrante, si sa valeur zi n'est pas comprise dans l'intervalle [z 2z ; z + 2z ]. A l'aide de MATLAB : 1. Ecrire une procdure (chier .m) pour construire une nouvelle matrice X , partir de Xo , en purant toutes les lignes qui contiennent soit une observation manquante (NaN), soit une observation aberrante telle que dnie ci-dessus. 2. Ecrire une procdure pour estimer les paramtres d'un modle linaire quelconque y = X + u, par la mthode des moindres carrs ordinaires. Imprimer le vecteur des paramtres estims et la valeur des variables de Student qui lui sont associes.

2.11 mlab02a
Les observations de trois variables y , x1 et x2 sont donnes dans la matrice Xo ci-aprs :
y x1 1 x2

. 2 1

..

1. Que fait la squence d'instructions suivante ?

n S S A

= = = =

7; [eye(n) zeros(n,1)]; S(:, 2: n + 1); 2 * eye(n) - S - S'

Xo =

0 NaN 2 1 4 2 6 1 1

2 0 1 1 2 1 0 0

0 2 1 0 NaN 1 3 1 0

2. Mme question avec la squence d'instructions

An d'estimer les paramtres du modle


y = o + 1 x1 + 2 x2 + u

D = diag(ones(n,1)); S = diag(ones(n-1,1),1); A = 2 * D - S - S'


3. Utiliser une des procdures dcrites ci-dessus pour construire la matrice An pour n quelconque. Rsoudre ensuite un systme linaire Ax = b l'aide de l'oprateur \, o b est un vecteur colonne unitaire de dimension n. Mesurer le temps de calcul pour n = 100, 200, 400, 800 l'aide des commandes tic et toc.

il faut liminer les lignes de Xo qui contiennent des observations manquantes (NaN). D'autre part, on souponne la prsence d'observations aberrantes. On considrera une observation d'une variable z comme aberrante, si sa valeur zi n'est pas comprise dans l'intervalle [z 2z ; z + 2z ] avec z la moyenne et z l'cart type de la variable z . A l'aide de Matlab ecrire une procdure (chier .m) pour construire une nouvelle matrice X , partir de Xo , en purant toutes les lignes qui contiennent soit une observation manquante (NaN), soit une observation aberrante telle que dnie ci-dessus.

M. Gilli

Mthodes numriques  Recueil d'exercices

2.12 mlab02b
Les observations de trois variables y , x1 et x2 sont donnes dans la matrice X0 ci-aprs :
y x1 1 x2

1. Utiliser des fonction MATLAB telles que any et isnan an de trouver les lignes contenant au moins une observation manquante. Eliminer ces lignes de la matrice X0 . 2. Dans le but d'liminer les lignes ayant des lments considrs comme aberrants, on propose de suivre les tapes suivantes : (a) Calculer une matrice de mmes dimensions que X0 contenant les carts des observations par rapport la moyenne de leur colonne. (Indication : On peut utiliser d'une part la fonction mean sur X0 et d'autre part le vecteur [1 1 1] que l'on construit grce ones(n,1) o n est le nombre de lignes du vecteur. Lire le help concernant ces fonctions.) (b) Calculer une matrice 0-1 de mmes dimensions que X0 qui contient des 1 lorsque l'cart calcul au point prcdent est suprieur (en valeur absolue) deux fois l'cart-type de la colonne de X0 . (Indication : La fonction std de MATLAB calcule les cart-types. Consulter le help de std. Utiliser une comparaison de deux matrices an d'obtenir la matrice 0-1 voulue.) (c) Eliminer, similairement au point 1, les lignes contenant au moins un lment ayant un cart considr trop grand.

X0 =

0 NaN 2 1 4 2 6 1 1

2 0 1 1 2 1 0 0

0 2 1 0 NaN 1 3 1 0

An d'estimer les paramtres du modle


y = 0 + 1 x1 + 2 x2 + u

il faut liminer les lignes de X0 qui contiennent des observations manquantes (NaN). D'autre part, on souponne la prsence d'observations aberrantes. On considrera une observation d'une variable z comme aberrante, si sa valeur zi n'est pas comprise dans l'intervalle [z 2z ; z + 2z ] avec z la moyenne et z l'cart type de la variable z . Avev MATLAB ecrire une procdure (chier .m) pour construire une nouvelle matrice X , partir de X0 , en purant toutes les lignes qui contiennent soit une observation manquante (NaN), soit une observation aberrante telle que dnie ci-dessus. d'un modle linaire quelconque y = X + u, par la mthode des moindres carrs ordinaires et l'appliquer au cas ci-dessus. Imprimer le vecteur des paramtres estims et la valeur des variables de Student qui lui sont associes.

2.14 mlab02d

trois variables y , x1 et x2 sont donnes Facultatif : Ecrire une procdure pour estimer les paramtres Les observations deci-aprs : dans la matrice X0
NaN
X0 = y 0 x1 1 2 0 1 1 2 1 0 0 x2 0 2 1 0

2.13 mlab02c
Les observations de trois variables y , x1 et x2 sont donnes dans la matrice X0 ci-aprs :
y 0 x1 1 2 0 1 1 2 1 0 0 x2 0 2 1 0

2 1 4 2 9 1 1

NaN

1 4 1 0

An d'estimer les paramtres du modle


y = 0 + 1 x1 + 2 x2 +

NaN
X0 =

2 1 4 2 9 1 1

NaN
1 4 1 0

il faut liminer les lignes de X0 contenant des observations manquantes (NaN). D'autre part, on souponne la prsence d'observations aberrantes. On considrera qu'une observation d'une variable z est aberrante, lorsque sa valeur zi n'appartient pas l'intervalle [z 2z ; z + 2z ], o z dsigne la moyenne des observations de z et z l'cart-type de ces mmes observations. 1. Utiliser des fonctions MATLAB telles que find et isnan an de trouver les lignes contenant au moins une observation manquante. Eliminer ces lignes de la matrice X0 . 2. Dans le but d'liminer les lignes ayant des lments considrs comme aberrants, on propose de suivre les tapes suivantes : (a) Calculer une matrice de mmes dimensions que X0 contenant les carts des observations par rapport la moyenne de leur colonne.

An d'estimer les paramtres du modle


y = 0 + 1 x1 + 2 x2 +

il faut liminer les lignes de X0 contenant des observations manquantes (NaN). D'autre part, on souponne la prsence d'observations aberrantes. On considrera qu'une observation d'une variable z est aberrante, lorsque sa valeur zi n'appartient pas l'intervalle [z 2z ; z + 2z ], o z dsigne la moyenne des observations de z et z l'cart-type de ces mmes observations.

M. Gilli

Mthodes numriques  Recueil d'exercices

(Indication : On peut utiliser d'une part la fonction mean sur X0 et d'autre part le vecteur [1 1 1] que l'on construit grce l'instruction ones(n,1) o n est le nombre de lignes du vecteur. Lire le help concernant ces fonctions.) (b) Calculer une matrice 0-1 de mmes dimensions que X0 qui contient des 1 lorsque l'cart calcul au point prcdent est suprieur (en valeur absolue) deux fois l'cart-type de la colonne de X0 . (Indication : La fonction std de MATLAB calcule les cart-types. Consulter le help de std. Utiliser une comparaison de deux matrices an d'obtenir la matrice 0-1 voulue.) (c) Eliminer, similairement au point 1, les lignes contenant au moins un lment ayant un cart considr trop grand. 3. Facultatif : Ecrire une procdure pour estimer les paramtres d'un modle linaire quelconque y = X + u, par la mthode des moindres carrs ordinaires et l'appliquer au cas ci-dessus. Imprimer le vecteur des paramtres estims et les valeurs de la statistique de Student qui leurs sont associes.

produisent le vecteur p des indices des lments du vecteur x qui sont suprieurs 4. A l'aide d'une boucle for programmer une procdure qui construit le vecteur p. Vrier qu'elle fournit le mme rsultat que find.

2.17 prog08
Boucles for et vectorisation :  Crer une matrice A = [aij ] de dimension 10 10 o aij = sin(i) cos(j) l'aide de boucles for.  Comment peut-on obtenir le mme rsultat sans utiliser de boucle for ?  Avec la commande mesh produire un graphique de la surface z = sin(x) cos(y) pour x [1, 10] et y [1, 10]. Oprateurs logiques :  Crer un vecteur ligne x de longueur 7 dont les lments sont des nombres tirs au hazard de la distribution normale standard.  Trouver les lments de x qui sont suprieurs 1 ou infrieurs 0.2.  Trouver les lments de x qui sont suprieurs 0 et infrieurs 2.  Quelle est la position des lments supriurs 3 dans le vecteur x ? Graphisme : x Dessiner le graphe de la fonction f (x) = 1+x2 pour 5, 10, 30 et 100 valeurs quidistantes de x comprises dans l'intervalle [2, 2] en reproduisant la gure suivante.
Graphe de f(x) avec n = 5 points 0.6 0.4 0.2 y 0 0.2 y 0.6 0.4 0.2 0 0.2 0.4 0.6 1 0 x 1 2 0.8 2 1 0 x 1 2 Graphe de f(x) avec n = 10 points

2.15 prog00
Ecrire une fonction Matlab qui value la fonction suivante
y = cos(xx ) sin(ex ) .

(3)

On appellera cette fonction ex9f et elle comportera les arguments suivants : y = ex9f(x) Programmer cette fonction de sorte que y soit aussi valu si x est un vecteur. A l'aide de votre fonction, gnrer les valeurs de y qui correspondentaux valeurs de 0.5 x 2.5. Les valeurs de x (vecteur x) pourront tre gnres avec la commande linspace de Matlab. Faire un graphique de la fonction.

0.4 0.6 0.8 2

Graphe de f(x) avec n = 30 points 0.6 0.4 0.2 y 0 0.2 0.4 0.6 y 0.6 0.4 0.2 0 0.2 0.4 0.6 1 0 x 1 2 0.8 2

Graphe de f(x) avec n = 100 points

2.16 prog07
1. On considre les instructions Matlab

0.8 2

0 x

x = ceil(8*rand(1,10)); p = (x > 4);


qui produisent le vecteur p dni comme
p(i) = 1 0 si x(i) > 4 . sinon

2.18 prog09
Programmer la fonction BS ci-aprs, qui calcule le prix d'un call Europen :
function call = BS(S,E,r,T,sigma) % Call Europen avec Black-Scholes % d1 = (log(S./E) + (r + sigma.^2 /2) .* T) ... ./ (sigma .* sqrt(T));

A l'aide d'une boucle for programmer une procdure qui construit le vecteur p. Vrier qu'elle fournit le mme rsultat que p = (x > 4). 2. Les instructions Matlab

x = ceil(8*rand(1,10)); p = find(x > 4);

M. Gilli

Mthodes numriques  Recueil d'exercices

d2 = d1 - sigma .* sqrt(T); Ee = E .* exp(-r .* T); call = S .* normcdf(d1) - Ee .* normcdf(d2);

rcrire une procdure pour valuer (4), dans laquelle les puissances sont calcules au moyen de la rcurrence (6). Avec cette procdure, quel est le nombre de multiplications ncessaires pour valuer un polynme de degr n. Considrons maintenant un polynme de degr 4 :
y = a0 + a1 x + a2 x2 + a3 x3 + a4 x4 .

1. Faire un graphique du prix du call en fonction de r, avec r [0.001, 0.10]. 2. Faire un graphique du prix du call en fonction de , avec [0.001, 0.50]. 3. Faire un graphique du prix du call en fonction de r et , avec r [0.001, 0.10] et [0.001, 0.50]. 4. Faire un graphique du prix et des courbes de niveau du call en fonction de r et , avec r [0.001, 0.10] et [0.001, 0.50].

Il est alors possible de regrouper les termes du polynme comme suit :


y = a0 + x(a1 + x(a2 + x(a3 + xa4 ))) .

(7)

L'valuation de l'expression (7) ne ncessite que n additions et n multiplications1 . 3. Programmer une procdure qui value un polynme de degr n selon la mthode de Horner illustre en (7). Vrier avec la fonction Matlab flops que la procdure ncessite 2n oprations lmentaires.

2.19 evalexp
On sait que l'exponentielle est dnie comme

ex =
n=0

xn n!

Ecrire un programme qui calcule ex suivant ce schma. Proposer un critre d'arrt pour la somme. Compter le nombre d'oprations lmentaires que ncessite votre algorithme en vous servant de la fonction Matlab flops. Exprimenter votre algorithme pour x = 13.7. (Il est possible de ne pas dpasser les 330 oprations lmentaires pour cet n exemple en choisissant comme critre d'arrt x < mach ). n!

2.21 LotkaVolterra
On considre une population de prdateurs P et une population de proies H . L'volution dans le temps de ces deux populations peut tre dcrite par les deux quations2
Ht+ Pt+
t t

= =

Ht + (1 Ht Pt Ht ) Pt + (2 Pt + Pt Ht )

t t

(8) (9)

2.20 Horner
On appelle polynme, ou fonction rationnelle entire, une fonction de la forme
y = a0 + a1 x + a2 x + + an x
2 n

ou 1 est le taux de croissance de la population des proies, 2 est le taux de dclin de la population des prdateurs et est un paramtre qui quantie l'interaction entre les deux populations. La variation des eectifs entre l'instant t et t+ t s'interprte :  Pour la population des proies : croissance de 1 Ht t et diminution de Pt Ht t du l'interaction des prdateurs ;  Pour la population des prdateurs : dclin de 2 Pt t (en l'absence de proies) et augmentation de Pt Ht t du la prsence des proies. Pour un eectif Ht0 et Pt0 au temps t0 donn on dsire calculer l'volution de ces deux populations pour une dure T . La variable t est discrtise en M valeurs quidistantes
ti = i
t,

(4)

o les ak , k = 0, 1, . . . , n sont des nombres constants donns, appels coecients, et o n est un entier positif que l'on appelle degr du polynme. En se servant du symbole de sommation, l'expression (4) peut aussi tre crite n
y=
k=0

ak xk .

(5)

i = 0, 1, . . . , M,

t=

T /M

1. Programmer une procdure qui value un polynme de degr n. Excuter la procdure pour n = 5, x = 2 et a= 3 4 2 5 6 5 . L'valuation de l'expression (4) ncessite n additions, n multiplications et n 1 calculs de puissance. 2. En tenant compte que les puissances successives de x peuvent tre obtenues par des multiplications
x2 = x x x3 = x2 x x4 = x3 x . . . x = x
n n1

Pour la programmation on fera correspondre la valeur de Pti l'lment P(i) du vecteur P de longueur M +1. Comme Matlab ne permet pas que l'indice d'un vecteur prenne la valeur zro on initialise une variable f7 = 1 et on dni un indice rlatif

P(f7+i)
et ainsi l'indice i pourra prende les M + 1 valeurs i = 0, 1, . . . , M . 1. Avec Matlab programmer la procdure (squiss ci-aprs) qui calcule les M valeurs Pti , Hti , i = 1, 2, . . . , M . Pour l'initialisation on utilisera les valeurs suivantes : 1 = 0.03, 2 = 0.30, = 0.000 3, T = 100, M = 1 000, Pt0 = 100 et Ht0 = 500.
1 Cette faon d'valuer un polynme est due Horner. 2 Il s'agit d'une version discrte du modle de Lotka-Volterra.

(6)

M. Gilli

Mthodes numriques  Recueil d'exercices

10

1: 2: 3: 4: 5: 6: 7: 8:

Initialiser Initialiser Initialiser Calculer

les paramtres 1 , 2 et Pt0 et Ht0 T et M


t=

2.23 BreakEven2
La fonction de cot total d'une entreprise, pour la production d'un bien x est donn par l'quation
f (x) = 200 + 210 log(x2 ) + (x + 4)0.9 + x 40
5

pour i = 0 M 1 faire nfaire

T /M

Calculer Hti+1 en utilisant l'quation (8) Calculer Pti+1 en utilisant l'quation (9)

2. Dans un mme graphique traer l'volution de l'eectif des deux populations. Excuter le graphique suivant les spcications ci-aprs :  temps en absisse et eectifs en ordonne ;  courbe eectif des proies en couleur verte ;  courbe eectif des prdateurs en couleur rouge ;  lgende expliquant les courbes traces ;  titre comportant le texte Evolution des eectifs. 3. Traer le diagramme de phase, c'est--dire le graphique des couples (Pti ,Hti ), i = 0, 1, . . . , M . Marquer le premier point avec le symbole et le dernier avec le symbole . Anoter les axes et le graphique. 4. Prsenter la procdure programm au point 1 sous la forme d'une fonction

le prix de vente p pour une unit de x est de 50 units montaires et la recette totale est dnie comme
g(x) = p x

d'o on dduit la fonction prot


h(x) = g(x) f (x) .

[P,H] = LotkaVolterra(P0,H0)
ou les arguments P0 et H0 reprsentent les valeurs initiales et P et H les trajectoires calcules. 5. Au moyen d'une boucle calculer les trajectoires qui correspondnet aux trois couples de valeurs initiales

P0 = 100; P0 = 100; P0 = 100;

H0 = 500; H0 = 1000; H0 = 1500;

et traer dans un graphique les trois paires de courbes d'eectifs et dans un autre graphique les trois diagrammes de phase. Commenter.

2.22 BreakEven
Le cot de production total pour un bien x est donn par l'quation
f (x) = 1000 + 350 log(x) + (x 5)
1.15

1. Chercher les niveaux de production x1 et x2 pour lesquels la recette galise les cots. Il s'agit de chercher les valeurs de x pour lesquelles h(x) = 0. (a) Dans un premier temps vous pouvez identier les intervalles qui contiennent un zero en faisant un graphique de la fonction (Indication : Produire le graphique pour x [4, 300]). Ensuite utiliser la mthode de la bissection avec une tolrance tol = 106 . (b) Une autre demarche consiste determiner les intervalles qui contiennent un zero avec la mthode dite bracketing et d'appliquer ensuite la mthode de la bissection. (Indication : Pour la mthode de bracketing considerer 40 intervalles quidistants entre 4 et 300.) Comparer les rsultats obtenus en a) et b). 2. On dsire dterminer le niveau de production x pour lequel le prot est maximum. Avec Maple driver la fonction h(x). 3. En vous servant de h (x) obtenu avec Maple et en utilisant la mme mthode qu'au point 1(a), chercher avec Matlab la solution de h (x) = 0 et ainsi determiner le niveau de production x pour lequel la fonction de prot est maximise. Calculer le montant du prot maximum h(x ) ralis par l'entreprise. 4. Reprsenter dans un mme graphique la fonction de prot h(x) et les couples (x1 , h(x1 )), (x2 , h(x2 )) et (x , h(x )).

2.24 Determinant
Le determinant d'une matrice A d'ordre n peut s'crire comme
n

+ (0.05 x) ,

le prix de vente pour une unit de x est de 37.5 unites montaires ce qui dnit la recette totale comme
g(x) = 37.5 x

|A| =
j=1

(1)i+j aij |Aij |

(10)

d'o on dduit la fonction prot


h(x) = g(x) f (x) .

ou i est l'indice d'une ligne quelconque de A et Aij est la sousmatrice de A obtenue en supprimant la ligne i et la colonne j de A. A titre d'exemple considrons la matrice 1 2 3 A= 4 5 6 7 8 0 et dveloppons l'expression (10) pour i = 3 :
|A| = (1)3+1 7 2 5 3 +(1)3+2 8 6 1 4 3 +(1)3+3 0 6 1 4 2 5

1. Chercher le break-even point, c'est--dire le niveau de production pour lequel la recette galise les cots. (Indication : Il s'agit de chercher la valeur de x pour laquelle h(x) = 0). 2. On dsire dterminer le niveau de production pour lequel le prot est maximum. Avec Maple driver la fonction h(x). 3. En vous servant de h (x) obtenu avec Maple calculer avec Matlab la solution de h (x) = 0.

Pour l'application qui suit on construira la matrice A avec la procdure alatoire suivante

M. Gilli

Mthodes numriques  Recueil d'exercices

11

n = 3; A = fix(10*rand(n));
1. Avec Matlab programmer le calcul du dteminant en appliquant la formule (10). Pour le programme on suggre la structure suivante :

2.26 Bracketing
Avec Matlab raliser l'algorithme qui suit sous la forme d'une fonction

ab = bracketing(f,xmin,xmax,n)
ou ab est une matrice avec 2 colonnes contenant respectivement le debut et la n d'un intervalle susceptible de contenir un zero, et le nombre de lignes correspond au nombre d'intervalles identis. f est la fonction analyser, xmin et xmax dnissent le domaine de recherche et n est le nombre d'intervalles analyser.

Algorithm 1 (Calcul du dterminant)


1: 2: 3: 4: 5: 6: Initialiser i et n
D=0

pour j = 1 n faire nfaire

Denir la sousmatrice Aij

D = D + (1)i+j aij |Aij |

Pour le calcul de la sousmatrice Aij la ligne 4 de l'algorithme 1 on rappelle que les vecteur d'indices des lignes et des colonnes peuvent tres dnies comme

Algorithm 2 tant donn f (x), xmin , xmax et n l'algo-

lin = [1:i-1 i+1:n]; col = [1:j-1 j+1:n];


et la sousmatrice Aij s'obtient aprs avec la commande Aij = A(lin,col). Pour le calcul du dterminant de Aij la ligne 5 de l'algorithme on utilisera la commande Matlab det. 2. Gnrer une matrices d'ordre 3 et tester le programme (vrier le rsultat l'aide de la commande Matlab pour le calcul du dterminant). 3. Prsenter le programme labor au point 1 sous la forme d'une fonction Matlab

rithme identie les intervalles susceptibles de contenir des zeros. dx = (xmax xmin )/n a = xmin i=0 tant que i < n faire i=i+1 b = a + dx si sign(f (a)) = sign(f (b)) alors [a, b] peut contenir un zro, imprimer a et b

nsi

nfaire
Application : f (x) = cos(1/x2 ), x [0.3, 0.9] et n = 25.

a=b

D = Determinant(A)
Pour n = 3, 4, 5 gnrer alatoirement A et tester la fonction Determinant.

pour n = 3, 4, 5 faire

nfaire

Construire A D = Determinant(A) Vrier le rsultat

2.27 fact
Soit n! = 1 2 . . . n la notation de factorielle n. Il est immdiat que factorielle n peut tre dni comme

2.25 DerivNum
On considre la fonction
y = sin(x)

factorielle n = n factorielle (n 1) ce qui suggre que l'on peut calculer n! avec un algorithme rcursif. Avec MATLAB, crire une fonction rcursive r = fact(n) qui (10 calcule n!. points) (Rappel : Par convention on a 0! = 1).

(11)

et sa drive y = cos(x). On vrie que pour x = 1 on a y = 0.5403 . . .. crire un programme qui calcule une approximation numrique de la drive de (11) au point x = 1, en utilisant la dnition
y (1) = lim
h0

sin(1 + h) sin(1) . h

Calculer cette approximation pour h = 2i , i = 1, . . . , 52. Faire un graphique qui reprsente la valeur de l'approximation de la drive en fonction de log(h). Calculer, pour les mmes valeurs de h, une approximation de la drive par dirence centr et reporter le rsultat dans le mme graphique.

2.28 MaxMin
On considre le problme de la recherche du maximum et du minimum des lments d'un vecteur s. An de simplier le problme, on admet que le nombre d'lments du vecteur est une puissance de 2, c'est--dire qu'il peut s'exprimer sous la forme 2k avec k > 1. Ecrire, puis implmenter l'algorithme suivant :

M. Gilli

Mthodes numriques  Recueil d'exercices

12

Algorithm 3 Recherche des lments maximum et minimum d'un vecteur. Input : Vecteur s avec n elements, n = 2k , k > 1. Output : Elment maximum et lment minimum du vecteur s. Application rcursive de la procdure maxmin au vecteur s. Le rsultat est constitu par le couple (a, b) avec a l'lment maximum et b l'lment minimum du vecteur s.
1: (a, b) = maxmin(s) 2: si card(s) = 2 alors 3: a = max(s1 , s2 ) 4: b = min(s1 , s2 ) 5: sinon 6: partitionner s en s1 et s2 de mme cardinalit 7: (a1 , b1 ) = maxmin(s1 ) (a2 , b2 ) = maxmin(s2 ) 8: 9: a = max(a1 , a2 ) 10: b = min(b1 , b2 ) 11: nsi

formule suivante (one-pass algorithm) :


y = 2 1 n1
n 2 yi i=1

1 n

yi
i=1

Commenter le rsultat. 2. Calculer la moyenne y du vecteur y


y= 1 n
n

yi
i=1

puis eectuer la somme


n

e=
i=1

(yi y )

Application : Gnrer un vecteur s1 , s2 , . . . , s2k avec k = 8 et vrier le fonctionnement de l'algorithme.


Une recherche du maximum et du minimum par simple comparaison ncessite n 1 oprations de comparaison pour le maximum et ensuite n 2 oprations de comparaison pour le minimum, donc au total 2n 3 oprations de comparaison. Etablir la fonction C(n) qui donne le nombre de comparaisons eectues par l'algorithme 3. Quelle est la complexit de l'algorithme 3. Comparer la performance des deux approches. Vrier le resultat empiriquement.

Commenter e. 3. On sait que la transformation xi = yi d avec d constant, conduit un vecteur x de mme variance que y . Calculer une estimation de la variance de x par la mthode dnie sous 1 pour direntes valeurs de d. Commenter et donner un critre de choix pour d. 2 4. Une mthode alternative pour calculer y consiste calculer d'abord y , puis l'expression
1 n1
n

(yi y )2 .
i=1

Cette mthode est appele two-pass algorithm. Calculer y avec cette mthode. 2 Commenter les avantages et inconvnients de chacune de ces mthodes.

3.3 nstab02

3 Prcision nie et stabilit numrique


3.1 apf00
Soit F l'ensemble des nombres en virgule ottante que l'on peut representer avec des mots de 8 bits dont t = 4 bits sont reserves pour la mantisse. Donner :  le cardinal de F ,  les nombres m et M ,  la prcision machine eps  le nombre de digits signicatifs.

On considre le polynme p(x) = (x 1)6 . En dveloppant on peut crire ce mme polynme sous la forme
f (x) = x6 6x5 + 15x4 20x3 + 15x2 6x + 1

1. Avec Matlab valuer p(x) et f (x) pour x allant de .998 1.002 en choisissant des pas de .0001. 2. Faire un graphique de f (x) et p(x). Commenter.

3.4 nstab03
Soit la suite numrique u1 + u2 + . . . + un + . . . et sa somme partielle S n = u1 + u2 + . . . + un 1 avec le terme gnral ui = ( 3 )i . On peut alors crire la relation suivante : 1 2Sn Rn = =1 . un Pour n allant de 1 33 calculer un , Sn et Rn . On se servira de la rcurrence :
uo So un Sn = = = = 1 0 un1 Sn1 + un
1 3

3.2 nstab01
Avec Matlab gnrer un vecteur y contenant 8000 observations d'une variable alatoire normale. L'lment gnrique de y est dni comme : yi = zi + 108 o zi est un nombre alatoire tir d'une loi normale centre rduite. On choisira 15207 comme valeur initiale pour le gnrateur des nombres au hasard, en excutant la commande randn('seed',15207). 1. Calculer une estimation de la variance de y en utilisant la

Representer sur un mme graphique Rn , Sn et un . Commenter les rsultats.

M. Gilli

Mthodes numriques  Recueil d'exercices

13

3.5 nstab06
On dsire calculer les 37 premiers termes de la rcurrence
xi+2 = 13 5 xi+1 + xi 6 2 i = 1, 2, . . .

1. la condition de la matrice A, 2. la solution du systme Ax = b en format long, (12) 3. le nombre de digits non signicatifs (c'est--dire le nombre de chires qui dirent de la vraie solution donne). D'aprs ces rsultats, tablir quelle est la relation approximative qui existe entre la condition d'une matrice et le nombre de digits non signicatifs dans la solution calcule.

avec x1 = 30 et x2 = 25. On peut facilement vrier que (1) s'exprime galement comme
xi = 36 5 6
i

i = 1, 2, . . . .

(13)

Calculer avec MATLAB : a) la suite {xi }i=3,...,37 partir de l'expression (1) ; b) la suite {xi }i=1,...,37 partir de l'expression (2). Reprsenter les rsultats graphiquement et commenter. Facultatif : Montrer comment l'on obtient l'expression (2) partir de l'expression (1).

3.8 ApproxNumCos
On considre l'expression
n

cos(x)

(1)k
k=0

x2k (2k)!

(15)

qui pour n ni constitue une approximation de cos(x). 1. crire un script (il n'est pas ncessaire de le presenter sous forme de fonction) qui value l'expression (15). Proposer un critre pour le choix de n dans (15). Suggestion : On pourra arrter la sommation lorsque en arithmtique ottante on vrie Si+1 = Si o Si = i k x2k k=0 (1) (2k)! . Excuter la procdure pour x = 1.3, vrier le rsultat en utilisant la fonction Matlab cos, imprimer le nombre de ops (pour le comptage on utilisera la fonction flops et n le nombre de termes additionnes. Rappel : Avec Matlab on peut calculer n! avec la commande prod(1:n). 2. On peut remarquer que le rapport dans l'expression (15) peut tre dcompos comme suit :
x2k x2 x2 x2 =1 (2k)! 12 34 (2k 1) 2k

3.6 nstab07
On dsire calculer les puissances entires successives du nombre d'or = ( 5 1)/2. On peut facilement vrier que les puissances i , i > 0 satisfont la relation de rcurrence
i+1 = i1 i .

(14)

Ainsi, en connaissant les valeurs de 0 = 1 et de 1 = , on peut calculer les puissances suivantes de en utilisant la relation (14). Calculer la suite {i }i=2,3,...,20 avec MATLAB par (a) la relation de recurrence (14), (b) la relation i+1 = i . Reprsenter graphiquement les erreurs entre les deux mthodes.

(16)

Completer votre script avec une procdure qui tient x2k compte de l'expression (16) pour le calcul de (2k)! . Excuter, toujours pour x = 1.3, les deux procdures (celle du point 1. et la nouvelle) et comparer les rsultats ainsi que le nombre d'oprations lmentaires (flops). 3. Excuter les procdures pour x = 50. Que constat-t-on ? Commenter et expliquer les rsultats.

3.7 nstab08
Soit le systme 1 1 2 4+e linaire Ax = b suivant : 1 1 1 x1 2 3 4 x2 = 2 1 1 x3 5 4 5 x4
10 30 13 46 + e

4. On sait que cos(x) = cos( x/2 ) o x/2 reprsente le reste de la division entire. Vrier que les deux procdures fonctionnent correctement si l'on applique ce changement de variable.

On vrie que pour tout e = 0, x1 = 1, x2 = 2, x3 = 3 et x4 = 4 est la solution exacte de ce systme d'quations. Lorsque e = 0, le systme est singulier et possde une innit de solutions comprenant la solution x1 = 1, x2 = 2, x3 = 3, x4 = 4. Pour un problme bien conditionn, MATLAB produit des rsultats avec approximativement 15 digits signicatifs. Le but de cet exercice est d'illustrer la relation qui existe entre la condition d'une matrice A et la prcision de la solution x du systme Ax = b. A cette n, on posera e = 102(k1) et on calculera pour k = 1, 2, . . . , 8

4 Complexit des algorithmes


4.1 Strassen
On considre le produit matriciel C = AB avec A B nn .
nn

et

1. Quel est le nombre d'oprations lmentaires ncessaires pour eectuer ce produit. Justier la rponse partir d'une esquisse de l'algorithme .

M. Gilli

Mthodes numriques  Recueil d'exercices

14

En admettant que n est pair, on considre la partition suivante des matrices C , A et B


C11 C21 C12 C22
n n

A11 A21
n

A12 A22
n

B11 B21

B12 B22

(17)

Comme on l'a remarqu au point 2., la mthode de Strassen devient avantageuse lorsque les matrices dpassent une certaine taille. Ds lors, il convient d'arrter la procdure rcurrente lorsque le produit implique des sous-matrices de taille infrieure un certain seuil. 8. Explorer l'algorithme an de dcouvrir la valeur optimale partir de laquelle l'algorithme doit commuter au produit normal.

avec A11 2 2 et B11 2 2 . Si l'on considre le produit par blocs, on a Cij = Ai1 B1j +Ai2 B2j . On vrie alors aisment qu'en appliquant la multiplication par blocs, le calcul de C fait intervenir 8 multiplications de matrices et 4 additions de matrices. 2. Quel est le nombre d'oprations lmentaires pour eectuer le produit par blocs dni en (1). Existe-t-il un avantage recourir au produit par blocs ? Strassen3 a montr qu'il est possible d'eectuer le produit par bloc (1) en faisant intervenir seulement 7 produits et 18 additions de matrices en organisant les calculs comme suit :
P1 P2 P3 P4 P5 P6 P7 C11 C12 C21 C22 = = = = = = = = = = = (A11 + A22 )(B11 + B22 ) (A21 + A22 )B11 A11 (B12 B22 ) A22 (B21 B11 ) (A11 + A12 )B22 (A21 A11 )(B11 + B12 ) (A12 A22 )(B21 + B22 ) P1 + P4 P5 + P 7 P3 + P5 P2 + P4 P1 + P3 P2 + P 6

5 Recherche des zeros d'une fonction


5.1 fzero00
On dsire trouver la valeur de qui satisfait l'expression suivante
3 e
2

/4

es

/4

ds = 2(2 2 ) .

(18)

Ce problme est aussi appell recherche du zro d'une fonction. 1. Ecrire l'quation (18) sous la forme f () = 0 et construire une fonction Matlab qui value f (). On pourra structurer la fonction comme suit :

3. Combien d'oprations lmentaires ncessite la mthode de Strassen ? 4. A partir de quelle valeur de n la mthode de Strassen ncessite-t-elle moins d'oprations lmentaires que le produit dni en (1). (On accepte une solution obtenue partir d'un graphique). 5. Programmer avec MATLAB la mthode de Strassen sous la forme d'une fonction
C = strassen0(A, B)

function f = fzero00f(xi) 2 Dnir la fonction g(s) = es /4 avec inline (s peut tre un vecteur) 2 Calculer I = es /4 ds avec la fonction quad 2 Calculer f = 3 e /4 I 2(2 2 )
2. Faire un graphique de la fonction f pour des valeurs de [1, 2]. 3. Rechercher numriquement le zro de la fonction f dans ce mme intervalle (de prfrence utiliser l'algorithme de la bissection).

et vrier que le nombre d'oprations lmentaires pour la valeur de n trouve avant correspond au nombre d'oprations lmentaires pour le produit dni sous 1. On remarque que le calcul des matrices P1 P7 dans l'algorithme de Strassen fait intervenir un produit de matrices, lequel peut son tour tre valu moyennant l'algorithme de Strassen. Ainsi, il apparat que l'algorithme de Strassen a une structure rcurrente. 6. Programmer une version rcursive de l'algorithme de Strassen. On appellera cette fonction strassen. On lui donnera la structure suivante :

5.2 bissect
Zro d'une fonction dans R par bissection. Soit f : R R une fonction non linaire. Le problme considr est celui de trouver un point x dans un intervalle born tel que f (x ) = 0. Ce point x est appel zro de f. Par hypothse, nous nous restreindrons au cas o la fonction f change de signe en x et nous ne considrerons pas le cas o f est tangente l'axe horizontal. Un intervalle [a, b] recouvrant le point cherch x est appel intervalle d'incertitude et cet intervalle encadre x lorsque f (a)f (b) < 0, c'est--dire lorsque f change de signe dans [a, b]. Pour approcher x on se contente gnralement d'un intervalle d'incertitude susamment petit, par exemple |a b| < avec = 105 . Une mthode permettant de trouver une approximation numrique de cet intervalle (et donc de x ) est la mthode de la bissection. Cette mthode procde comme suit.

function C = strassen(A, B, nmin ) if size(A, 1) < nmin else end


C = AB

Appliquer l'algorithme de Strassen

7. Excuter l'algorithme pour quelques valeurs de n = 2d , d = 5, . . . , 7. Pourquoi a-t-on dni n comme une puissance de 2 ?
mer. Math. 13, 354356.
3 Strassen, V. (1969) : `Gaussian Elimination is not Optimal', Nu-

M. Gilli

Mthodes numriques  Recueil d'exercices

15

 On se donne un intervalle de dpart [a, b] tel que f (a)f (b) < 0 et une valeur pour .  On rpte les oprations suivantes tant que la condition |a b| < n'est pas satisfaite :  On value f en c = (a + b)/2.  Si f (c) a le mme signe que f (a), on remplace a par c.  Sinon, on remplace b par c (puisque alors b a le mme signe que c). Lorsque la condition est satisfaite, on possde un intervalle sufsamment petit qui encadre x . On dsire programmer l'aide de Matlab la mthode de la bissection. 1. Crer une fonction Matlab nomme f qui value
f : x cos(xx ) sin(ex ) .

Une autre mthode, trs utilise, est la mthode de Newton. Pour cette mthode, on ne donne pas un intervalle d'incertitude comme c'est le cas pour la mthode de la bissection, mais un point de dpart x0 dans un voisinage du zro x . Ensuite, on calcule avec un procd itratif une suite d'approximations {xk }k=1,2,... qui tend vers x . La gure qui suit illustre la mthode de Newton :

30

20

10

La gure 1 donne la reprsentation graphique de f dans l'intervalle [0.5, 2.5].


0

1.5 1 0.5 0 0.5 1 1.5 2 0.5

x2

x1

x0

1.5

2.5

1.5

2.5

Fig.

1  Graphe de la fonction cos(xx ) sin(ex ).

On arrte le processus lorsqu' une prcision xe est atteinte. Cette mthode ncessite en plus que la fonction dont on cherche les zros soit drivable et que sa drive soit continue. Formellement, la mthode se rsume : 1. Initialiser x0 , = 106 , k = 0 et conv = 0 2. Tant que conv est faux f 3. Calculer xk+1 = xk f (xk )) (xk Incrmenter le compteur k = k + 1 4. 5. Mettre jour conv (voir ci-dessous) 6. Fin La variable conv prend la valeur vrai (i.e. conv = 0) si |xk+1 xk | < , et la valeur faux (conv = 0) sinon. 1. Pour x [3, 4] faire un dessin de la fonction
f (x) = x3 + 3x2 3x 1 .

2. Crer un script-le nomm bissect.m qui implmente la mthode dcrite plus haut. 3. Excuter le script avec = 105 et direntes valeurs de dpart pour a et b, par exemple
a b

0.5 1.5

1.5 2.0

2.0 2.3

2.3 2.5

2. Programmer l'algorithme de Newton pour trouver les zros de la fonction propose (on passera la fonction comme argument).

Commenter les rsultats obtenus. 4. An de compter le nombre d'itrations excutes (i.e. le nombre de fois que la condition |a b| < n'est pas satisfaite), on introduit un compteur. Avant la boucle, on initialise une variable zro : iter=0. Puis, chaque passage dans la boucle on augmente la valeur de iter de 1 : iter=iter+1. On peut alors imprimer la valeur de iter avec celles de a et b la n du programme. En gardant l'intervalle de dpart x [0.5, 1.5], excuter le script pour diffrentes valeurs de , par exemple = 103 , 104 , 105 , 106 , 107 . Comment volue le nombre d'itrations eectues en fonction de ?

5.4 USA
On appelle point xe le vecteur x qui satisfait le systme d'quations g(x ) = x . Considrons la fonction g : R R (une seule quation et une seule variable) g(x) = ax bx2 qui est parfois utilise pour dcrire l'volution d'une population. Le paramtre a reprsente le taux de reproduction et le paramtre b le taux d'extinction de la population. 1. En choisissant a = b = 3.5 valuer g(x) pour x [0, 1]. Faire un graphique de g(x) et de la fonction y = x. L'intersection de g(x) avec y = x dnit le point xe de g(x). Relever sa valeur approximative sur le graphique. Avec la commande MATLAB hold on il est possible de tracer successivement des fonctions dans la mme fentre

5.3 Newton0
La recherche des zros d'une fonction peut s'eectuer au moyen de dirents algorithmes. Une possibilit est la mthode dite de la bissection.

M. Gilli

Mthodes numriques  Recueil d'exercices

16

graphique. Pour abandonner une fentre graphique et crer une nouvelle fentre, on prcdera la commande plot de la commande hold off. 2. On dsire maintenant tudier la fonction compose g(g(x)). Evaluer g(g(x)) avec a, b et x, dnie ci-dessus, avant et l'ajouter dans la fentre graphique cre prcdemment. Khilnani et Tse4 ont propos un algorithme, appel Updated Successive Approximation (USA), pour rsoudre numriquement le problme du point xe. Cet algorithme s'nonce ainsi : Dnir (critre de convergence)

Ecrire une fonction rcursive


g = compg(a, b, x, n)

qui eectue cette valuation. Les arguments a et b correspondent aux paramtres de la fonction g(x), x tant le vecteur pour lequel on dsire valuer la fonction et n reprsente le nombre de fois la fonction est compose. Complter la fentre graphique avec l'image de g(g(g(g(x)))).

5.5 racine
An de calculer numriquement la racine carre r d'un rel positif x, r = x, on considre la procdure itrative5
rk = 1 2 rk1 + x rk1 k = 1, 2, . . .

Dnir (paramtre de contraction, 0 < < 1)) Choisir x0 et x1 (valeurs initiales) Evaluer g0 = g(x0 ) et g1 = g(x1 ) Evaluer w0 = x0 g0 et w1 = x1 g1

o l'on peut choisir comme point de depart r0 = x. Dans les questions qui suivent on proposera direntes alternatives pour programmer le calcul numrique de cette approximation avec Matlab. 1. Programmer le pseudo-code6 ci-dessous et l'excuter pour x = 81. Initialiser x (pour l'exemple x = 81) Initialiser un vecteur r de dimension 1 10 Poser r1 = x x r2 = 1 r1 + r1 2
r3 =
1 2

si

w0 < w1 , alors

permuter x0 avec x1

finsi tant que


wk > , faire

wk = wk wk1 pk =
(xk xk1 ) wk wk wk

xk+1 = (1 pk )xk + pk gk

finfaire
x = xk

r2 +

x r2

2. Calculer l'erreur relative de l'approximation.7 Complter le code prcdant avec une instruction qui permet l'impression du rsultat et de l'erreur relative sous la forme :

3. Programmer l'algorithme USA avec MATLAB. Etant donn un vecteur v , on note v = v v la norme 2 du vecteur. Avec MATLAB on la calcule avec la commande norm(v). Notons que dans le cas o v est un scalaire norm(v) = abs(v). 4. Tester l'algorithme programm en cherchant le point xe de la fonction donne plus haut. On choisira 0.5 comme valeur de . On peut aussi envisager la recherche du point xe comme la recherche du zro d'une fonction. Soit
f (x) = 0

Racine carr de 81.00 = 21.49 (erreur relative = 1.39e+000)


3. Programmer la mme procdure en vous servant de l'instruction for.  Excuter le programme pour 7 itrations.  Faire un graphique des valeurs succesives ri , i = 1, . . . , 8. (voir gure de gauche)  Produire le graphique des erreurs relatives avec une chelle logarithmique. (voir gure de droite)
Erreur relative

avec

f (x) = g(x) x

100

10

cette transformation. 5. Appliquer la mthode de Newton pour rechercher le zro de cette fonction. Comparer et commenter les rsultats. 6. Chercher les points xes de g(g(x)) avec l'algorithme USA. 7. On considre n compositions de la fonction g(x)
g(g(g( g (x))))
n

50

10

10

0 0

4 6 iteration

10

20

4 6 iteration

4 Khilnani, A. et Tse, E. (1985) : A Fixed Point Algorithm with Economic Applications, Journal of Economic Dynamics and Control 9, 127-137.

respond pas exactement un langage de programmation particulier. Ainsi un tel code ne fait qu'expliciter la logique d'un programme et doit encore tre adapt aux rgles de syntaxe de Matlab, par exemple. 7 On rappelle que l'erreur relative de la ieme approximation est dnie comme | ri x |/ x.

5 Il s'agit de l'algorithme de Newton. 6 On appelle pseudo-code un programme dont la syntaxe ne cor-

M. Gilli

Mthodes numriques  Recueil d'exercices

17

4. On dsire poursuivre l'itration jusqu' ce que la dirence, en valeur absolue, de deux approximations successives soit infrieure une valeur donne. Programmer cette procdure en vous servant de l'instruction while. Excuter le code pour = 106 et x = 81. Indication : On attire votre attention sur le fait que dans ce cas il convient de ne pas stocker les valeurs successives des approximations (vecteur r). On ne conservera que deux valeurs successives dans deux scalaires r0 et r1 . L'itration peut alors se schmatiser comme :

10 8 6 4 2 0 2

tant que critre d'arrt pas satisfait faire nfaire


r0 = r1 r1 = 1 r0 + 2
x r0

5. Modier la procdure de sorte ce que l'on calcule au plus maxit approximations. Excuter le code pour maxit = 10. 6. Modier la procdure de sorte ce que les itrations soient arretes lorsque l'approximation est gale la valeur de la racine obtenue avec la fonction sqrt de Matlab. Imprimer le nombre d'iteration. 7. Presenter l'algorithme programmer sous le point 5) comme une fonction Matlab :

Fig.

2  Graphique de x3 exp(x) + cos(x) + 1.

dimensions x [1.5, 5] et y [2, 11] avec la commande axis. Sauvegarder le graphique dans un chier en format eps l'aide de la commande Matlab print -depsc FPI01.eps. 2. On envisage d'abord d'utiliser la mthode du point xe. Pour ce faire on dnit les deux fonctions d'itration
g1 g2 = = exp(x) cos(x) 1 log(x3 + cos(x) + 1)
1/3

r = myracine(x)
Note : La racine correspond au zero de la fonction f (r) = r2 x. On a f (r) = 2r. Cherchons le zero de la fonction avec l'algorithme de Newton :
rk = = = = = f (rk1 ) rk1 f (rk1 ) 2 rk1 x rk1 2rk1 rk1 x rk1 + 2 2rk1 rk1 x + 2 2rk1 1 x rk1 + . 2 rk1

(20) (21)

Appliquer la mthode du point xe en utilisant successivement les fonctions d'itration g1 et g2 et en choisissant comme point de dpart 1 puis 3. Completer le graphique avec les solutions z trouves. On plottera pour chaque solution le point z, f (z) . Commenter le rsultat. 3. Avec Maple calculer la drive de chacune des fonctions d'itration et faire un graphique des drives. Pour g1 on fera varier x dans l'intervalle [0.8, 4] et pour g2 x variera dans l'intervalle [0.8, 5]. Quel commentaire peuton maintenant faire quant la convergence de la mthode du point xe pour le problme tudi. 4. Un des avantages de la mthode de la bisection est qu'elle cherche la solution dans un intervalle donn. En utilisant la mthode de la bisection montrer qu'elle identie sans problme le zero qui se trouve dans l'intervalle x [2, 1]. Completer le graphique par la solution trouve. 5. Programmer une fonction Matlab qui ralise la mthode de Newton et chercher la solution qui correspond au point de dpart x0 = 2. Completer le graphique par la solution trouve. L'Algorithme 4 rappelle la mthode de Newton.

5.6 FPI00
Avec la mthode du point xe rechercher les zeros de la fonction
ex x3 1 = 0 .

5.7 FPI01
On considre le problme de la recherche du zero d'une fonction f (x) = 0. Soit la fonction
x3 exp(x) + cos(x) + 1 = 0

Algorithm 4 Recherche des zeros d'une fonction avec la


mthode de Newton. 1: Initialiser x(0) 2: pour k = 1, 2, . . . jusqu' convergence faire f (x(k1) ) 3: x(k) = x(k1) f (x(k1) )
4:

(19)

dont le graphique est donn dans la gure 2. 1. Dnir la fonction f (x) donn en (19) avec la commande Matlab inline. Faire un plot de f (x) pour x [1.5, 5] et completer le graphique par une ligne horizontale pour le niveau zero. Redimensionner la fentre graphique aux

nfaire

M. Gilli

Mthodes numriques  Recueil d'exercices

18

6 Systmes linaires
6.1 mat-triu
Dnition On appelle une matrice triangulaire avec une diagonale unitaire une matrice triangulaire unitaire. Vrier les proprits suivantes du produit et de l'inverse des matrices triangulaires :  L'inverse d'une matrice triangulaire infrieure (suprieure) est triangulaire infrieur (suprieur).  Le produit de deux matrices triangulaires infrieures (suprieures) est triangulaire infrieur (suprieur).  L'inverse d'une matrice triangulaire infrieure (suprieure) unitaire est triangulaire infrieure (suprieure) unitaire.  Le produit de deux matrices triangulaires infrieures (suprieures) unitaires est triangulaire infrieure (suprieure) unitaire.

2. Donner une formule pour le nombre d'oprations utilises pour rsoudre le systme linaire avec la rgle de Cramer donne sous (79). 3. Quel temps ncessite la rsolution d'un systme de taille n = 90 sur un ordinateur pouvant eectuer : (a) 1 Gops (Pentium IV 2.8 GHz), (b) 1 Tops, c'est--dire 1012 ops/seconde (Ordinateur parallle ?). Commenter. 4. Avec MATLAB, gnrer un systme de taille n = 90 et le rsoudre. Combien d'oprations en virgule ottante a-t-on eectu et combien de temps cela a-t-il pris ?

6.4 rslmi01
Soit le systme linaire Ax = b avec
1 0 0 0 a1 0 a2 0 0 1 0 0 a3 0 0 0 0 0 1 0 0 0 0 a4 1 1 0 1 0 0 0 0 A= , 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 20 .3 14 2.2 b= , 0 200 8 1.6

6.2 rsl06
Programmer les algorithmes 4.1 et 4.2 pour la rsolution de systmes triangulaires sous la forme de fonctions MATLAB. La structure des fonctions sera la suivante :  b = fsub(L,b), avec L une matrice triangulaire infrieure. La solution est retourne dans b.  b = fsub1(L,b), version particulire de fsub o L est une matrice triangulaire unitaire infrieure pour laquelle il ne sera pas ncessaire de donner la diagonale. La solution est retourne dans b.  b = bsub(U,b), avec U une matrice triangulaire suprieure. La solution est retourne dans b. Etablir la fonction du nombre d'oprations lmentaires (ops) pour chaque algorithme ? Vrier le rsultat empiriquement. De quel ordre est la complexit de ces algorithmes ?

a1 = .2, a2 = .8, a3 = .5 et a4 = .47.

On dsire rsoudre ce systme avec les direntes mthodes itratives. An d'viter des oprations redondantes impliquant les lments nuls dans la matrice A on codera chaque produit vectoriel 8 aij xj , i = 1, . . . , 8 de sorte ne faire intervej=1 nir que les produits non nuls. Pour ce faire on construira une matrice caractres comme suit :

6.3 rsl01c
Soit le systme linaire Ax = b de dimension n. La rgle de Cramer permet de calculer la solution x de ce systme en ayant recours aux dterminants par la formule suivante,
xi = |Ai | |A| , i = 1, 2, . . . , n

eq = str2mat('a1*x(5)+a2*x(7)','a3*x(5)',... 'a4*x(8)','x(1)+x(2)',' ...

');

(22)

dont la ime ligne sera valu l'aide de la fonction eval(eq(i, :)). 1. Pour la mthode de Jacobi, calculer le rayon spectral de la matrice qui gouverne la convergence et programmer la rsolution du systme linaire. Compter le nombre d'oprations lmentaires l'aide de la fonction flops. 2. Pour la mthode de Gauss-Seidel, calculer le rayon spectral de la matrice qui gouverne la convergence et programmer la rsolution du systme linaire. Compter le nombre d'oprations lmentaires l'aide de la fonction flops. 3. En faisant varier dterminer la valeur qui minimise le rayon spectral de la matrice qui gouverne la convergence pour la mthode de sur-relaxation successive. Programmer la rsolution du systme linaire avec la mthode de sur-relaxation successive. Compter le nombre d'oprations lmentaires l'aide de la fonction flops.

o Ai est la matrice A dans laquelle on a remplac la i-me colonne par le vecteur b. On suppose que chaque dterminant est calcul selon le schma d'expansion des mineurs. Le dterminant de la matrice A s'crit alors,
n

|A| =
pP (n)

s(p)
i=1

ai pi

(23)

o P (n) est l'ensemble des n! permutations de l'ensemble {1, 2, . . . , n}, pi est le i-me lment de la permutation p et s(p) est une fonction prenant les valeurs +1 ou 1 selon p. 1. Dvelopper une formule donnant approximativement le nombre d'oprations en virgule ottante eectuer pour obtenir la valeur du dterminant d'une matrice d'ordre n d'aprs l'quation (80).

M. Gilli

Mthodes numriques  Recueil d'exercices

19

6.5 Obstacle
On considre la fonction
f (x) = 1 1 + 6 . (24) (0.6 x + 0.2)2 + 0.14 (0.7 x 0.4)2 + 0.16

1. Avec inline dnir la fonction (24) et faire un graphique dans une fentre allant de 1 1 pour l'abscisse et de 0 3.5 pour l'ordonne. Completer le graphique avec un maillage (fonction grid). 2. En se servant des fonctions Matlab, dterminer les points maximum, minimum et zeros de la fonction dans l'intervalle x [1, 1]. Completer le graphique en marquant ces points avec le symbole . On xe maintenant un l lastique aux points x = 1 et x = 1 et on le fait passer par dessus l'obstacle dni par la fonction (24). Il s'agit alors de dterminer les 4 points partir desquels le l lastique n'adhere plus l'obstacle. En notant u(x) la position du l et f (x) l'hauteur de l'obstacle respectivement, ce problme se formalise comme
u (u f ) u uf = 0 0 0

ou B est une matrice d'ordre 2N 1 et u, f sont des vecteurs 2 1 0 0 u1 f1 . . . . 1 2 1 . . . . . . .. u= . f = . B = 0 1 2 . 0 . . . . . . .. .. . . . . . 1 . . . 0 0 1 2 u2N 1 f2N 1 et dsigne la multiplication lment par lment. Avant de prsenter l'algorithme de resolution donnons une formalisation plus gnrale
(x c) (Ax b) Ax x = 0 b c

dans laquelle il sut de poser b = 0, x = u, A = B et c = f pour retomber sur notre problme. Pour construire la solution on rsoudra Ax b avec une mthode itrative, de sorte pouvoir vrier chaque itration k pour tous les lments du vecteur xk la contrainte xk ci . i
Choisir x1 > c, et et poser x0 = 0

(25) (26) (27)

tant que |x1 x0 | > faire

avec u(1) = u(1) = 0 et u, u continues. Dans cette formulation la relation (26) s'interprte que le trajet de l'lastique ne peut tre que concave. La relation (25) s'interprte que, soit l'lastique adhre (dans ce cas on a u f = 0), soit il n'adhre pas (dans ce cas il dessine une droite et u = 0). Le fait que l'lastique ne peut passer par dessous l'obstacle est exprim par la relation (27). On envisage la solution de ce problme l'aide d'une mthode aux dirences nies. Pour ce faire on discrtise la variable x en divisant le domaine x [1, 1] en 2N intervalles quidistants de longueur x = 2/2N = 1/N . Ainsi x pourra prendre les 2N + 1 valeurs
(N + i)
x,

x0 = x1 pour i = 1 : 2N 1 faire GS yi = bi i1 Aij x1 j j=1


GS x1 = max ci , x0 + (yi i i

nfaire nfaire

2N 1 j=i+1 x0 ) i

Aij x0 /Aii j

L'algorithme ne conserve que les vecteurs x0 et x1 de deux itrations successives. A la n x1 correspond la solution. La mthode itrative pour la solution du systme linaire est du type SOR. 3. Programmer cet algorithme et chercher la solution du problme en posant N = 200, = 105 et = 1.95. 4. Completer le graphique en traant les segments de l'lastique qui n'adherent pas l'obstacle en noir.

i = 0, 1, . . . , 2N

et les valeurs des fonctions u et f aux point dnis par la discrtisation sont nots
ui = u((N + i)
x)

et

fi = f ((N + i)

x) .

7 Factorisations
7.1 complex1
On considre l'algorithme tgm1 qui applique la transformation de Gauss la premire colonne d'une matrice :

La drive u est approxime comme


u ui1 2ui + ui+1
2 x

et les relations (2527) s'crivent maintenant


(ui1 2ui + ui+1 )(ui fi ) ui1 + 2ui ui+1 u i fi = 0 0 0

pour i = 1, 2, . . . , 2N 1 et u0 = u2N = 0. Avec une notation matricielle on crit


(u f ) Bu Bu u = 0 0 f

remplace C2:m,1 par le vecteur des multiplicateurs , et la sousmatrice C2:m,2:m par le produit M1 C . Les lments de C1,1:m restent inchangs.

Algorithme (tgm1) Soit une matrice C Rmm . L'algorithme

C2:m,1 = C2:m,1 /C1,1 C2:m,2:m = C2:m,2:m C2:m,1 C1,2:m

function C = tgm1(C) m = size(C, 1) if C1,1 = 0, then Pivot est nul, arrt.

M. Gilli

Mthodes numriques  Recueil d'exercices

20

1. Programmer l'algorithme sous la forme d'une fonction Matlab. 2. Quel est le nombre d'oprations lmentaires que ncessite l'excution de cet algorithme ? La factorisation d'une matrice A en une matrice triangulaire infrieure L et une matrice triangulaire suprieure U est obtenue avec l'algorithme suivant : place A avec U et L l'exception des lments de la diagonale de L.

2. Programmer un algorithme qui inverse une matrice triangulaire infrieure L en exploitant cette rcurrence. Donner au programme la forme de la fonction Matlab :

T = TrilInv0(L)
Etablir la fonction du nombre d'oprations lmentaires (ops). De quel ordre est la complexit de cet algorithme ? 3. Rcrire l'algorithme TrilInv0 de sorte que la matrice L soit remplace par son inverse. On aura

Algorithme (eg) Factorisation A = LU . L'algorithme rem-

L = TrilInv(L)
4. Expliquer exactement d'o provient la dirence du nombre d'oprations lmentaires entre l'algorithme du point 1) et l'algorithme qui se sert de la rcurrence (point 2).

function A = eg(A) for k = 1 : n 1 Ak:n,k:n = tgm1(Ak:n,k:n ) end


3. Programmer l'algorithme sous la forme d'une fonction Matlab. 4. Gnrer une matrice alatoire A d'ordre 10 et vrier le fonctionnement de l'algorithme en eectuant le produit LU . 5. Quel est le nombre d'oprations lmentaires que ncessite l'excution de l'algorithme eg ? (On pourra se servir de MAPLE pour tablir cette expression). Vrier le rsultat empiriquement avec la fonction Matlab flops.

7.3 rsl09
1. Programmer l'algorithme 5.3 (egpp), l'algorithme 5.4 (rsl) et perm sous forme de fonctions MATLAB. 2. Gnrer une matrice
3 6 10

7.2 TriLinv
On dsire programmer un algorithme qui recherche l'inverse d'une matrice L triangulaire infrieure. Une approche possible consiste rsoudre les n systmes triangulaires
LX = I .

1 A= 4 7

2 5 8

et appliquer egpp cette matrice. Construire L, U et P et vrier que P A = LU . 3. Utiliser la fonction rsl pour rsoudre les systmes linaires Axi = bi , i = 1, 2 o A est dnie comme prcdemment et b1 = [10 20 30] , b2 = [11 12 13] .

1. Programmer un algorithme qui recherche l'inverse d'une matrice triangulaire infrieure L en appliquant successivement la forward substitution". Etablir la fonction du nombre d'oprations lmentaires (ops). De quel ordre est la complexit de cet algorithme ? On envisage maintenant une autre approche. Ecrivons les quations qui dnissent le systme LT = I , avec T la matrice inverse de L.

11 22 32 33

7.4 rsl09b
1. Programmer l'algorithme egpp et perm sous forme de fonction Matlab. 2. Gnrer une matrice
1 6 A= 4 3
33

21 31 . . .
n1

. . .

. . .

..

.
nn

n2

n3

...

t11 t21 t22 t31 t32 t33 . . . .. . . . . . . .


11

1 1 1

..

tn1 tn2 tn3 . . . tnn =1 =0 =1 =0 =0 =1 t11 t21 t22 t31 t32 t33

t11 t21 22 t22 31 t11 + 32 t21 + 33 t31 32 t22 + 33 t32 33 t33


21

t11 +

22

. . .

= 1/ 11 = 21 t11 / 22 = 1/ 22 = ( 31 t11 + 32 t21 )/ = 32 t22 / 33 = 1/ 33

2 5 3 5

3 3 9 1

4 6 8 8

et appliquer egpp cette matrice. Construire L, U et P et vrier que P A = LU . 3. Programmer l'algorithme rsl sous forme de fonction Matlab et utiliser rsl pour rsoudre les systmes linaires Ax(i) = b(i) , i = 1, 2 o A est dnie comme 10 20 30 40 , b(2) = prcdemment et b(1) = 11 12 13 15 .

On voit qu'il s'agit d'un systme d'quations rcursives qui dnissent les lments de la matrice inverse T comme i=j 1/ ii tij = i1 i=j k=j ik tkj / ii

M. Gilli

Mthodes numriques  Recueil d'exercices

21

7.5 GaussJordan
L'limination dite de Gauss-Jordan transforme un systme linaire Ax = b en un systme Dx = c avec D une matrice diagonale. La transformation qui annule tous les lments, l'exception de l'lment xk d'un vecteur x se formalise comme
Mk x =
(k) i

7.8 stosim
Pour des exercices de simulation stochastique notamment on est souvent amen gnrer des vecteurs alatoires qui suivent une loi normale donne N (, V ) avec l'estimation de l'es prance et V l'estimation de la matrice des variances et covariances. Pour gnrer un vecteur tir de cette loi on peut procder de la faon suivante :

. . .
0 0 0

..

. . .
1 0 0

(k)

. . .

. . .
0

..

. . .
0

k1 1 (k) k+1

(k)

. . .
0 0 1

. . .
0 0 0

. . .

(k)

. . .
0

..

. . .
1

x1 . . . xk1 xk xk+1 . . . xn

0 .  Factoriser V en R R avec R triangulaire suprieure . . 0  Gnrer un vecteur e dont chaque composante ei suit une loi = xk N (0, 1) 0  Calculer = + R e . . . On vrie alors que E( ) = et E [( )( ) ] = V . 0

o = xi /xk , i = 1, . . . , n. 1. Ecrire une procdure qui pour n et k donn gnre un vecteur alatoire x Rn , construit la matrice Mk et calcule le vecteur z = Mk x. On choisira n = 8, k = 3. Vrier que zi = 0, i = k. 2. Ecrire la procdure qui rsoud un systme linaire par la mthode de Gauss-Jordan. On procdera de la manire suivante : Pour n donn gnrer une matrice alatoire A Rnn et un vecteur b unitaire et former la matrice borde A b . Pour k = 1, . . . , n eectuer le produit B = B = Mk B . La solution du systme linaire Ax = b s'crit alors xi = Bi,n+1 /Bii , i = 1, . . . , n. 3. Rsoudre le systme linaire avec la factorisation LU et calculer la norme 2 du vecteur de dirences entre la solution obtenue avec LU et celle obtenue par la mthode de Gauss-Jordan. 4. A l'aide de la commande flops comparer le nombre d'oprations lmentaires ncessaire chacune de ces mthodes.

Application : Soit
16.55 .0173 = .2162 .8102 17450 15.3 4 V = 10 4.7 32.7 15.3 139.4 95.7 15.3 4.7 32.7 95.7 15.3 115.1 5.3 5.3 16.2

Gnrer 1000 vecteurs et calculer la moyenne et la matrice des variances et covariances de ces vecteurs.

7.9 givens00
L'algorithme 5 qui suit calcule les coecients c et s de la matrice c s (29) G= s c telle que
c s s c a b = r 0 .

7.6 Chol0
Programmer l'algorithme cholesky du cours. Comparer votre version avec chol de Matlab. Etudier de manire analytique et empirique la complexit de votre algorithme.

Algorithm 5 (Rotation de Givens)

7.7 Chol1
1. Pour n = 200 et k = 400 crer une matrice Z Rkn dont les lments sont des variables pseudo-alatoires uniformment distribus dans [10, 10]. Calculer la matrice de covariance W = Cov(Z) l'aide de la fonction Matlab cov. 2. Factoriser la matrice W et vrier qu'elle est dnie positive. 3. Gnrer une matrice alatoire X Rnm avec m = 10 ainsi qu'un vecteur alatoire y Rn . 4. Evaluer l'expression = (X W 1 X)1 X W 1 y (28) en calculant les inverses des matrices avec la fonction Matlab inv. A l'aide de la fonction flops donner le nombre d'oprations lmentaires ncessaires cette valuation. 5. Evaluer l'expression (28) sans le calcul explicit des inverses et comparer le nombre d'oprations lmentaires.

si b = 0 alors

sinon si |b| > |a| alors sinon nsi nsi

c = 1; s = 0

= a/b ; s = 1/ 1 + 2 ; c = s

= b/a ; c = 1/ 1 + 2 ; s = c

1. crire une fonction Matlab

[c,s] = givens(a,b)
qui ralise l'algorithme 5. 2. Dans la suite : (a) Genrer une matrice alatoire A et n = 5.
mn

avec m = 7

(b) On dsire annuler l'lment A63 en appliquant une rotation de Givens. Pour i = 2 et k = 6 construire

M. Gilli

Mthodes numriques  Recueil d'exercices

22

la matrice

(c)

(d) 3. An GA

.. . . En procdant de la sorte, le volume de donnes transmettre peut cependant devenir rapidement prohibitif lorsqu'il s'agit .. . d'un trs grand nombre d'images provenant d'une grande dis0 tance. Une possibilit consiste alors appliquer la matrice des (Tous les lments de la diagonale valent 1 l'excep- luminosites une dcomposition singulire et ne transmettre que les 2k vecteurs singuliers ainsi que les k valeurs singulires tion des lments en position i et k). qui permettent une approximation satisfaisante de la matrice Eectuer le produit G A et vrier que A63 et seules originale. Ainsi, si une approximation de rang 6 pour une males lignes i = 2 et k = 6 de la matrice A ont ts trice d'ordre 1000 s'avre susante, le nombre de donnes modies. transmettre serait de 2 6 1000 + 6 = 12 006 au lieu de 106 , Quel est le nombre d'operations excuts ? ce qui correspond un gain de 98.8%. d'viter des oprations redondantes dans le produit on propose l'algorithme 6 : Application : Le chier v:\metri\svdEx2.bmp ( charger avec i G(i, k, ) = k

1 . . . 0 . . . 0

.. .

0 . . . c . . . s . . . 0

0 . . . s . . . c . . . 0

0 . . . 0 . . . 0 . . . 1

Pour ce faire, on digitalise au pralable une image en lui appliquant une grille de n lignes et n colonnes puis on assigne chaque carr de la grille un nombre qui correspond son niveau de luminosit suivant par exemple une chelle de 0 10. Ainsi l'image est traduite en n2 entiers qu'il faudra par la suite transmettre sur Terre.

Algorithm 6 (Rotation de 2 lignes de la matrice A


). L'algorithme remplace la matrice A avec G A. (G dni en (29)). pour j = 1 : n faire
nfaire
1 = A1,j ; 2 = A2,j ; A1j = c 1 s 2 ; A2j = s 1 + c 2 ;
2n

crire une fonction Matlab

A = rowrot(A,c,s)
qui ralise l'algorithme 6. 4. On dsire maintenant rendre triangulaire suprieure la matrice A. Considrons d'abord la colonne j = 1. Alors la procdure suivante annulera successivement les lments des lignes m, m 1 jusqu' 2 de la colonne 1 de la matrice A:

la commande imread) contient une matrice A de dimension 223 300 qui correspond une image digitalise avec deux niveaux de luminosit cods avec 0 et 1. Pour visualiser cette image avec Matlab on peut procder comme suit :  Changer le format de codage des lments de A avec la commande double ;  utiliser la commande spy. En se basant sur l'tude des valeurs singulires rechercher l'approximation B de plus petit rang de la matrice A qui soit acceptable pour la qualit de cette image. (Pour la matrice approche B on imprimera une marque si bij > .4).

8 Systmes non-linaires
8.1 JacNum
Soit un systme de n fonctions non linaires f1 (x) f (x) 2 F (x) . . . fn (x) et sa matrice Jacobienne
J = .

pour i = m : 1 : 2 faire nfaire

[c,s] = givens(A(j,j),A(i,j)) ; A([j i], :) = rowrot(A([j i], :),c,s) ;

Raliser cette procdure et vrier le rsultat. 5. En rptant la procdure prcdente successivement pour les colonnes j = 1, . . . , n de la matrice A on obtiendra une matrice triangulaire.

pour j = 1 : n faire pour i = m : 1 : j + 1 faire nfaire nfaire

[c,s] = givens(A(j,j),A(i,j)) ; A([j i], :) = rowrot(A([j i], :),c,s) ;

f1 x1

Raliser cette procdure et vrier le rsultat. 6. Soit la matrice Q = G1 Gr . Raliser dans la procdure prcdente la construction des matrices Gi , i = 1, . . . , r ou r est le nombre total de rotations. Calculer Q, vrier que Q Q = I et que A = QR.

fn x1

. . .

f1 xn

fn xn

. . .

Une approximation numrique de la matrice Jacobienne peut tre obtenue avec une dirence progressive (forward dierence), qui est dnie par
Jij = fi (x + j ej ) fi (x) j

7.10 svdprox
Une application possible pour l'approximation d'une matrice par une matrice de rang infrieur constitue la compression de donnes lors de la transmission d'un trs grand nombre d'images prises par une sonde spatiale.

o j est choisi susamment petit et ej est le j-me vecteur de la matrice identit. En utilisant la notation vectorielle, on peut valuer la j-me colonne de la matrice Jacobienne par
J.j = F (x + j ej ) F (x) j

M. Gilli

Mthodes numriques  Recueil d'exercices

23

Soit F (x) dnie ainsi : 2 x1 + x3 x4 2 3 . F (x) = x1 x2 x3 2x1 x2 3x2 x3 + x1 x3 1. crire une fonction Matlab qui, pour un vecteur x donn, retourne la valeur de F (x)

Par la mthode des quations normales, donner la solution analytique pour x. Pour quelles valeurs de une rsolution numrique avec ordinateur sera-t-elle impossible.

9.2 mc02
Soit le modle linaire classique
y = X +

F = func(x)
2. crire le code Matlab qui value une matrice Jacobienne par la mthode des dirences progressives. On choisira j = eps |xj |, avec eps la prcision machine dans Matlab. 3. Coder les expressions analytiques qui dnissent les lments de la matrice Jacobienne. Pour x = 1.2 9.3 25.7 comparer les valeurs qui correspondent l'valuation analytique avec les rsultats de l'valuation numrique. 4. Une approximation plus prcise des lments de la matrice Jacobienne s'obtient avec la mthode dite dirence centre (central dierence). L'valuation de la j-me colonne de la matrice Jacobienne s'crit alors F (x + j ej ) F (x j ej ) J.j = 2 j crire le code Matlab qui value une matrice Jacobienne par la mthode dirence centre. Pour x = 1.2 9.3 25.7 comparer les rsultats quant leur prcision et quant au nombre d'oprations lmentaires qu'ils ncessitent. 5. Rcrire votre code en faisant usage de la fonction Matlab feval. avec
iid (0, 2 I)

On dsire trouver l'estimation des moindres carrs du vecteur des paramtres et l'estimation de la variance des erreurs 2 . Les observations sont : 0 1 1 0 2 1 0 1 1 1 1 0 X= y= 1 2 1 2 . 1 1 0 1 1 0 0 1 Procder l'estimation en utilisant, successivement :  la mthode des quations normales,  la factorisation QR de X .

9.3 mc-eqn00
On considre le problme des moindres carrs Ax b. On rappelle que pour la rsolution des quations normales et le calcul de la matrice des variances covariances on procde suivant les tapes suivantes :  Former la matrice A =
A b G z

8.2 rsnl01
Soit le systme d'quations non-linaires suivant :
a1 log(x2 ) a2 x1 /(x5 + a3 ) a4 x2 x5 + a5 x4 x3 + a6 x4 x5 x2 + a7 x3 x4 + a8 a9 x1 x3 + a10 = = = = = 0 0 0 0 0

 Calculer le triangle infrieur de C = A A  Calculer la factorisation de Cholesky G = correspond C  Rsoudre G x = z  Calculer 2 = 2 /(m n)  Calculer T = G1  Calculer S = 2 T T Donner (sans le dmontrer) le nombre d'oprations lmentaires ncessaires l'excution de chaque tape de cette procdure pour rsoudre un problme comportant m observations et n variables. Donner le nombre total des oprations lmentaires.

qui

avec a =

1 2

9 .

1. Rsoudre ce systme l'aide de la fonction fsolve de MATLAB. 2. Rsoudre ce systme l'aide de la mthode de GaussSeidel. 3. Rsoudre ce systme l'aide de la mthode de Newton.

9 Moindes carrs
9.1 mc01
Soit le problme Ax b avec = 1 1 1 A= 1 1 1+
2 b = 3 . 2

9.4 lauchli3
An de pouvoir vrier la prcision des calculs numriques, on construit des problmes pour lesquels la solution exacte est connue. Il devient alors possible de juger de la prcision des calculs en comparant les rsultats numriques avec la solution exacte.

et

M. Gilli

Mthodes numriques  Recueil d'exercices

24

Un problme imagin par Luchli8 consiste estimer le paramtre dans le modle linaire classique
y = X + u

avec X Rnk , n 3, k = n 1 et y Rn dnies comme 1 pour i = 1 et j = 1, . . . , k n1+e 1 pour j = 1 et i = 1, . . . , n e Xij = yi = e pour i = j et i = 1 n1e 0 sinon Pour ce problme on peut vrier que la solution analytique de l'estimation de par les moindres carrs ordinaires correspond 1 1 = . . . . 1 1. Pour n = 41 et e = 223 construire la matrice X et le vecteur y propos par Luchli. Calculer la condition de la matrice X . 2. An d'valuer la qualit des deux mthodes numriques, proposes ci-aprs, pour calculer , eectuer les oprations ci-dessous pour le systme avec n = 41 : (a) Calculer la condition de la matrice X . (b) Calculer par les quations normales (X X) = X y en utilisant la dcomposition de Cholesky de X X. (c) Utiliser la dcomposition QR de X pour rsoudre le systme surdtermin X = y . (d) Comparer dans un mme graphique les valeurs ob tenus pour par les deux mthodes. On eectuera les 4 points ci-dessus pour les valeurs successives de e = 218 , 223 , 224 et 225 . Commenter.

Pour n = 4 par exemple, vrier avec MAPLE que l'estimation de par les moindres carrs ordinaires correspond 1 1 = . . . . 1 pour i = 1 pour i = 2, . . .commandes suivantes de la librairie linalg : Utiliser les , n 1 pour i = n transpose, multiply et inverse. matrix,

9.6 lauchli2
Reprenons les donnes X (n(n1)) et y (n1) proposes par Luchli, pour lesquelles on vrie que l'estimation du modle linaire classique par les moindres carrs ordinaires produit le vecteur ((n 1) 1) = [1 1 . . . 1] (cf TP #13). An d'valuer la qualit des deux mthodes numriques sui vantes pour calculer , eectuer les oprations ci-dessous pour un systme avec n = 41 :
1. Calculer par les quations normales (X X) = X y en utilisant la dcomposition de Cholesky de X X .

2. Utiliser la dcomposition QR de X pour rsoudre le sys tme surdtermin X = y . On eectuera les 2 points ci-dessus pour des valeurs successives de e = 215 , 216 , 217 ,. . ., 227 . An de visualiser les rsultats, reporter les estimations de sur un graphique avec sur l'axe horizontal l'indice i = 1, 2, 3, . . . , 40 et en correspondance les valeurs de i trouves par les deux mthodes. Commenter les rsultats trouvs. Indication : Utilisez une boucle sur e dans laquelle vous calculerez les estimations de et dessinerez ce vecteur. Vous pourrez insrer les 3 commandes suivantes aprs la fonction plot an de mieux observer ce qui ce produit :

9.5 lauchli
An de pouvoir vrier la prcision des calculs numriques, on construit des problmes pour lesquels la solution exacte est connue. Il devient alors possible de juger de la prcision des calculs en comparant les rsultats numriques avec la solution exacte. Un problme imagin par Luchli9 consiste estimer le paramtre dans le modle linaire classique
y = X + u

drawnow figure(gcf) pause

% % % %

rafrachit la fentre graphique de MATLAB amne la fentre graphique au dessus des au attend que l'on presse une touche pour continuer l'excution

9.7 MCnl01
On considre le modle non-linaire suivant
Ct = + Yt +
t

avec X Rnk , n 3, k = n 1 et y Rn dnies comme 1 pour i = 1 et j = 1, . . . , k n1+e 1 pour j = 1 et i = 1, . . . , n e Xij = yi = e pour i = j et i = 1 n1e 0 sinon
kleinsten Quadraten, Numerische Mathematik 3, 226240. 9 Luchli, P., (1961), Jordan-Elimination und Ausgleichung nach kleinsten Quadraten, Numerische Mathematik 3, 226240.
8 Luchli, P., (1961), Jordan-Elimination und Ausgleichung nach

t = 1950, . . . , 1985.

(30)

pour i = 1 Le chier v:\metri\mne\mcnl01data.m contient les observapour i = 2, . . . , n 1 tions de la variable C et de la variable Y . pour i = n On peut aussi formaliser le modle comme
y = f (X, b) +

(31)

avec y =

,X=

et b =

M. Gilli

Mthodes numriques  Recueil d'exercices

25

1. Ecrire une fonction MATLAB qui value la partie dterministe y = f (X, b) du modle. On appellera cette fonction model01 et on spciera les arguments suivants :

5. La matrice des variances et covariances des paramtres b peut tre approche par l'expression
= 2 (J J)1

yhat = model01(X,b)
2. A l'aide de la fonction model01 valuer la somme des carrs des rsidus r = y y en posant b = 1 1 1 . La matrice Jacobienne du modle est dnie comme f1 (X1 . , b) f1 (X1 . , b) f1 (X1 . , b)
J =
b1 b2 b3

avec 2 = r r/n. Evaluer et imprimer la sousmatrice qui correspond aux paramtres et . 6. Implmenter l'algorithme de Levenberg-Marquardt.

. . .
fT (XT . , b) b1

. . .
fT (XT . , b) b2

. . .
fT (XT . , b) b3

9.8 mcnl-gn
Ecrire une fonction MATLAB qui implmente la mthode de Gauss-Newton pour l'estimation d'un modle non-linaire par la mthode des moindres carrs. On dsire que la fonction se presente comme :
[b, r, J] = mc_gn(X, y, model, b0)

Une approximation numrique de la matrice Jacobienne peut tre obtenue avec une dirence progressive (forward dierence), qui est dnie par
Jij = fi (Xi . , b + j ej ) fi (Xi . , b) j

o les arguments d'entre sont :

o j est choisi susamment petit et o ej est le j-me vecteur de la matrice identit. En utilisant la notation vectorielle, on peut valuer la j-me colonne de la matrice Jacobienne par
J.j = f (X, b + j ej ) f (X, b) j

X y model b0

Matrice des observations des variables exognes Vecteur des observations de la variable dpendante Fonction qui calcule les y du modle Valeur initiale du vecteur des paramtres

et les arguments de sortie

3. En choisissant j = bj programmer la procdure qui calcule la matrice jacobienne ( reprsente la prcision machine). Ci-aprs la structure de la procdure programmer.
1: 2: 3: 4: 5: 6: 7: Initialiser le vecteur Construire la matrice diagonale = diag() Calculer y = f (X, b)

b r J

Valeur du vecteur des paramtres Vecteur des rsidus Approximation numrique de la matrice jacobienne la sol

On suggre la structure suivante pour le programme : Initialiser J, iter, maxiter, b, tol tant que critre de convergence pas satisfait, faire Incrmenter iter Evaluer yhat avec la fonction model Evaluer la matrice jacobienne J Rsoudre le pas de Gauss-Newton s b = b + s Tester si le nombre d'itrations maximales est atteint finfaire On considre que le critre de convergence n'est pas satisfait ausssi longtemps que
|sse0 sse| > tol. sse + eps

pour k = 1 : p faire nfaire


J.k = (+ y )/k y

Calculer y + = f (X, b + .k )

On utilisera feval pour valuer le modle aux instructions 3 et 5. On dsire maintenant implmenter la mthode de GaussNewton pour l'estimation des paramtres b du modle (31). La structure de l'algorithme de Gauss-Newton est la suivante :
1: Initialiser b, it, maxit et 2: tant que critre de convergence pas satistait faire 3: Incrmenter it 4: Evaluer y , r et J 5: Rsoudre Js = r 6: Mettre jour le pas b = b + s 7: Tester si le nombre maximal d'itrations a t atteint 8: nfaire

La fonction model retourne yhat partir d'une valeur de b et la matrice des observations X. Estimer les paramtres x1 et x2 du modle y = x1 ex2 t avec t = 0 1 2 3 et y = 2 0.7 0.3 0.1 . Sur le modle de l'algorithme de Gauss-Newton implmenter la mthode de Levenberg-Marquardt.

Le critre de convergence est dni comme


|sse0 sse| < . sse +

10 Option pricing
10.1 prog09
Programmer la fonction BS ci-aprs, qui calcule le prix d'un call Europen :

4. Implmenter l'algorithme de Gauss-Newton et l'excuter en choisissant b = 1 1 1 comme valeur initiale. On posera maxit = 50 et = 104 .

M. Gilli

Mthodes numriques  Recueil d'exercices

26

function call = BS(S,E,r,T,sigma) % Call Europen avec Black-Scholes % d1 = (log(S./E) + (r + sigma.^2 /2) .* T) ... ./ (sigma .* sqrt(T)); d2 = d1 - sigma .* sqrt(T); Ee = E .* exp(-r .* T); call = S .* normcdf(d1) - Ee .* normcdf(d2);

S = linspace(80,120); call = BScall(S,E,r,T,sigma); plot(S,call) xlabel('S')

1. Faire un graphique du prix du call en fonction de r, avec r [0.001, 0.10]. 2. Faire un graphique du prix du call en fonction de , avec [0.001, 0.50]. 3. Faire un graphique du prix du call en fonction de r et , avec r [0.001, 0.10] et [0.001, 0.50]. 4. Faire un graphique du prix et des courbes de niveau du call en fonction de r et , avec r [0.001, 0.10] et [0.001, 0.50].

3. Lorsque deux des arguments d'entre de la fonction BScall sont des matrices de coordonnes l'argument de sortie constitue une matrice dont l'lment de la ligne i et de la colonne j correspond au call valu au coordonnes correspondantes des matrices d'entre. Completer le script avec les instructions :
S = linspace(80,110); T = linspace(0,0.40); [SS,TT] = meshgrid(S,T); c = BScall(SS,E,r,TT,sigma); figure mesh(S,T,c) xlabel('S'); ylabel('t');

La gure qui suit illustre les type de graphique obtenu.

30 20

10.2 BSplot
On rappelle que le prix d'un call pour une option Europenne avec prix d'exercise E , taux du march r, T temps restant jusqu' la maturit et la volatilit du sous-jacent S est donn par : C = S N (d1 ) E erT N (d2 ) (32) o N (x) est la fonction de distribution cummule de la variable alatoire normale centre rduite, dnie comme
1 N (x) = 2
x

20 10 10 0 0.4 0.2 90 100 110 120

0 80

e 2 y dy

et
d1 d2 = =
1 log(S/E) + (r + 2 2 )T T d1 T .

4. Programmer une fonction Matlab qui retourne la valeur d'un put Europen. Donner la fonction la structure suivante :
function call = BSput(S,E,r,T,sigma) % Evaluation du prix d'un put Europen avec Black-Scholes % call = BSput(S,E,r,T,sigma) %

Le prix du put se dduit partir de la put-call parity et s'crit


P = E erT N (d2 ) S N (d1 ) .

Tester la fonction en vriant que l'on obtient 4.3649 lorsqu'on choisit les mmes arguments que pour le call.

(33)

1. Programmer une fonction Matlab qui retourne la valeur d'un call Europen. Donner la fonction la structure suivante :

10.3 FiniteDiMethod

On considre le problme du calcul du prix d'une option eurofunction call = BScall(S,E,r,T,sigma) penne. A un instant donn, le prix de l'option est fonction de % Evaluation du prix d'un call Europen avec Black-Scholes la valeur du titre sous-jacent et du temps qu'il reste parcourir % call = BScall(S,E,r,T,sigma) % jusqu' la maturit de ce titre. La mthode dite des dirences nies ore une possibilit de calculer une approximation du prix pour de telles options. On procde de la faon suivante.

Tester la fonction en vriant que l'on obtient 11.2460 pour le call lorsqu'on choisit S = 100, E = 95, r = 0.05, T = 0.40 et = 0.30. Pour tester la fonction prparer un chier script avec les commandes :
S = 100; E = 95; r = 0.05; T = 0.40; sigma = 0.30; call = BScall(S,E,r,T,sigma)

La variable temps, qui va de T 0 est dcoupe en n parties gales t = T /n. On suppose que le prix S du titre sousjacent peut varier entre 0 et Smax . Cet intervalle est dcoup en m parties gales S = Smax /m. Il en rsulte une grille avec (n + 1)(m + 1) noeuds telle que illustre dans la gure 3. A partir du modle de Black and Scholes10 , il est possible d'tablir la relation suivante
aj fi1,j1 + bj fi1,j + cj fi1,j+1 = fi,j
curities. Prentice Hall, page 355.

2. Modier votre fonction de sorte ce qu'elle retourne un vecteur pour le call lorsqu'un des arguments d'entre est un vecteur. Pour tester la fonction modie on pourra ajouter dans le script prcdant les commandes :

(34)

10 Hull, J.C., (1993) : Options, Futures, and other Derivative Se-

M. Gilli

Mthodes numriques  Recueil d'exercices

27

0
0 1

S 2 3 4 5

Smax
6

1 t 2

.. .......................................................................................................................... . . .. .. . ........................................................................................................................ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 . 22 . 23 . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . ... . . .. . . . . .. . . . . . . . ... ... . . ... . . . . .... . . . . ... . .. ... . . . . ... ... . . ... ... . . . . . . . . . ... .. .... ... .. .... . . . . . . . ... ... . ... . . . . . . . . ... . . . ... .. . .. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . ... .. . .. .. . . .

t t t t

d d d d t

d d d d t

d d d d t

d d d d t

d d d d t

t t t t t

S . .

Etant donn que la dernire colonne de la matrice du membre de droite est dnie par la condition (38), le systme (39) peut tre rsolu en cherchant la solution de
P fij = fi+1,j j = 1, . . . , m 1

(40)

pour i = 3, 2, 1, 0, dans l'ordre.

Application
On dsire appliquer cette mthode au problme dni par les donnes suivantes : Prix d'exercice du titre X = 50 Temps restant jusqu' la maturit du titre T = 5/12 Taux d'intrt annuel hors risque r = 0.1 Volatilit du titre = 0.4 On suppose Smax = 100 le prix maximum que le titre sousjacent peut atteindre et pour lequel le prix de l'option est nul. Pour le dcoupage temporel on choisit n = 10, et m = 20 pour le dcoupage du prix du titre.

Fig.

3  Grille pour n = 4 et m = 6.

pour i = 0, 1, . . . , n 1 et j = 1, 2, . . . , m 1 entre les dirents noeuds. Les coecients aj , bj et cj pour j = 1, 2, . . . , m 1 sont dnis comme suit :
aj = 1 1 r j t 2 j 2 t 2 2 1 + 2 j 2 t + r t 1 1 r j t 2 j 2 t 2 2

1. Ecrire les instructions pour valuer la matrice P . (L'assemblage de la matrice P peut se faire facilement, l'aide de la fonction diag.) cj = 2. Initialiser avec des zros la matrice f qui reprsente les o r est le taux d'intrt annuel hors risque et la volatilit noeuds de la grille. (Etant donn que la valeur des noeuds sous-jacente du titre. de la premire et la dernire colonne de la grille est nulle, la matrice f peut tre dnie comme ayant n + 1 lignes et On vrie facilement que pour n = 4 et m = 6 les quam 1 colonnes.) tions (34) dnissent le systme 3. Initialiser la dernire ligne de f avec les conditions donnes sous (38). 4. Rsoudre le systme d'quations (40) en se servant de la f00 f10 f20 f30 commande \ de Matlab. La thorie conomique dicte que f01 f11 f21 f31 f11 f21 f31 f41 a1 b1 c1 chaque tape i = 3, 2, 1, 0, la solution fij , j = 1, 2, . . . , m f02 f12 f22 f32 f12 f22 f32 f42 a2 b2 c2 1 du systme linaire doit tre corrige comme suit f03 f13 f23 f33 = f13 f23 f33 f43 . a3 b3 c3 f04 f14 f24 f34 f14 f24 f34 f44 fij = max(fij , fn+1,j ) j = 1, 2, . . . , m 1. a4 b 4 c 4 a5 b5 c5 f05 f15 f25 f35 f15 f25 f35 f45 Ceci s'interprte comme suit : aucun instant le prix de f06 f16 f26 f36 l'option ne peut tre infrieur max(X S, 0). (35)
bj =

Pour pouvoir rsoudre le systme (35), il faut connatre les valeurs des noeuds aux limites de la grille (noeuds dessins en noir). Pour notre problme, ces conditions aux limites sont
fi0 fim fnj = = = 0 i = 0, 1, . . . , n 0 i = 0, 1, . . . , n max(X jS, 0)

j = 1, . . . , m 1

(36) (37) (38)

La matrice P a une structure particulire tant donn que pij = 0 pour |i j| > 1. Une telle matrice est appele une matrice par bande, et dans notre cas, il s'agit du cas particulier d'une matrice tridiagonale. On vrie aisment que les matrices L et U correspondant la factorisation d'une matrice tridiagonale T sont de la forme
u1 q1 d 1 q1 p1 d2 q2 u2 q 2 = u3 q3 p2 d3 q3 u4 q 4 p3 d4 q4 u5 p4 d5 (41)

avec X le prix d'exercice du titre. Etant donn (36) et (37), le systme (35) se simplie et on a
b1 c1 f01 a2 b2 c2 f02 f03 a3 b3 c3 a4 b4 c4 f04 a5 b 5 f05 P f31 f11 f32 f12 f33 = f13 f34 f14 f35 f15 f41 f42 f43 f44 f45

f11 f12 f13 f14 f15

f21 f22 f23 f24 f25

f21 f22 f23 f24 f25

f31 f32 f33 f34 f35

1 l1 1 l2 1 l3 1 l4 1 .

avec
u1 li ui = = = d1 pi /ui di li1 qi1 i = 1, . . . , n 1 i = 2, . . . , n.

(39)

M. Gilli

Mthodes numriques  Recueil d'exercices

28

Ainsi il apparat que cette factorisation ne ncessite que le calcul de deux vecteurs l et u. 4. Programmer une fonction Matlab lu3diag qui calcule les vecteurs l et u en fonction des vecteurs p, d et q qui dnissent la matrice tridiagonale T . On donnera cette fonction la structure suivante
[l, u] = lu3diag(p, d, q)

function S = MBG(S0,r,T,sigma,NIncr,NRepl) % Mouvement Brownien Geometrique % Simulation de NRepl trajectoires de prix avec NIncr increments % Chaque trajectoire a NIncr+1 points (S(1)=S0). dt = T/NIncr; trend = (r - sigma^2/2)*dt; sigdt = sigma * sqrt(dt); Increments = trend + sigdt*randn(NRepl,NIncr); LogTrajectoires = cumsum([repmat(log(S0),NRepl,1) Increments],2); S = exp(LogTrajectoires); % Trajectoires du prix

5. Quel est le nombre d'oprations lmentaires que ncessite l'excution de la fonction lu3diag ? (Donner une expression en fonction de la taille de T .) 6. Sous quelles conditions l'algorithme programm dans lu3diag est-il numriquement stable ? 7. Programmer une fonction Matlab res3diag qui rsoud un systme linaire tridiagonal T x = b par forward et backward substitution, la factorisation LU tant donne (vecteurs l, u et q ). On donnera cette fonction la structure
b = res3diag(l, u, q, b)

Les rptitions for sont vites en crant d'abord une matrice d'incrments laquelle on rajoute une premire colonne avec le prix initial. A cette matrice on applique la commande cumsum qui calcule la somme cumule des lments de chaque ligne, ce qui constitue les trajectoires browniennes. On se propose maintenant de recrire le code qui value un call Europen en utilisant la fonction MBG pour la simulation des trajetoires de prix. Voici ce code revu :

Code /Teaching/MNE/Ex/MC01.m:
function [P,IC] = MC01(S0,E,r,T,sigma,NIncr,NRepl) % Evaluation d'un call Europeen avec Monte Carlo (brut) S = MBGV(S0,r,T,sigma,NIncr,NRepl); Payoff = max( (S(:,end)-E), 0); [P,ignore,IC] = normfit( exp(-r*T) * Payoff );

8. Quel est le nombre d'oprations lmentaires que ncessite l'excution de la fonction res3diag ? (Donner une expression en fonction de la taille du systme.) 9. Evaluer la matrice f l'aide des fonctions lu3diag et res3diag. 10. Quel est le nombre d'oprations lmentaires que ncessite l'valuation de la matrice f lorsqu'on utilise les fonctions lu3diag et res3diag ? Donner une expression en fonction du dcoupage dni par m et n.

On utilise ici la fonction Matlab normfit pour caluler la moyenne des payos escompts ainsi qu'un intervalle de conance. Le deuxime argument de retour de la fonction normfit contient l'ecart-type, que nous n'utilisons pas dans la suite des calculs (c'est la raison pour laquelle nous l'avons nomm ignore). Le troisime argument de sortie est un vecteur de deux lments qui contient les valeurs qui dnissent l'intervalle de conance 95%. On dsire maintenant comparer la performance de ces codes en calculant le prix d'un call Europen correspondant un prix du sous-jacent de S0 = 120, un prix d'exercice de E = 130, un taux du march de r = 0.05, une chance 9 mois et une volatilit de = 0.35. 1. Calculer le prix du call avec la formule analytique de Black-Scholes. 2. Calculer le prix du call avec la fonction MC00 en choisissant un nombre d'incrments de NIncr=100 et un nombre de rplications de NRepl=10000. Comme on dsire pouvoir comparer les rsultats on initialisera le gnrateur des nombres au hasard et on mesurera le temps d'xcution. Pour ce faire on procdera comme :
randn('seed',0); t0 = clock; [P,IC] = MC00( ... ); dispMC('MC00',P,IC,t0)

10.4 AsianOpt
Ci-aprs le code Matlab, prsent au cours, pour l'valuation d'un call Europen avec la mthode de Monte Carlo.

Code /Teaching/MNE/Ex/MC00.m:
function [P,IC] = MC00(S0,E,r,T,sigma,NIncr,NRepl) % Evaluation d'un call Europeen avec Monte Carlo (brut) dt = T/NIncr; trend = (r - sigma^2/2)*dt; sigdt = sigma * sqrt(dt); S1 = 0; S2 = 0; for j = 1:NRepl z = log(S0); for i = 1:NIncr z = z + trend + sigdt * randn; end Payoff = max( (exp(z)-E), 0); S1 = S1 + Payoff; S2 = S2 + Payoff^2; end P = exp(-r*T) * S1 / NRepl; SE = ( exp(-r*T) * sqrt( (S2 - S1^2/NRepl) )/(NRepl-1) ); IC(1) = P - 1.96*SE; IC(2) = P + 1.96*SE;

La fonction dispMC permet l'impression organis des rsultats et se trouve sur la disquette fournie. 3. Calculer le prix du call avec la fonction MC01 en choississant les mmes valeurs pour NIncr et NRepl que prcdemment. Comme avant on initialisera le gnrateur des nombres au hasard et on imprimera les rsultats l'aide de dispMC. 4. Pour le calcul du payo il n'est pas necessaire de connatre toute la trajectoire des prix. Le prix nal sut et de ce fait on peut excuter MC01 en posant NIncr=1. Quelle est le temps d'excution dans ce cas. 5. Le gain de temps obtenu en posant NIncr=1 permet d'augmenter le nombre de rplications. Multiplier la valeur prcdente de NRepl par 100 et excuter MC01. 6. Commenter les rsultats.

Dans ce code les NIncr incrments du mouvement brownien gomtrique sont programms l'aide d'une boucle for. Etant donne que Matlab interprte les instructions dans une boucle chaque passage, l'xcution d'un tel code est relativement lent compar l'xcution d'instructions vectorielles qui font appel un code compil lors de l'excution. La fonction qui suit gnre, sans faire appel une boucle for, une matrice dont chaque ligne correspond une trajectoire.

Code /Teaching/MNE/Ex/MBG.m:

M. Gilli

Mthodes numriques  Recueil d'exercices

29

On sait que l'cart-type des prix calculs avec la mthode de Monte Carlo est proportionelle 1/ NRepl. On dsire vrier empiriquement ce fait. 7. Programmer la procdure suggre ci-aprs :
Initialiser ndeb = 1000 ; nfin = 100000 ; incr = 10000 ; Genrer le vecteur NReplvec = ndeb :incr :nfin ; pour i = 1 : length(NReplvec) faire Avec MC01 calculer ci (largeur de l'intervalle de conance)

10.5 BarrierOpt
Rappellons l'quation direntielle partielle
Vt + 1 2 2 S VSS + (r q)S VS r V = 0 2

et sa discrtisation aux noeud de la ligne i et la colonne j de la grille aux dirences nies


vi,j+1 vij
t

nfaire

n = linspace(ndeb,nfin) ; Calculer le facteur de proportionalit p = c1 n1 Calculer l'intervalle thorique cth i = p/ ni Plotter c et cth plot(NReplvec,c,'r*',n,cth,' :')

8. Ecrire la fonction [P,IC] = MCAT(S0,E,r,T,sigma,NIncr,NRepl) qui implmente la technique des variables antithtiques. On procdera en deux etapes : D'abord on construit [S1,S2] = MBGAT(S0,r,T,sigma,NIncr,NRepl) qui est une nouvelle version de la fonction qui gnre les trajectoires browniennes, o la ligne i de la matrice S2 contient la trajectoire de prix qui est parfaitement corrle avec la trajectoire contenu dans la ligne i de la matrice S1. Les instructions qui construisent ces deux matrices sont donnes ci-aprs :

1 2 2 vi+1,j 2vij + vi1,j Si + 2 2 S vi+1,j vi1,j r Si r vij = 0 . 2 S

Lorsque S0 = 0 on substitue souvent Si par Si = i S pour i = 0, 1, . . . , N et S = (SN S0 )/N . Si l'on veut aussi pouvoir considrer des valeurs positives pour S0 il convient cependant de procder la substitition suivante si = Si / S
vi,j+1 = 1 1 2 s2 t vi1,j + r si i 2 2 vij + 2 s2 t vij + rvij i 1 1 2 s2 t vi+1,j r si i 2 2
t

vi1,j vi+1,j .

Dif = sigdt*randn(NRepl,NIncr); En regroupant les variables on obtient l'expression Increments1 = trend + Dif; Increments2 = trend - Dif; v LogTrajectoires1 = cumsum([log(S0)*ones(NRepl,1) Increments1],2);i,j+1 = vij ai vi1,j bi vij ci vi+1,j LogTrajectoires2 = cumsum([log(S0)*ones(NRepl,1) Increments2],2); o les coecient sont dnies comme S1 = exp(LogTrajectoires1); S2 = exp(LogTrajectoires2); 2 2

1. En vue d'une structuration plus claire de l'implmentation des algorithmes bass sur les mthodes aux dirences Payoff = ( max( (S1(:,end)-E), 0) + max( (S2(:,end)-E), 0) nies on se propose d'crire une fonction Matlab FD1A qui ) / 2; calcule les matrices de coecients de la mthode theta. Calculer le prix du call avec la fonction MCAT en choissisOn suggre d'crire une fonction qui se presente comme : sant les mmes valeurs pour NIncr et NRepl que prcdemment. Commenter le rsultat. function [Am,Ap,S,dt,a1,cN] = FD1A(r,T,sigma,S0,Smax,M,N,t % 9. Est-ce-que l'cart-type des prix calculs avec variables an f7 = 1; tithtiques est aussi proportionelle 1/ NRepl ? dt = T / M; 10. Quel est le nombre de replications NRepl ncessaires si l'on S = linspace(S0,Smax,N+1); veut obtenir un intervalle de conance de 0.01. s = S(f7+(1:N-1)) / (S(2)-S(1)); On considre maintenant un option Asiatique dont le payo dpend de la moyenne discrte du sousjacent. Plus prcisment le payo est dni comme
1 N
N

La fonction MCAT aura alors la structure de la fonction MC01 dans laquelle on aura remplac l'appel MBG par un appel MBGAT et dont le vecteur du payo sera calcul comme :

ai bi ci

= = =

( si rsi )/2 2 2 t ( si + r) 2 2 ( si + rsi )/2 .

Calculer les vecteurs de coecients a, b et c et les matrices Am et Ap a1 = a(1); cN = c(N-1);

S(ti ) E
i=1 +

(42)

o ti = i t avec t = T /N . Ainsi il s'agit de considrer une moyenne sur N valeurs du sousjacent, le nombre N faisant partie de la dnition de l'option. 11. Ecrire la fonction [P,IC] = AsianMC(S0,E,r,T,sigma,N,NRepl) qui implmente ce payo. La structure de la procdure est la suivante :

pour i = 1 : NRepl faire nfaire

Calculer avec MBG une trajectoire avec N incrments Calculer le Payoff comme dni en (42)

Remarquez que les vecteurs a, b et c peuvent tre calculs sans recours aux boucles for. Le calcul des matrices Am et Ap est identique ce qui a t programm dans les procdures vues au cours. 2. Modiez la fonction EuPutCrNi prsente au cours an d'utiliser la fonction FD1A et appellez la fonction modie EuPutCN. 3. Tester la fonction EuPutCN en calculant le prix d'un put Europen pour S = 50, E = 50, r = 0.10, T = 5/12 et = 0.40. Pour les paramtres qui sont spciques la mthode numrique on choisira Smax = 100, M = 200 et N = 500. On considre maintenant des options barrire. Dans ce cas le prix de l'option dpend du fait que le sous-jacent S traverse (ou ne traverse pas) une certaine barrire Sb durant le temps qui s'coule jusqu' l'exercice. Dans le cas ou le prix initial S0 du sous-jacent vrie Sb < S0 on parle de up options et dans le cas contraire (Sb > S0 ) on parle de down options.

Avec normfit calculer la moyenne de Payoff et un intervalle de conance

12. Calculer le prix du call de l'option Asiatique en choisisant N = 5. Les autres paramtres sont ceux de l'exemple prcdent.

M. Gilli

Mthodes numriques  Recueil d'exercices

30

Nous considrons un down and out put qui est une option put qui cesse d'exister si le prix du sous-jacent descend en dessous de la barrire Sb . Pour une telle option on a Sb < S0 et Sb < E avec E le prix d'exercice. Le prix d'une telle option peut tre calcul avec une mthode aux dirences nies en ne considrant que le domaine S > Sb avec les conditions aux bords
V (Sb , t) = 0

et

lim V (S, t) = 0

et les conditions terminales


V (S, T ) = (E S)+ .

4. Calculer le prix du call avec la mthode de Monte-Carlo. 5. Calculer le prix du call avec la mthode de Monte-Carlo en applicant la mthode de rduction de variance avec variables antithtiques. 6. Calculer le prix du call en utilisant le modle binomial multiplicatif. On rappelle que le coecient du mouvement la hausse u et le coecient du mouvement la baisse d sont dnies comme u = exp( t) d = 1/u On considre maintenant des options barrires qui ont pour caractristique que le payo prend la valeur zro lorsque le sous-jacent traverse un certain niveau dni au pralable. Une option Up-and-out call a un payo qui vaut zro lorsque le sous-jacent traverse une barrire prdenie B > St=0 un moment t [0, T ]. Si la barrire n'est pas travers le payo correspond au payo d'un call Europen, c'est--dire (ST E)+ . 7. Quelle mthode proposez vous utiliser pour le calcul d'un call up-and-out. (Proposer la mthode qui s'adapte le plus facilement ce problme). 8. Calculer le prix d'un call up-and-out avec une barrire Sb = 110, les autres paramtres sont ceux du call Europen introduit plus haut. 9. Dans un mme graphique tracer le prix du call Europen et le prix du call up-and-out pour S [70, 115].

4. Ecrire une fonction DOPutCN qui implmente la mthode aux dirences nies pour le calcul du prix de l'option down and out put. Indications : Il sura de modier EuPutCN comme suit : a) complter les argument d'entre avec Sb ; b) enlever le calcul de la condition au bord chaque pas temporel (cette condition vaut maintenant zro et a dj t initialise avec la commande V = zeros(N+1,M+1)) ; c) la correction de z(1) est inutile tant donn que V0j = 0. 5. Calculer le prix de l'option pour Sb = 40. Pour les autres paramtres on utilisera les valeurs donnes ci-dessus. 6. Dans un mme graphique reprsenter le prix du put Europen et du down and out put. Indication : Utiliser les commandes hold on pour tracer les courbes successives, et redimensionner la fentre graphique avec axis([30 110 0 3]). 7. Augmenter la volatilit en posant = 0.50. Recalculer les prix du put Europen et du down and out put et complter le graphique prcdent avec les nouveaux prix. Commenter. 8. Il est connu que dans certaines conditions la mthode de Crank-Nicolson produit des solutions qui oscillent et que dans ces cas une mthode implicite est prefrable. Illustrer ce phnomne en choisissant = 0.40, Sb = 47 et Smax = 80. Indication : A partir de DOPutCN construire DOPutIm. La seule modication consiste modier la valeur de theta. Redimensionner la fentre graphique avec axis([49 51 4*1e-3 6*1e-3]).
11

10.7 mnf-cc1
1. Expliquer brivement en quoi consiste une mthode numrique et quel est son intrt pratique. 2. On considre les mthodes aux dirences nies pour la solution d'quations direntielles partielles. Expliquer brivement le principe de ces mthodes, leurs avantages et leurs inconvnients. 3. Soit l'quation de Black-Scholes et les conditions aux limites pour un put europen P (S, t) :
P 1 2P P + 2 S 2 + rS rP = 0 t 2 S 2 S

10.6 OptionPricing00
Le 28 mai 2004 le prix d'un call Europen sur une action UBS tait cot 6 SFr alors que l'action s'changeait 89.90 SFr. Le prix d'exercise est de 87.50 SFr et le call expire le 17 septembre 2004. On sait que la volatilit moyenne est de 0.239 mais on ignore quel est le taux d'intrt du march r. 1. Dterminer le taux r en faisant l'hypothse que le call correspond au modle de Black-Scholes. Suggestion : On peut tablir le taux approximativement en traant l'volution du prix du call en fonction de r et relever la valeur de r qui correspond un prix de 6 SFr (les autres paramtres restant constants). 2. On admets maintenant que r = 0.0064. Recalculer le prix Black-Scholes du call avec cette valeur de r. 3. Calculer le prix du call avec la mthode de CrankNicolson.
11 Voir Zvan, R., K.R. Vetzal et P.A. Forsyth (2000) : PDE methods for pricing barrier options, Journal of Economic Dynamics and Control 24, 15631590.

avec
P (0, t) = Eer(T t)
S

lim P (S, t) = 0

P (S, T ) = (ES)+

(a) De quel type d'quation direntielle s'agit-il ? (b) De quelles faons, numriques et analytiques, peuton envisager sa solution ? (Expliquer sans prsenter les dveloppements mathmatiques.) (c) Quelles critiques peut-on formuler quant l'application directe d'une mthode numrique l'quation de Black-Scholes. 4. On considre maintenant la mthode explicite pour le calcul du prix du put d'une option europenne 3 mois d'chance avec un prix d'exercice de 20, un taux de march de 6% et une volatilit sous-jacente de 0.4. (a) Quelle valeur de est optimale pour la prcision de l'approximation de la drive par rapport au temps. On indiquera l'ordre p, c'est--dire l'exposant de = 10p , dans un environnement MATLAB sur PC. Qu'en est-il de la valeur du pas pour le calcul de la drive par dirence centre ? Commenter.

M. Gilli

Mthodes numriques  Recueil d'exercices

31

(b) On dsire maintenant calculer le prix du put qui correspond une valeur du sous-jacent de 25. En utilisant la valeur de retenue au point prcdent, dnir la dimension de la grille aux dirences, de sorte que ce prix calcul ne dpende pas des conditions aux limites. (On ne demande pas de calculer le prix.)

Excuter l'algorithme pour les direntes valeurs de qui caractrisent soit la mthode explicite, soit la mthode implicite ou celle de Crank-Nicolson. Comparer les rsultats obtenus avec la solution analytique pour l'quation de Black-Scholes.

10.8 mnf-cc2
Soit l'quation de Black-Scholes
2V V 1 V + 2 S 2 rV = 0. + rS t 2 S 2 S

10.10 compare-FDM Comparaison des mthodes aux dirences nies


1. Enumerer les principales mthodes pour la rsolution numrique d'quations direntielles partielles. 2. Pour chaque mthode indiquer brievement le principe, les avantages et les inconvenients. 3. Donner pour chaque mthode le nombre d'oprations lmentaires en fonction du nombre de pas temporels M et du nombre des pas pour la discretisation du sous-jacent. Detailler votre rponse. Sur la disquette jointe vous trouvez une procdure Matlab CompareFDM. Cette procdure fait appel des fonctions qui calculent le prix d'une option Europenne suivant la mthode explicite, implicite et la mthode de Crank-Nicolson pour ensuite comparer la prcision de ces mthodes avec la solution analytique de Black-Scholes. 1. Fournir la fonction pour le calcul de la solution analytique et coder son appel dans la procdure CompareFDM. 2. Pour N = 100, M = 30 et I = 3 comparer la prcision des trois mthodes. Commneter. 3. Augmenter M (M = 500) et observer le comportement des mthodes. Commneter. 4. Pour M = 30 et N = 200 commneter les rsultats. 5. Poser = .4 en gardant M et N comme avant. 6. On dsire maintenant que la solution ne s'carte pas plus que de 0.001 de la solution analytique. Choisir des valeurs de N , M restant 30, pour obtenir cette prcision avec au moins une des mthodes. Commenter. 7. Peut-on atteindre une prcision de .0001 ? Commneter. 8. Donner un commnetaire gnral sur cet exercice.

Ecrire cette quation aprs les changements de variables suivants :


x v(x, ) = = = log(S/E) T t V /E.

Discrtiser l'quation direntielle obtenue en remplaant v/ et v/x par une dirence progressive et 2 v/x2 par une dirence centre. Dnir une grille de dirences nies en choisissant N pas temporels. Pour la variable x on centrera la grille au point x = 0, puis on choisira une borne infrieure L, une borne suprieure de L et un nombre de pas M dans la direction positive et dans la direction ngative. Ecrire et implmenter l'algorithme qui calcule soit un call, soit un put pour une option europenne. Pour l'application on choisira r = 0.05, = 0.2, T = 0.5, E = 10, L = 1, M = 12 et N = 25. Comparer les rsultats obtenus avec la solution analytique pour l'quation de Black-Scholes.

10.9 mnf-cc3
Soit l'quation de Black-Scholes
1 2V V V + 2 S 2 + rS rV = 0. t 2 S 2 S

Ecrire cette quation aprs les changements de variables suivants :


x v(x, ) = = = log(S/E) T t V /E.

10.11 FDMCiba
On considre le call Europen sur l'action CIBN qui expire le 17 juin 2005 (64 jours) avec un prix d'exercise de 80. Sachant que le prix actuel de CIBN est de 81 et en considrant un taux du marche de r = 0.005 et une volatilit de = 0.13, calculer le prix du call avec le modle de Black-Scholes en utilisant la mthode :     analytique, explicite, implicite, Crank-Nicolson.

Discrtiser l'quation direntielle de sorte qu'elle puisse tre rsolue avec la mthode dite method. Dnir une grille de dirences nies en choisissant N pas temporels. Pour la variable x on centrera la grille au point x = 0, puis on choisira une borne infrieure L, une borne suprieure de L et un nombre de pas M dans la direction positive et dans la direction ngative. Ecrire et implmenter la mthode dite method qui calcule soit un call, soit un put pour une option europenne. Pour l'application on choisira r = 0.05, = 0.2, T = 0.5, E = 10, L = 1, M = 12 et N = 25.

Comparer dans un mme graphique les prix obtenus avec les trois mthodes numriques avec la solution analytique.

M. Gilli

Mthodes numriques  Recueil d'exercices

32

2.5

Algorithme 7 Mthode de Monte Carlo pour option basket europenne. Initialiser S0 Rn , w, E , T , , r, et N v = r q diag()/2 Calculer U U = (dcomposition de Cholesky) pour i = 1 : N faire Gnrer N (0, In ) et calculer z = U S T = diag(S 0 ) exp v T + T z T P = max E j Sj wj , 0 (put) pi = exp(rT ) P

2.3465

Analytique Explicite Implicite CrankNicolson 2 80 81 82

nfaire

1 p = N i=1 pi (Calculer un intervalle de conance pour p)

Fig.

4  Exemple de presentation graphique des rsultats.

10.12 MCBasketPricing
On considre une option europenne sur n sousjacents dont le gain P au temps d'expiration T , aussi appel payo, est dnie comme
n

1. Calculer le prix d'une option put pour un basket sousjacents avec : 80 0.38 S (0) = 100 , w = 0.22 , = 50 0.40

de trois
0.25 0.35 , 0.20

P = max E
i=1

Si

(T )

wi , 0

(T avec E le prix d'exercise, Si ) , i = 1, 2, 3 les prix des sousjacents au temps T et wi , i = 1, 2, 3 des poids donns. Une telle option est appele un put et permet de couvrir les pertes lorsque la valeur de la combinaison pondre des trois sousjacents, appel le basket, tombe en dessous de E .

21 = 0.65, 31 = 0.25, 32 = 0.50, r = 0.045, T = 1 et E = 70. On rappelle que la matrice est dnie comme 2 1 21 1 2 31 1 3 2 21 2 1 2 32 2 3 . 2 31 3 1 32 2 3 3

On pourra choisir N = 104 pour le nombre des trajectoires simules.

On peut valuer le prix d'une telle option avec la mthode de Monte Carlo en simulant les prix des sousjacents par un mouvement brownien gomtrique. A partir d'un vecteur des prix donn S0 au temps 0, et en divisant l'intervalle de temps [0, T ] en M pas de longueur t = T /M on peut simuler des trajectoires de prix avec la relation
S (i
t)

11 Simulation
11.1 simul00
La fonction Matlab rand gnre des variables pseudo-alatoires uniformement distribues dans l'intervalle (0, 1). Avec la commande u = rand ; on gnre une ralisation de cette variable alatoire qui sera assigne la variable u. 1. En utilisant une boucle for gnrer un vecteur u de 1000 lments reprsentant chacun une ralisation de cette variable alatoire. Faire un histogramme des valeurs gnres. 2. On dsire simuler le rsultat d'un lancer de ds. On rappelle que chaque rsultat possible, c'est--dire 1, 2, 3, 4, 5 et 6 a la mme probabilit de 1/6 de se raliser. Pour simuler le rsultat x d'un lancer, on construira la procdure suivante :  Gnrer une ralisation u d'une variable alatoire uniforme  Si u < 1/6, alors x = 1 et arrt  Sinonsi u < 2/6, alors x = 2 et arrt  Sinonsi u < 3/6, alors x = 3 et arrt  Sinonsi u < 4/6, alors x = 4 et arrt  Sinonsi u < 5/6, alors x = 5 et arrt  Sinon x = 6 Ecrire le programme qui traduit cette procdure. (On se servira des instructions if, elseif et else).

= diag(S ((i1)

t)

) exp v

avec
v = r q diag()/2 = r q1 q2 . . . qn

i = 1, 2, . . . , N (43)
2 1 /2 2 2 /2 . . . 2 n /2

et ou r est le taux du march, q le taux de dividende, z est un vecteur alatoire distribu comme N (0, ) et ou est la matrice des variances et covariances des prix S . L'oprateur diag transforme un vecteur en une matrice diagonale. Lorsqu'on l'applique une matrice il construit un vecteur avec les lments de la matrice. En remplaant dans (43) t par T on peut directement simuler les prix S (T ) partir de S (0) en un seul pas
S (T ) = diag(S (0) ) exp v T + Tz .

(44)

On simule alors N vecteurs S (T ) et on calcule les payos correspondants et on escompte leur valeur l'instant t = 0. La moyenne des ces valeurs actualiss constitue alors le prix de l'option. L'algorithme 7 rsume la mthode de Monte Carlo pour l'valuation d'une option basket europenne sur n actifs.

M. Gilli

Mthodes numriques  Recueil d'exercices

33

3. Reprendre le programme de la question prcdente et le modier de sorte que l'on puisse simuler un vecteur x de 1000 rsultats. 4. Construire un vecteur f dont l'lment f (i), i = 1, 2, . . . , 6 contient le nombre de fois o l'on a obtenu x = i dans la simulation prcdente. Faire un diagramme en batons qui reprsente les lments de f . 5. On se demande maintenant combien d'essais sont ncessaires, en moyenne, pour obtenir le rsultat x = 6. Ecrire un programme qui simule la succession de lancers jusqu' l'obtention de x = 6. (On se servira de l'instruction while). 6. Repter 1000 fois la simulation prcdente et calculer le nombre moyen de lancers.

4. On considre maintenant l'exprience o l'on compte le nombre de lancers pour obtenir la premire fois face". On appellera n ce nombre. Ecrire une procdure qui calcule n. 5. On dsire rpter l'exprience prcdente N fois. Ecrire une procdure qui construit un vecteur R dont les N lments contiennent les rsultats des N rptitions de l'exprience. Choisir N = 320. Faire un histogramme des rsultats. On sait que la probabilit d'obtenir face" au cinqime lancer est gale (1 p)4 p avec p = 1/2 s'il s'agit d'une pice honnte. Ainsi, en moyenne, on devrait observer thoriquement N (1 p)4 p = 10 expriences pour lesquelles face a t obtenu la premire fois au cinquime lancer. Vrier empiriquement ce rsultat.

11.2 simul01
1. On considre l'exprience o l'on compte le nombre de fois que l'on obtient face" en lanant n fois une pice de monnaie. On appellera S ce nombre. Ecrire une procdure qui calcule S en fonction de n. 2. On dsire rpter l'exprience prcdente R fois. Ecrire une procdure qui construit un vecteur S dont les R lments contiennent les rsultats des R rptitions de l'exprience. Choisir n = 100 et R = 200. Essayer de reprsenter les rsultats avec un graphique semblable celui qui suit :
Nombre de succes pour n lancers 100

11.3 VaMv
Le chier H:\input\RetFNS.mat contient les rendements journaliers des indices FTSE, Nikkei et S&P500 observes sur la priode du 1 avril 1986 au 15 dcembre 2003. On peut lire ce chier avec la commande load et voir les variables charges avec whos. Pour la suite de l'exercise on ne considre que les deux premires colonnes de la matrice des rendements, c'est-dire celles qui correspondent aux rendements du FTSE et Nikkei (colonne 1 et 2 de la matrice R). Pour rpondre aux questions qui suivent on pourra se servir d'un script unique. 1. Calculer la moyenne r = [rx ry ] des rendements et la matrice des variances covariances Q des ces rendements (Q sera calcule partir d'un sous-ensemble de colonnes de R). 2. On considre maintenant la variable alatoire normale multivari z N (r, Q), z = [x y] . Rappelons que
S = (z r) Q1 (z r) 2

90

80

70 Nombre de succes

60

50

40

30

20

et

10

S 2 = 0 ,

20

40

60

80

100 120 R repetitions

140

160

180

200

3. Reprendre la procdure du point 2 et la complter an de calculer la moyenne


ES = 1 Si R i=1
R

du nombre de faces obtenu et l'cart quadratique moyen


VS = 1 (Si ES)2 R 1 i=1
R

de ce nombre. Transformer les observations Si comme


Vi = Si ES VS i = 1, . . . , R .

dnit l'intervalle de conance simultan au seuil de avec 2 le 1 quantile de la distribution 2 degrs , de libert. Rappellons que le nombre de degrs de libert est gal la dimension du vecteur z et qu'en gnral on utilise = 0.05. Pour dessiner l'intervalle de conance on procde comme suit :  dnir le domaine pour z , c'est--dire x [L, U ] et y [L, U ], (on pourra choisir L = 0.07 et U = 0.07)  construire le vecteur xi = L + i , i = 0, 1, . . . , n et = (U L)/n, (choisir n = 80)  construire le vecteur yi = L + i , i = 0, 1, . . . , n et = (U L)/n  valuer la forme quadratique (z r) Q1 (z r) pour les n n vecteurs z = [xi rx yj ry ]  dessiner la ligne de niveau correspondant S = 2 , Ceci est rsum avec le pseudo-code qui suit :
Choisir L, U , n et Initialiser S Rnn (utiliser chi2inv) c = 2 , xi = L + i , i = 0, 1, . . . , n et = (U L)/n linspace)

Faire un histogramme avec 9 classes qui reprsentent les lments du vecteur V .

(utiliser

M. Gilli

Mthodes numriques  Recueil d'exercices

34

linspace)

yi = L + i

, i = 0, 1, . . . , n et

= (U L)/n

(utiliser

11.5 RandU
Soit la rcursion
xi+1 = c xi mod M i = 1, . . . , n

pour i = 1 : n faire pour j = 1 : n faire nfaire nfaire

z = [xi rx yj ry ] Sji = z Q1 z

(45)

plot(rx ,ry ,'r+'), hold on contour(x,y ,S ,[c c]) xlabel('x'), ylabel('y')

avec c = 65539 et M = 231 et o a mod b est le reste de la division entire a/b. A partir de cette rcursion on peut construire des variables dites pseudo-alatoires
ui = xi /M i = 1, . . . , n

Dans la commande contour une colonne de la matrice S reprsente les valeurs de la forme quadratique pour un xi donn, c'est pourquoi dans la construction de la matrice S l'indice des lignes varie avec y . 3. Gnrer n = 1000 ralisations du vecteur alatoire z N (r, Q). 4. Completer le graphique de l'intervalle de conance en traant un point pour chaque vecteur gnre. crire une procdure qui compte les points n situs en dehors de l'intervalle de conance et imprimer la proportion n /n de ces points par rapport au total. Commenter. 5. Rexcuter le script en posant = 0.001. Commenter.

uniformement distribues dans l'intervalle [0, 1]. 1. Ecrire une fonction Matlab RandU qui gnre un vecteur u de variables pseudo-alatoires. La fonction aura la structure u = Randu(n,seed) o n le nombre d'lments que l'on dsire gnrer et seed la valeur de dpart de la rcurrence. Si la fonction est appelle sans le deuxime argument on posera seed = 1. 2. Gnrer un vecteur u avec n = 10000 et vrier la distribution uniforme des lments dans u avec un histogramme. Que peut-on conclure ? 3. A partir du mme vecteur u gnrer les coordonnes

11.4 MCpi
An d'obtenir le nombre par une mthode de Monte Carlo, considrons la gure suivante :
1
. ... .. ............. ............ ......... . ............. . .... ..... .... ..... . .. . ... .... ... ... ... ... ... . . ... ... ... . ... . . . . ... ... . . . .. .. .. .. .. .. . .. yi .. .. .. .. .. .. ... ..... ..... ... .. . .. . .. ... . .. .. . ... . .. .. ... . .. ... . .. . . . . . ... . ... . . . . . . . . . . . ... . ... . . . . . . . . ... . ... . . . . . . . . . . .... . . . . .... . . . . . . . . . ... . . . . . . ..... . . .. .... .... .... .... .... ..... .... .... .... .... ..... . ... . . . .... ... ... ... ... ... ... . ... ... . .. ... ... . .. . . . . . . . . . . . . . . xi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. .. . . .. . .. .. .. . . .. .. .. . . ... .. ... . . ... ... ... . ... ... ... ... ... ... ... ... . ... . . .... ... . .... ... . ..... .... ..... .... ......... . ............. ............. ............ . ..... .

(u2i+1 , u2i+2 )

i = 0, 1, . . . , (n 1)/2

de (n1)/2 points dans R2 et faire un graphique.12 Que peut-on conclure ? 4. Toujours partir du vecteur u gnrer les coordonnes
(u3i+1 , u3i+2 , u3i+3 ) i = 0, 1, . . . , (n 2)/3

de (n2)/3 points dans R3 et faire un graphique (utiliser plot3). Que peut-on conclure ?13 Essayez d'eectuer une rotation du graphique. Que peut-on constater ?

11.6 Moca-00
Soit la fonction
f (x) = 1 1 + 6 (x 0.3)2 + 0.01 (x 0.9)2 + 0.04

On vrie que le rapport de l'aire du cercle sur l'aire carre est r2 /4 = /4. En gnrant alatoirement n points (x1 , y1 ), . . . , (xn , yn ), uniformment distribus dans le carr de base 2, on peut estimer la quantit /4 en calculant le rapport nc /n du nombre des points nc qui se trouvent l'intrieur du cercle sur le nombre total des points n. Pratiquement, on peut procder comme suit :  Poser n = 50.  Initialiser le gnrateur de nombres au hasard avec la valeur 123456789.  Gnrer 2 vecteurs u et v uniformment distribus dans [0, 1[.  Transformer u et v en x et y uniformment distribus dans [1, 1[.  Calculer r = x2 + y 2 .  Calculer nc le nombre d'observations pour lesquelles ri 1.  Calculer = 4 nc . n  Calculer l'erreur relative entre et = 4 atan(1).  Refaire les calculs pour les valeurs n = 100, 1000, 10000.

(46)

1. crire la fonction Matlab y = bosses(x) qui value (46) pour un vecteur x donn. 2. Faire un graphique de la fonction (46) dans le domaine x [2, 2] en se servant de la fonction Matlab fplot. 3. A l'aide de l'algorithme de la bissection rechercher les zros de la fonction (46). 4. valuer l'intgrale
b

I=
a

f (x)dx

(47)

avec a et b les zros de la fonction. Une faon d'obtenir numriquement une approximation pour l'intgrale (47) consiste dnir un domaine D R2 , comme il est montr dans la gure qui suit.
12 On note x le plus proche entier de x vers zro. 13 Pour une discussion dtaille voir Marsaglia, G. (1968) : Ran-

dom numbers fall mainly in the planes. Proc. National Academy of Sciences USA 61, 2528.

M. Gilli

Mthodes numriques  Recueil d'exercices

35

c
. .... ..... . . . .. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . . .. .. . .. .. .. . .. ... ... .. ..... ... ... .... ....... ....... . . ...... .......... ...... ...................... ..... ... ... . .............. ..... .. ...... ....... .... ..... . .. .......... ........ ......... . ..........

valeur p de G. La gure qui suit illustre ce procd.


G(y) 1 p
. .. .. .. . ... .......................................................................... ... .......................................................................... ... . .. .... . .. ..... . .... .... .... ... ... ... . ... ... .. .. .. .. .. .. .. ........................... ... ........................... .. . ... .. . .. . . . .. . . . .. . . . . .. . .. . .. . . . .. . . . .. . . . .. . . . .. . . .. . . . . .. . . . .. . .. . .. . . . .. . .. . .. .. . . ... ... . . . . .. . ... ... . . .... .. . ... ..... . . .....

Le domaine D est le rectangle de base b a et de hauteur c, ayant pour surface


S = c (b a) .

On gnre n points alatoires, donns par les couples (xi , yi ), i = 1, . . . , n, o x et y sont uniformment distribus dans le domaine D. Soit p le nombre de points se trouvant en-dessous de la fonction, alors p S n est une approximation de l'intgrale (47). On appelle cette technique, utilise ici pour approcher notre intgrale, la mthode de Monte-Carlo14 . 5. En choisissant c = 150, gnrer n points dans D comme dcrit plus haut, en construisant notamment les deux vecteurs de coordonnes x et y . En choisissant, par exemple n = 10, vrier que les points se trouvent dans D. On peut visualiser les points dans le domaine avec les commandes : figure(clf) ; fplot('bosses',[a b 0 c]) ; hold on ; plot(x,y,'+') ; 6. Calculer une approximation de l'intgrale (47), avec c = 150 et n = 100. 7. Rpter 1000 fois le calcul de l'intgrale (47) avec la mthode de Monte-Carlo et calculer la moyenne ainsi que l'cart-type des rsultats obtenus. 8. En posant c = 100 rpter la simulation de la question prcdente. Que constate-t-on ? Commenter brivement. 9. On peut montrer que l'approximation de cette intgrale par la mthode de Monte-Carlo suit une variable alatoire distribue selon une loi normale. Construire l'histogramme correspondant aux rsultats des 1000 repetitions (commande hist et bar). Commenter brivement.

Comme G est une fonction de distribution, elle vrie 0 G 1. Ainsi les valeurs de p peuvent tre gnres comme des variables alatoires uniformes. On vrie aisment que l'inverse de la fonction G s'crit
y= e log(1p) 1 .

(49)

1. Initialiser le gnrateur des nombres pseudo-alatoires avec la valeur 99999. 2. Gnrer n = 100 ralisations d'une variable alatoire uniformment distribue dans [0, 1[. 3. Gnrer n = 100 ralisations de la distribution dnie en (48) en utilisant la transformation denie en (49). On considre maintenant que les n ralisations de G sont donn n nes dans un ordre croissant, y1 yn . La distribution empirique est alors dnie comme
i n Gn (yi ) = n i = 1, . . . , n.

(50)

4. Pour y [0, 20] faire un graphique de la fonction G(y) dnie en (48). 5. Dans la mme fentre, dessiner les couples
n (yi ,

i ) n

i = 1, . . . , n

qui dnissent la distribution empirique Gn (on ne marquera que les points de la fonction, sans les relier). Ne pas oublier que les variables y doivent tre ranges dans l'ordre croissant.

La fonction de densit de la distribution de Pareto gnralise s'obtient en drivant (48) et s'crit


g(y) = (1 + y)
1 1

(51)

11.7 GPDex
On considre la fonction de distribution de Pareto gnralise qui s'crit
G(y) = 1 (1 + y)1/

Etant donnes n observations, la vraisemblance est dnie comme n


V =
i=1

g(yi )

(52)

et le logarithme de la vraisemblance comme


n

(48)

L=
i=1

log(g(yi )).

(53)

avec = 1/2. On dsire gnrer des ralisations de cette distribution. Pour ce faire, on inverse la fonction G, c'est--dire que l'on cherche la valeur de l'argument y correspondant une
14 C'est en raison du recours la gnration de nombres au hasard, pour laquelle on pourrait se servir d'une roulette, que l'on a donn cette technique le nom de mthode de Monte-Carlo".

6. Pour 40 valeurs de allant de 0.3 0.7, valuer les fonctions (52) et (53). Faire un graphique de ces deux fonctions dans deux fentres juxtaposes (subplot(211) et subplot(212)). Vrier que les fonctions attaignent leur maximum pour une valeur proche de 1/2. Commenter.

M. Gilli

Mthodes numriques  Recueil d'exercices

36

7. Selon la procdure indique plus haut, gnrer maintenant n = 500 ralisations de la distribution gnralise de Pareto. Faire les graphiques de la vraisemblance et du logarithme de la vraisemblance commme dni en (52) et (53). Commenter les rsultats.

1.9 1.85 1.8 1.75 1.7 1.65

11.8 MCVar
On vrie aisment que l'intgrale dnie I de la fonction exponentielle ex sur l'intervalle [0, 1] vaut approximativement
1

1.6 1.55 1.5 0


Fig.

50

100

150

200

I=
0

ex dx = e 1 1.7183 .

5  Approximations et intervalle de conance.

(54) On peut s'attendre que la prcision de notre approximation In augmente lorsque n augmente (ou vice-versa que In diminue lorsque n augmente). On se propose maintenant d'tudier empiriquement la relation qui existe entre n et In . 5. Pour n = 2i , i = 7, . . . , 12 calculer In . Faire un graphique des 6 couples (n, In ). Dans le mme graphique tracer la fonction y = c/ n pour 27 n 212 et c = 0.5 (voir la Figure 6).
Valeurs empiriques 1/sqrt(n)

Une approximation numrique In de I peut tre obtenu par la mthode de Monte Carlo. Cette approximation est dnie comme
In = 1 n
n

eui
i=1

(55)

o les ui sont des ralisation d'une variable alatoire uniformement distribue dans l'intervalle [0, 1]. 1. A l'aide de l'instruction Matlab for crire la procdure qui calcule In pour n = 100. Etant donn que les ui sont des ralisations d'une variable alatoire, l'approximation In , qui est une fonction des ui , est galement une variable alatoire. Concrtement cela veut dire que la valeur de In change d'une excution l'autre. 2. Reprendre la procdure de la question prcdante et la complter avec les instructions ncessaires pour pouvoir l'excuter R fois. Poser R = 5, excuter la procdure et observer les dirents rsultats obtenus pour In . 3. Une mesure de la variabilit est donne par l'cart quadratique moyen qui est dni comme
V (In ) = 1 R
R r (In I)2 r=1

0.045 0.04 0.035 Ecarttype 0.03 0.025 0.02 0.015 0.01 0.005 0 0
Fig.

1000

2000 n

3000

4000

(56)

6  Evolution de l'cart-type empirique.

Que peut-on conclure ?


r o In sont r = 1, . . . , R approximations de In . Reprendre la procdure du point prcdant et la complter an de calculer l'cart quadratique moyen de l'approximation de l'intgrale (54) pour n = 100 et R = 200.

12 Optimisation
12.1 PL00
Une entreprise qui produit de la nourriture pour chiens en gros dcide d'entrer dans le march de dtail avec 3 nouveaux produits. Ces produits sont :  Seniordog nourriture pour vieux chiens,  Topdog nourriture pour animaux en pleine maturit,  Pupdog nourriture pour chiots. Les ingrdients de ces trois produits sont constitus par les 4 produits A, B, C et D vendus jusque-l en gros. Du point de vue nutritionnel on a tabli que :

La racine de l'cart quadratique moyen est appelle cart-type et est not In . L'cart-type sert construire des intervalles de conance. Ainsi on tablit, qu'en moyenne, 5% des approximations In gnres avec notre procdure s'carteront de plus de 2 In de la moyenne qui est I . 4. Question facultative : Pour n = 100 et R = 200 compter le nombre d'approximations qui se trouvent en dehors de cet intervalle. On peut faire un graphique et compter les approximations qui se trouvent en dehors de l'intervalle (voir la Figure 5).

M. Gilli

Mthodes numriques  Recueil d'exercices

37

 Seniordog doit contenir au moins 25% de B et pas plus de 20% de C,  Topdog doit contenir au moins 50% de A et pas plus de 25% de D,  Pupdog doit contenir au moins 25% de A, au moins 25% de B et 0% de C. Les quantits disponibles de A, B, C et D sont limites 1000, 1000, 750 et 800 kg par semaine. Les prix respectifs sont : 2.00 fr/kg, 2.40 fr/kg, 1.60 fr/kg et 1.80 fr/kg. Le prix de vente des trois nouveaux produits a t x 3.60 fr/kg pour le produit Seniordog, 3.40 fr/kg pour le produit Topdog et 3.60 fr/kg pour le produit Pupdog. On fait l'hypothse qu' ces prix de vente la demande sera suprieure l'ore, c'est--dire que toute la production pourra tre vendue. Il se pose ds lors la question du mlange de A, B, C et D choisir an de maximiser le prot. 1. Formuler le programme linaire en procdant selon les tapes suivantes :  dnition des variables de dcision,  dnition de la fonction objectif,  dnition des contraintes. 2. Chercher la solution numrique. ,

Le problme est de trouver la solution de


=[ ]

max

ln L(; X, y) .

On utilisera la fonction fminsearch de Matlab pour rsoudre ce problme et de ce fait on minimisera ln L . On aimerait appliquer cette mthode pour estimer une quation d'investissement pour les Etats-Unis15 .
On explique l'investissement rel (I ) par une fonction linaire du produit national brut en termes rels (GNP) et du taux d'intrt rel (r) : It = 0 + 1 GNPt + 2 rt + t , t = 1964, . . . , 1982 . (58)

Le chier v:\metri\mne\arml.dat contient un tableau de donnes16 sur l'investissement nominal (I ), le produit national brut nominal (GNP), l'indice des prix (P ), et le taux d'intrt nominal (r) pour les Etats-Unis sur la priode 19631982. 1. Calculer les variables utilises dans l'quation (58). Le produit national et l'investissement en termes rels s'obtiennent en divisant les donnes nominales par l'indice des prix de la priode. Une approximation du taux d'intrt rel est obtenue en soustrayant le taux de variation de l'indice des prix au taux d'intrt nominal :
rt = rt 100 (Pt Pt1 ) Pt1 , t = 1964, . . . , 1982 .

12.2 ARML
On dsire eectuer une estimation du modle suivant par la mthode du maximum de vraisemblance :
y = X + ,

(57)

avec y R

T 1

,XR

T K

et
, t = 1, . . . , T ,

t = t1 + ut || < 1 , iid ut N (0, 2 ) ,

ainsi que les autres hypothses classiques. Ce modle est connu sous le nom de  modle linaire avec autocorrlation des erreurs. Dans ce cadre, les estimateurs des moindres carrs ordinaires ne sont plus ecaces et une alternative consiste recourir aux estimateurs du maximum de vraisemblance. La vraisemblance du modle (57) s'crit
T

L(; X, y) =
t=1

ft (; X, y) ,

2. Dvelopper analytiquement le produit Ry an de faire apparatre la transformation opre par R sur les lments de y . Donner une expression Matlab calculant y = Ry sans eectuer de produit matriciel. Donner aussi l'expression correspondante pour X = RX . 3. Programmer une fonction Matlab logl(theta,X,y) qui calcule ln L en fonction de = [ ] de dimension (K + 2) 1, de X et de y . Dans logl, on programmera d'abord le calcul X et y pour ensuite utiliser ces rsultats dans l'expression de la vraisemblance. Indication : logl([-10 0.2 -1 10 0.5]',X,y)=130.225. 4. Utiliser la fonction fminsearch de Matlab de la faon suivante an d'obtenir l'estimation voulue : theta = fminsearch('logl',theta0,[ ],X,y) . Le vecteur theta0 contient les valeurs initiales suivantes pour les paramtres : = estimation de par les m.c.o. , = /(T K), o = y X , T T = 2 . t=2 t t1 / t=2 t Vrier que l'on obtient les rsultats suivants :
ML ML ML = = = [14.4921 0.1701 0.8249] , 15.2655 , 0.2795 .

o ft dsigne la densit des observations et est le vecteur des paramtres estimer contenant , et . On maximise en gnral ln L plutt que L, car son expression est plus simple utiliser et les solutions sont invariants par rapport cette transformation.

5. Imprimer les rsultats sous la forme suivante : Dans notre cas on a ---------------------------------------------T 1 1 Estimateur Constante GNP Intrt rho 2 2 ln L(; X, y) = ln(1 ) ln(2 ) 2 (yX) R R(yX) , 2 2 2 ---------------------------------------------avec OLS -12.533 0.169 -1.001 0.222 ML -14.492 0.170 -0.824 0.279 ---------------------------------------------1 2 0 0
R= 0 0 1 0

.. ..

. . .

. .

..

..

0 . . . 0 1

15 Greene, W.H., Econometric Analysis, MacMillan, New York, 1990, p.430. 16 Source : Economic Report of the President, Government Printing Oce, Washington D.C., 1984.

M. Gilli

Mthodes numriques  Recueil d'exercices

38

13 A classer
13.1 graph00
Soit la fonction
y = x3 + 3x2 3x 1

13.3 kron-1
Soit deux matrices A et B non-singulires et d'ordre p respectivement q . Le produit de Kronecker vrie alors les proprits suivantes : (A B)1 = A1 B 1 (61)
det(A B) = [det(A)]q [det(B)]p

et sa drive
d = 3x + 6x 3 .
2

(62)

1. Construire un vecteur x avec 40 lments. Le prmier lment a la valeur 4, le dernier la valeur 2 et la dirence de valeur entre deux lments successifs est constante. 2. Calculer le vecteur y qui correspond au valeurs du vecteur x. 3. Calculer le vecteur d qui correspond au valeurs du vecteur x. 4. Dans une mme fentre, faire le graphique de la fonction et de sa drive. 5. Refaire le graphique de la fonction et de sa drive en dessinant le trac de la fonction en rouge et celui de la drive en vert. 6. Dans le mme graphique, tracer une ligne entre les deux points (x1 , y1 ) et (x2 , y2 ) avec x1 = 1, x2 = 1, y1 = 6 et y2 = 4. Les deux points seront marqus avec un petit cercle. 7. Ecrire le titre Inexion de f sur le graphique et marquer l'absisse avec le symbole x.

1. Construire deux matrices A et B de rang p = 5, respectivement q = 7, dont l'lment gnrique aij , respectivement bij est dni comme suit :
aij bij = = 1/(i + j 1) 1/(i + j 1) .

Indication : La j me colonne d'une telle matrice d'ordre n s'crit ones(n, 1)./(j : n + j 1)


2. Evaluer l'aide de la fonction kron et inv l'expression K1 = (A B)1 gauche dans (1) et l'expression K2 = A1 B 1 droite dans (1). A l'aide de la fonction flops comparer le nombre d'oprations lmentaires ncessaires ncessaires pour valuer K1 et K2. Commenter. 3. Evaluer K = AB . Calculer I1 = K K1 et I2 = K K2. Visualiser les matrices l'aide de la commande mesh(I1) et mesh(I2). Commenter. 4. Evaluer l'expression gauche et droite dans (2). Comparer le nombre d'oprations lmentaires ncessaires chaque valuation. Commenter.

13.2 kron-0
Soit deux matrices A et B non-singulires et d'ordre p respectivement q . Le produit de Kronecker vrie alors les proprits suivantes : (A B)1 = A1 B 1 (59)
det(A B) = (det(A))q (det(B))p

13.4 Maple-00
Avec Maple rpondre aux questions suivantes : 1. Calculer l'intgrale dnie
1

(60) 2. Calculer la somme

I=
0

ex dx

1. Construire deux matrices A et B de rang p = 5, respectivement q = 9, dont l'lment gnrique aij , respectivement bij est dni comme suit :
aij bij = = 1/(i + j 1) 1/(i + j 1) .

12

2i
i=7

Indication : La j me colonne d'une telle matrice d'ordre n s'crit ones(n, 1)./(j : n + j 1)


2. Evaluer l'aide de la fonction kron et inv l'expression gauche et droite dans (1). A l'aide de la fonction flops comparer le nombre d'oprations lmentaires ncessaires chaque valuation. 3. Multiplier le terme de gauche, puis celui de droite par son inverse (A B). Comparer les diagonales du produit. Commenter. 4. Evaluer l'expression gauche et droite dans (2). Comparer le nombre d'oprations lmentaires ncessaires chaque valuation.

13.5 Maple-01
A l'aide de Maple rsoudre les problmes suivants : 1. Ramanujan se demandait si le rsultat de l'expression
310 log((2 + 2) (3 + 5) (5 + 2 10 + 61 + 20 10)/4)

tait entier. Vrier numriquement que ce n'est pas le cas. 2. Evaluer l'expression suivante :
n1 n1

2
k=1

(n k)2 +
k=1

(n k)

M. Gilli

Mthodes numriques  Recueil d'exercices

39

3. Soit la matrice
A= 0 d 0 h m 0 a 0 f k 0 j 0 e g 0 n 0 b 0 0 0 0 r 0 0 0 l i 0 c 0 0 0 0 p

13.8 Maple-04
Ce problme est resoudre l'aide de Maple. Soit la fonction de densit de la variable alatoire normale de paramtre et .
f (x) = (x )2 1 exp 2 2 2 .

(63)

Calculer l'expression du dterminant et simplier le rsultat. Calculer la matrice inverse. 4. Diviser le polynome x5 x4 + 8x3 8x2 + 16x 16 par le polynome x5 x4 + 12x3 12x2 + 36x 36 et simplier le rsultat.

1. Calculer l'expression de la drive de f (x). 2. Determiner le maximum de f en cherchant la solution de f (x) = 0. 3. Determiner les point d'inection de f en cherchant les solutions de f (x) = 0. 4. Dans un mme graphique dessiner les fonctions de densit pour x [15, 15] et qui correspondent aux deux choix de paramtres suivants : = 3, = 4 et = 5, = 2.

13.6 Maple-02
A l'aide de Maple rsoudre les problmes suivants : 1. Ramanujan se demandait si l'expression qui suit tait un entier. 310 log((2 + 2) (3 + 5) (5 + 2 10 + 61 + 20 10)/4) Vrier numriquement que ce n'est pas vrai. 2. Factoriser l'expression
2 1 2 x+ + 2 x x x1 .

13.9 mlab-xxa
Soit erf(x), appele "fonction d'erreur" et (x), la fonction de rpartition de la loi normale centre-rduite. Ces deux fonctions sont dnies comme suit :
x

erf(x) =
0

2 2 et dt

et

(x) =

t2 1 e 2 dt 2

Dans le but d'tablir la relation entre ces deux fonctions, on propose de suivre les tapes suivantes : 1. A l'aide de lookfor rechercher la fonction de MATLAB qui calcule la valeur de (x) (on remarquera que la moyenne et la variance sont des paramtres en entre). 2. En explorant le code de cette fonction, tablir la relation qui existe entre (x) et erf(x). 3. Montrer que l'on peut obtenir le mme resultat numrique avec la fonction quad.

3. Driver le produit f (x)g(x) par rapport x. 4. Driver le quotient


f (x) g(x)

par rapport x.

5. Driver la fonction compose f (g(x)) par rapport x. 6. Dnir une fonction f telle que f (x) = 2x(x2 + 1).  Evaluer f (x) pour x gal aux expressions suivantes : 1+s i) 27 ii) 1 iii) a + b iv) 5 v) 1s  Qu'observe-t-on si l'on drive f en utilisant diff(f,x) ? Commenter.  Trouver la drive de f par rapport x. Pourquoi n'est il pas ncessaire de rassigner x comme un symbole avant de driver ?  Evaluer f (3). Avec Matlab Maple tablir programmer l'algorithme 3.2.4 et l'aide de la fontion du nombre d'oprations lmentaires.

13.10 mlab04
A l'aide du logiciel Matlab rsoudre le problme propos cidessous. Soit la fonction :
y = x3 + 3x2 3x 1.

13.7 Maple-03
A l'aide de Maple rsoudre le problme qui suit. Soit la fonction f : R R dnie par
f (x) = x . x2 + 1

1. Faire un graphique de cette fonction, avec la commande plot de Matlab. On dsire maintenant trouver les zros de cette fonction. On utilisera la mthode itrative de Newton, qui partir d'un point initial xo donne, calcule une meilleure approximation du point cherch, en remplaant la valeur de la fonction en un point par sa tangente. Les valeurs successives de x sont dtermines de la faon suivante :
xk+1 = xk f (xk ) f (xk ) k = 1, 2, 3, . . .

 Calculer la valeur de f pour x = 0, x = 1, x = 1.  Calculer lim f (x) et lim f (x).  Trouver les maximums, les minimums et les points d'inexion de la fonction f .  Tracer le graphe de f .
x x

La prcision du rsultat est juge susante lorsque la condition


|f (xk+1 ) f (xk )| <

est satisfaite, pour une valeur de donne.

M. Gilli

Mthodes numriques  Recueil d'exercices

40

2. En choisissant direntes valeurs initiales xo , calculer les zros de cette fonction. 3. Dterminer numriquement les extrema en appliquant cette mme procdure la drive de la fonction. Rendre un listing du programme et des rsultats.

13.15 mlab09
On pense qu'un phnomne suit une loi de probabilit de Poisson. On observe 4 ralisations qui sont :
X = {0, 1, 1, 3} .

On dsire estimer le paramtre qui caractrise cette loi de Poisson. Soit alors la probabilit conjointe
P (X | ) =
xX

13.11 mlab05
Dans les tests statistiques du type dit lambda on cherche les intersections de deux fonctions suivantes :
c = ln(u) u +k n 1. Construire un algorithme qui, pour des valeurs de n N et k R+ , determine les valeurs uinf et usup correspondant aux deux points d'intersection. d=

e x x!

qui, pour l'ensemble des observations X , s'crit :


P () = e4 5 6 .

L'estimateur du maximum de vraisemblance de correspond la valeur de qui maximise P (). Pratiquement on maximisera le logarithme de P en omettant les termes constants. On a alors
L() = 4 + 5 log .

2. Programmer cet algorithme sous la forme d'une fonction MATLAB. 3. Representer les fonctions et les solutions avec un graphique.

Rechercher qui correspond au maximum de L. Ce problme de maximisation peut se ramener un problme de recherche de zros d'une fonction, qui dans ce cas est la drive premire. 1. Appliquer l'algorithme de la bissection, ou un autre algorithme de votre choix, pour trouver la valeur de qui satisfait la condition du premier ordre. 2. Vrier le rsultat l'aide de la fonction fminbnd de MATLAB.

13.12 mlab07
Reprendre la fonction Matlab qui recherche les zros d'une fonction par la mthode itrative de Newton. Complter l'algorithme de telle sorte qu'il reproduise le droulement de la recherche d'une solution en une squence anime de graphiques.

13.16 mlab10
On dsire gnrer T observations d'une variable alatoire binomiale de paramtres n et p. 1. Avec MATLAB crire une fonction qui, pour n, p et T donns, gnre le vecteur x des T observations, ainsi que le vecteur f des frquences relatives. On a :
f (i) = (nombre de fois que x a pris la valeur i + 1)/T

13.13 mlab07b
Gnrer l'axe des x et l'axe des y d'un graphique dni de 10 10 pour l'ordonne et l'abscisse. A partir du point (x = 0, y = 0) dessiner des dplacements dnis par des accroissements x et y qui correspondent des ralisations d'une variable alatoire normale centre rduite. Lorsqu'un pas conduit se dplacer au del de la limite des axes on ne l'effectue pas. Crer le programme qui dessine ces dplacements en une squence anime.

La fonction s'crira :
function [f, x] = binom(n, p, T)

et l'on prvoira avec nargout le cas o seul le vecteur f est dsir. 2. Construire une fonction qui calcule la probabilit d'une variable alatoire binomiale de paramtres n et p. On aura :
function prob = p_binom(n, p)

13.14 mlab08
On considre la fonction de Rosenbrock :
f (x1 , x2 ) = 100(x2 x2 )2 + (1 x1 )2 1 .

3. Pour des valeurs de n, p et T de votre choix, faire un plot superpos de f et de prob. Commenter. On sait que la distribution d'une variable alatoire binomiale tend vers une variable alatoire normale pour des valeurs de n et p telles que np > 30. 4. Pour des valeurs (n=10, p=.5), (n=50, p=.1) et (n=500, p=.01) faire un plot superpos de la probabilit binomiale et de la densit normale correspondante. Commenter.

Donner une reprsentation en trois dimensions de cette fonction ainsi que un graphique avec les lignes de niveau. Que peut-on conclure quant au domaine pour lequel la fonction est minimum.

M. Gilli

Mthodes numriques  Recueil d'exercices

41

13.17 mlab10a
Un tirage de Bernoulli consiste en une exprience dont le rsultat est soit un succs, soit un chec. On note p la probabilit de succs et 1 p la probabilit d'chec. Avec MATLAB, il est facile de simuler une telle exprience. On gnre une ralisation z d'une variable alatoire uniforme et si z p, on considre le rsultat comme un succs (chec dans le cas contraire). Considrons maintenant n tirages indpendants de Bernoulli. Le nombre total de succs obtenus y suit alors une loi dite binomiale, que l'on note y B(n, p). Pour gnrer une telle variable, on considre un vecteur alatoire uniformment distribu de dimension n et la variable binomiale correspond au nombre d'lments infrieurs p. 1. Avec MATLAB, crire une fonction qui gnre un vecteur x de T observations d'une variable binomiale de paramtres n et p donns, ainsi que le vecteur f des frquences relatives. On a :
f (i) = (nombre de fois que x a pris la valeur i 1)/T

1. Que reprsente VC ? 2. Existe-t-il une faon plus ecace, pour MATLAB, de calculer VC ? Si oui, proposer une alternative. Pour n = 5 et m = 50 comparer la performance du programme original avec celui propos. On comparera notamment le temps de calcul et le nombre d'oprations lmentaires. Prsenter les rsultats exactement sous la forme que voici :
Matrice VC : a(1,1)= 0.8 a(2,1)=-0.1 a(3,1)= 0.1 a(4,1)=-0.2 a(5,1)= 0.0 a(1,2)=-0.1 a(2,2)= 0.9 a(3,2)= 0.1 a(4,2)=-0.1 a(5,2)= 0.0 a(1,3)= a(2,3)= a(3,3)= a(4,3)= a(5,3)= 0.1 0.1 1.0 0.0 0.1 a(1,4)=-0.2 a(2,4)=-0.1 a(3,4)= 0.0 a(4,4)= 1.3 a(5,4)=-0.4

a(1,5 a(2,5 a(3,5 a(4,5 a(5,5

Mthode originale : flops = ..... elapsed time = ...... Alternative : flops = ..... elapsed time = ......

Le traage du cadre est facultatif.

fonction s'crira :
function [x, f] = binom(n, p, T)

13.19 mlab13
Un des problmes courants rencontrs dans la modlisation input/output consiste, partant d'une matrice A donne, construire une matrices S , dont la somme des lignes est gale un vecteur u et la somme des colonnes gale un vecteur v . La mthode RAS17 constitue un algorithme ecace pour obtenir une approximation de la solution de ce problme. Cet algorithme s'nonce comme suit :  So = A  Pour i = 1, 2, . . . , faire

l'on prvoira avec nargout le cas o seul le vecteur x est dsir. 2. Construire une fonction qui calcule les probabilits d'une variable alatoire binomiale de paramtres n et p. On crira : function prob = p_binom(n, p) ou prob(i) = P {y = i 1}, i = 1, . . . , n + 1. On a k P {y = k} = Cn pk q nk et on rappelle que les coecients binomiaux vrient la rcurrence suivante :
k+1 Cn =

nk k Cn k+1

3. Pour des valeurs de n, p et T de votre choix, faire un graphique qui contenant les valeurs de f et de prob. Commenter. (Pour le graphique, on pourra utiliser la commande plot(0 :n,f,'+',0 :n,prob,'o')). 4. On sait que la distribution d'une variable alatoire binomiale tend vers une variable alatoire normale pour des valeurs de n et p telles que min(np, nq) > 15. Pour des valeurs (n=10, p=.5), (n=50, p=.1), (n=500, p=.01) et (n=500, p=.6) faire un graphique de la probabilit binomiale et de la densit normale de paramtres = np et = np(1 p). Commenter.

a i Sa

= =

1 (S i1 ) u

ai S i1
1

i bi = ( Sa ) v i i i S = Sa b  Critre d'arrt : ||ai ai1 ||2 < et ||bi bi1 ||2 <  La matrice S i correspond alors la matrice S rech

Le symbole dsigne le vecteur unitaire et le symbole dsigne la transformation d'un vecteur en une matrice diagonale. Programmer la mthode
RAS

dcrite ci-dessus.

13.18 mlab12
On considre les instructions suivantes destines tre excutes avec MATLAB :

Application
A= 60 36 24 10 62 44 20 10 70 60 22 92 42 84 14 30 11 33 35 70 19 20 52 71 80 29 32 40 12 31 23 44 65 50 39 82 u= 230 290 225 215 170 280 v= 240 270 220 270 100 310

A = randn(n,m); U = A - diag(sum(A')/m) * ones(n,m); for i = 1:n for j = 1:n Donner le nombre de ops" excutes pour obtenir l'apVC(i,j) = sum(diag(diag(U(i,:)) * diag(U(j,:)) )) / (m-1); proximation de la solution. end 17 Bacharach M. (1970) : Biproportional Matrices and Inputend Output Change, Cambridge University Press. VC

M. Gilli

Mthodes numriques  Recueil d'exercices

42

Vers quelles valeurs tendent les lments des vecteurs ai et bi pour i . Quel autre critre d'arrt ceci suggre-t-il ?

Example 3

2.5

13.20 mlab14
Le theorme de Caley-Hamilton dit qu'une matrice vrie sa propre quation caractristique, c'est--dire, pour une matrice A Rnn , on a la fonction caractristique
1.5 y

n + c1 n1 + . . . cn = 0
0.5

et

An + c1 An1 + . . . cn I = 0.
1. En utilisant la fonction MATLAB qui permet de cal(8 culer le polynme caractristique, crire une procpoints) qui permette de vrier le thorme numridure quement pour une matrice A d'ordre n, dont les lments sont tirs d'une loi normale N (0, 1). 2. Tester la procdure pour quelques valeurs de n < 20 (2 visualiser le rsultat (matrice nulle) des ns de et points) vrication.
6 5 4 D3 3 2 1 0 2

3 x

4. Rproduire le graphique trois dimensions ci-aprs. On utilisera les commandes plot3, hold on, axis, xlabel, ylabel et zlabel.

P1 = (2

13.21 Mlab-intro00
1. Gnrer une matrice alatoire A avec la commande A = rand(4) et vrier son rang avec la commande r = rank(A). Genrer une deuxime matrice alatoire B de la mme faon. Calculer le produit C = A * B et l'inverse D de la matrice C avec la commande D = inv(C). Calculer la matrice E = B 1 A1 . Vrier que les matrices E et D sont identiques aux erreurs d'arrondi prs. 2. Soit la matrice

P2 = (1,1,1)

1 0 0 1 D2 2 2 1 D1 1

A=

1 2 3 5

13.22 Mlab-intro01
1. Gnrer une matrice alatoire A avec la commande A = rand(4) et vrier son rang avec la commande r = rank(A). Genrer une deuxime matrice alatoire B de la mme faon. Calculer le produit C = A * B et l'inverse D de la matrice C avec la commande D = inv(C). Calculer la matrice E = B 1 A1 . Vrier que les matrices E et D sont identiques aux erreurs d'arrondi prs. 2. Soit la matrice

calculer la matrice B = A3 . Pour la matrice A calculer la matrice des vecteurs propres V et la matrice des valeurs propres D avec la commande [V,D] = eig(A). Vrier que la matrice E = V D3 V 1 est identique la matrice B . 3. Reproduire le graphique deux dimensions ciaprs. On utilisera les commandes plot, grid, axis, xlabel, ylabel et title.

A=

1 2 3 5

M. Gilli

Mthodes numriques  Recueil d'exercices

43

calculer la matrice B = A3 . Pour la matrice A calculer la matrice des vecteurs propres V et la matrice des valeurs propres D avec la commande [V,D] = eig(A). Vrier que la matrice E = V D3 V 1 est identique la matrice B .

et l'on remarque qu'il s'agit d'un systme linaire 1 c1 y1 c1 y0 c2 1 c2 y2 0 = c3 1 c3 y3 0 c4 1 y4 c4 y5 o ci = xi /2h, h = xi xi1 et que l'on peut rsoudre si l'on connat y0 et y5 .

13.23 nlp00
I. On considre la fonction une variable explicative suivante :

Ecrire un programme qui calcule, en se servant de l'expression (66), k approximations de l'quation (64), les points x0 , y0 et xk+1 , yk+1 tant donns. Application : x0 = 2, y0 = 1, xk+1 = 10, yk+1 = 0 et k = 10, 20, 50. Faire un graphique qui compare la solution analytique avec les approximations calcules.

f (x) = x4 + 12x3 15x2 56x + 60

Rechercher le maximum, soumis aucune contrainte, de cette fonction moyennant la fonction fmin de MATLAB. II. Soit la fonction

13.25 Poisson
On rappelle que la probabilit d'une variable alatoire de Poisson Y de paramtre est dnie comme

f (x1 , x2 ) = (x2 + x2 11)2 + (x1 + x2 7)2 2 1

P (Y = y) =

e y . y!

1. Donner une representation en 3 dimensions de la fonction f (x1 , x2 ) dans le domaine x [4; 4] et x2 [4; 4]. 2. Representer graphiquement les courbes de niveau pour le domaine dni sous 1). 3. Avec la fonction fmins de MATLAB rechercher les extremas.

On dsire gnrer n ralisations d'une variable alatoire de Poisson de paramtre = 2. 1. Avec la fonction Matlab poissrnd gnrer le vecteur x de n = 220 ralisations. A partir du vecteur x on dsire obtenir une stimation et puis la comparer au utilis pour la gnration. Cette estimation peut se faire en maximisant la probabilit conjointe

13.24 ode-ex1
Soit lquation direntielle ordinaire (la fonction ne fait intervenir qu'une seule variable)

P =

e x1 e xn x1 ! xn !

par rapport au paramtre . Cette probabilit conjointe P pour le vecteur de ralisations x peut aussi s'crire

y dy = x dx pour laquelle la solution gnrale est donne par y=

(64)

P =

en s x1 ! xn !

avec s =
i=1

xi

C . (65) x En remplaant la drive par une approximation, on peut crire l'quation direntielle (64) comme f (x) f (x + h) f (x h) = 2h x
d'o l'on tire

2. Pour 100 valeurs de comprises entre 1.5 et 2.5 calculer les valeurs de P et faire le graphique de P en fonction de . (Utiliser linspace). une fonction Matlab d = 3. Crer poissondv(lambda,x) qui evalue la drive de la probabilit conjointe. Cette drive s'crit

x (f (x h) f (x + h)). (66) 2h Pour pouvoir rsoudre cette expression, il faut connatre deux points de la solution f (x h) et f (x + h). Ecrivons (66) pour quatre points successifs : f (x) = y1 y2 y3 y4 = x1 (y0 y2 )/2h = x2 (y1 y3 )/2h = x3 (y2 y4 )/2h = x4 (y3 y5 )/2h

D=

en ns s s1 x1 ! xn !

4. Produire le graphique de D en fonction de . Pour une gnration de x donn les graphiques de P et D sont illustrs dans la gure 7. 5. Le maximum de la fonction P correspond au zero de la fonction D. Utiliser l'algorithme de la bissection pour rechercher le zero de D. An de pouvoir directement estimer le parameter en fonction d'un vecteur d'observations donne, on le programmera comme suit :

M. Gilli

Mthodes numriques  Recueil d'exercices

44

3.5 3 2.5 2 1.5 1 0.5

x 10

165

13.26 prog01
Ecrire une procdure Matlab qui value numriquement la drive d'une fonction. On rappelle qu'tant donn une fonction y = f (x), on peut approcher la valeur de la drive au point x comme

yx =

f (x + dx) f (x) . dx

Pour la fonction du problme prcdent, valuer la drive au point x = 1.3. On choisira dx = 108 .
2
164

0 1.5
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 1.5 x 10

2.5

13.27 prog02
Ecrire une fonction Matlab qui value numriquement les drives d'une fonction quelconque. On donnera cette fonction la forme

d = derivnum('nom_fonction',x)
o nom_fonction est la chane de caractres qui correspond au nom de la fonction Matlab que l'on dsire driver. Indication : Il faudra faire appel la fonction feval dans derivnum.
2 2.5

Fig.

7  Graphiques de P et D.

13.28 prog03
Soit l'exprience qui consiste lancer deux ds. Le rsultat auquel on s'intresse est la somme des points des deux ds. L'ensemble des rsultats possibles est donc constitu par

function c = bissectp(a,b,x) fa = poissondv(a,x); fb = poissondv(b,x); = 2 3 4 5 6 7 8 9 10 11 12 . if sign(fa) == sign(fb) error('fonction n''est pas de signe oppose en a et b'); On sait que les rsultats n'ont pas tous la mme probabilit end fait = 0; tant donn qu'ils se composent des ralisations suivantes : c = a + (b - a) / 2; % Chercher centre intervalle % while abs(b-a) > 2*tol & ~fait Rsultat du d 2 fc = poissondv(c,x); % Evaluer f au centre 1 2 3 4 5 6 if sign(fa) ~= sign(fc) % zero gauche de c 1 2 3 4 5 6 7 b = c; Rsultat fb = fc; 2 3 4 5 6 7 8 du d 1 c = a + (b - a) / 2; 3 4 5 6 7 8 9 elseif sign(fc) ~= sign(fb) % zero a droite de c 4 5 6 7 8 9 10 a = c; 5 6 7 8 9 10 11 fa = fc; c = a + (b - a) / 2; 6 7 8 9 10 11 12 else % on tombe exactement sur zero fait = 1; end Sachant qu'il y a indpendence entre le rsultat du d 1 end

Les valutions de la fonction aux points a, b et c se font donc avec la fonction poissondv construite au point 3. Etant donn que les valeurs de la fonction D sont trs petites (de l'ordre de 10150 ) on a modi le test fa * fb < 0 par le test equivalent sign(fa) ~= sign(fb). Que se passerait si l'on avait utilis fa * fb < 0 ? 6. Gnrer succesivement 10 vecteurs x et calculer le correspondant. Faire un graphique de i , i = 1, . . . , k . Que constat'on ? Quel est l'cart type des i .

et le rsultat du d 2, on a la probabilit suivante pour chaque rsultat possible :

i P (X = i)

1 36

2 36

3 36

4 36

5 36

6 36

5 36

4 36

10
3 36

11
2 36

Gnrer 1000 rsultats et comparer, l'aide d'un graphique, la distribution empirique avec les probabilits thoriques.

M. Gilli

Mthodes numriques  Recueil d'exercices

45

13.29 prog05
On considre une variable alatoire u uniformment distribue dans l'intervalle (0, 1). On sait que l'esprance mathmatique d'une telle variable alatoire est E(u) = 1/2 et que sa variance est V (u) = 1/12. On dsire vrier empiriquement ce rsultat. Pour ce faire on gnre n ralisations de u et on calcule la moyenne

On pourra utiliser la fonction MATLAB isempty pour tester si le vecteur x est vide. Cette fonction retourne la valeur 1 si x est vide et la valeur 0 sinon. En dnissant x = 1:n l'appel vprod(1:n) retourne la valeur de n!. 1. Vrier que 10! = 3628800. 2. Combien d'oprations lmentaires (additions, soustractions, multiplications et divisions) excute la fonction vprod pour un vecteur x avec n lments ? On considre l'expression du coecient binomial
k Cn =

Eu =

1 n

ui
i=1

(67)

et l'cart quadratique moyen

n! (n k)! k!

(71)

Vu =

1 n1

(ui Eu)2 .
i=1

(68)

Le vecteur des n ralisations de u peut tre gnr avec la commande MATLAB

3. Ecrire les instructions MATLAB (et en vous servant k de la fonction vprod) qui permettent d'valuer Cn k suivant (75) pour n et k donnes. Evaluer Cn pour n = 50 et k = 5. 4. Quel est le nombre d'oprations lmentaires ncesk saires pour valuer Cn .
k On peut valuer Cn plus ecacement comme k Cn =

u = rand(n,1) ;
1. Gnrer un vecteur u avec 1000 ralisations de la variable alatoire uniforme. 2. Programmer la procdure pour calculer Eu dnie en (67). 3. Programmer la procdure pour calculer Vu dnie en (68). 4. En dveloppant l'expression (68) on obtient

n (n 1) (n k + 1) k!

(72)

5. Ecrire un code MATLAB qui evalue (76) pour k = 0, 1, . . . , n et conserver les valeurs dans un vecteur C . Vrier que
n k Cn = 2 n k=0

1 Vu = n1 Vu = 1 n1
n i=1

u2 i
i=1

n Eu
n i=1

(69) (70)

et imprimer un message de conrmation. On structurera le code comme :


Initialiser le vecteur c k Calculer Cn pour k = 0, 1, . . . , n et conserver les valeurs dans c n+1 n si i=1 ci = 2 , alors Imprimer un message de conrmation

u2 i

ui )2

A partir de l'expression (70) il est possible de calculer Vu (et Eu) avec une seule boucle. Ecrire le programme qui calcule Vu partir de la dnition donne en (70). Indication : On accumulera dans la mme boucle les u2 et les ui . Ainsi on aura, aprs avoir termin la i boucle, la somme des u2 et la somme des ui , ce qui i permet de calculer Vu selon (70).

sinon nsi

Imprimer un message d'erreur

k L'ensemble des coecients binomiaux Cn , n = 0, 1, . . . , m et k = 0, 1, . . . , n est appell triangle de Pascal tant donn que l'on peut les representer sous la forme

13.30 prog06
Programmer une fonction MATLAB qui calcule le produit des lments d'un vecteur x. On appellera cette fonction vprod et on lui donnera la structure suivante :
function p = vprod(x) si x est vide alors p = 1

0 0 1 2 P = n 3
0 C0 0 C1 2 C2 0 C3 0 C4

1
1 C1

4 m

1 2 C2 C2 1 2 3 C3 C3 C3

1 2 3 4 4 C4 C4 C4 C4 . . . . . . .. . . . . . . . . . . . . . 0 1 2 3 4 m m Cm Cm Cm Cm Cm Cm

sinon nsi

p = x(1) Calculer l'aide d'une boucle p = p x2 xn

On sait que l'on a


0 n Cn = Cn = 1,

n = 0, 1, . . . , m ,

(73)

M. Gilli

Mthodes numriques  Recueil d'exercices

46

et que
k1 k k Cn = Cn1 + Cn1 ,

k On peut valuer Cn plus ecacement comme

k = 1, . . . , n 1 .

(74)

k Cn =

6. En se servant des relations (73) et (74) crire un code MATLAB qui value tous les coecients du triangle de Pascal pour m = 50. On pourra s'inspirer du pseudo-code donn ci-aprs. On rappelle qu'avec MATLAB les indices d'un tableau (vecteur ou matrice) commencent avec 1.

n (n 1) (n k + 1) k!

(76)

5. Ecrire un code MATLAB qui evalue (76) pour k = 0, 1, . . . , n, n = 50, et conserver les valeurs dans un vecteur C . Vrier que
n k Cn = 2n . k=0

Algorithme 8 Triangle de Pascal


Initialiser la matrice P d'ordre m + 1 Initialiser l'lment P11 pour i = 2 m + 1 faire Initialiser l'lment Pi1 pour j = 2 i 1 faire Calculer Pij selon (74)

13.32 prog07
1. On considre les instructions Matlab
x = ceil(8*rand(1,10)); p = (x > 4);

nfaire

nfaire

Initialiser l'lment Pii

7. Quel est le nombre d'additions que necessite cette procdure. Donner une expression en fonction de m.

qui produisent le vecteur p dni comme

p(i) =

1 si

x(i) > 4

0 sinon

13.31 prog06-b
Programmer une fonction MATLAB qui calcule le produit des lments d'un vecteur x. On appellera cette fonction vprod et on lui donnera la structure suivante :
function p = vprod(x) si x est vide alors p = 1

A l'aide d'une boucle for programmer une procdure qui construit le vecteur p. Vrier qu'elle fournit le mme rsultat que p = (x > 4). 2. Les instructions Matlab
x = ceil(8*rand(1,10)); p = find(x > 4);

sinon nsi

p = x(1) Calculer l'aide d'une boucle p = p x2 xn

produisent le vecteur p des indices des lments du vecteur x qui sont suprieurs 4. A l'aide d'une boucle for programmer une procdure qui construit le vecteur p. Vrier qu'elle fournit le mme rsultat que find.

On pourra utiliser la fonction MATLAB isempty pour tester si le vecteur x est vide. Cette fonction retourne la valeur 1 si x est vide et la valeur 0 sinon. En dnissant x = 1:n l'appel vprod(1:n) retourne la valeur de n!. 1. Vrier que 10! = 3628800. 2. Combien d'oprations lmentaires (additions, soustractions, multiplications et divisions) excute la fonction vprod pour un vecteur x avec n lments ? On considre l'expression du coecient binomial
k Cn

13.33 prog08
Boucles for et vectorisation :  Crer une matrice A = [aij ] de dimension 10 10 o aij = sin(i) cos(j) l'aide de boucles for.  Comment peut-on obtenir le mme rsultat sans utiliser de boucle for ?  Avec la commande mesh produire un graphique de la surface z = sin(x) cos(y) pour x [1, 10] et y [1, 10]. Oprateurs logiques :  Crer un vecteur ligne x de longueur 7 dont les lments sont des nombres tirs au hazard de la distribution normale standard.  Trouver les lments de x qui sont suprieurs 1 ou infrieurs 0.2.  Trouver les lments de x qui sont suprieurs 0 et infrieurs 2.  Quelle est la position des lments supriurs 3 dans le vecteur x ?

n! = (n k)! k!

(75)

3. Ecrire les instructions MATLAB (et en vous servant k de la fonction vprod) qui permettent d'valuer Cn k suivant (75) pour n et k donnes. Evaluer Cn pour n = 50 et k = 5. 4. Quel est le nombre d'oprations lmentaires ncesk saires pour valuer Cn .

M. Gilli

Mthodes numriques  Recueil d'exercices

47

Graphisme : x Dessiner le graphe de la fonction f (x) = 1+x2 pour 5, 10, 30 et 100 valeurs quidistantes de x comprises dans l'intervalle [2, 2] en reproduisant la gure suivante.
Graphe de f(x) avec n = 5 points 0.6 0.4 0.2 y 0 0.2 0.4 0.6 0.8 2 1 0 x 1 2 y 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 2 1 0 x 1 2 Graphe de f(x) avec n = 10 points

2. Excuter le programme avec les donnes proposes ci-aprs. Imprimer la matrice S calcul et donner le nombre de ops utiliss.

A= v=

60 36 24 10 62 44

20 10 70 60 22 92

42 84 14 30 11 33

35 70 19 20 52 71

80 29 32 40 12 31

23

Graphe de f(x) avec n = 30 points 0.6 0.4 0.2 y 0 0.2 0.4 0.6 0.8 2 1 0 x 1 2 y 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 2

Graphe de f(x) avec n = 100 points

290 44 225 65 u= 215 50 39 170 82 280

230

240 270 220 270 100 310

0 x

3. Programmer une nouvelle version de l'algorithme dans laquelle les direntes instructions sont codes de sorte engendrer moins d'oprations lmentaires. (On vitera notamment l'utilisation de diag et inv.) 4. Excuter ce nouveau programme sur les donnes et donner le nombre de ops utiliss. (En choisissant = 0.01 pour le critre d'arrt le rsultat devrait tre obtenu en moins que 1500 ops.) 5. Comparer les rsultats trouvs en 2 et 4. Expliquer de manire gnrale d'o provient la dirence du nombre d'oprations.

13.34 ras
Un des problmes courants rencontrs dans la modlisation input-output consiste, partant d'une matrice A donne, construire une matrice S dont la somme des lignes est gale un vecteur u et la somme des colonnes gale un vecteur v . La mthode RAS18 constitue un algorithme ecace pour obtenir une approximation de la solution ce problme. Cet algorithme s'nonce comme suit : Initialiser S (0) = A Pour i = 1, 2, . . . , jusqu' convergence, faire

a(i) = (diag(S (i1) ))1 u S (i) = diag(a(i) ) S (i1) b(i) = (diag( S (i) ))1 v S (i) = S (i) diag(b(i) )

finfaire
et Critre d'arrt b(i) b(i1) 2 < :

13.35 Recurrence
2

a(i) a(i1)

<

Soit la suite rcurrente (xn ) avec

Lorsque l'algorithme se termine la matrice S (i) correspond la matrice S recherche. Le symbole dsigne le vecteur unitaire et l'oprateur diag dsigne la transformation d'un vecteur en une matrice diagonale. 1. Programmer la mthode RAS telle qu'elle est dcrite l'aide de MATLAB en utilisant les fonctions diag et inv notamment.
Output Change, Cambridge University Press.
18 Bacharach M. (1970) : Biproportional Matrices and Input-

x1 = 0.4 xn+1 = r xn (1 xn ) n = 1, 2, . . .

(77)

En vous servant de la commande subplot produire pour des valeurs equidistants de r allant de 2.9 3.7 les graphiques suivants :

M. Gilli

Mthodes numriques  Recueil d'exercices

48

0.75 0.7 0.65 0.6 0.55 0.5 0.45 0.4 0 20 40

0.75 0.7 0.65 0.6 0.55 0.5 0.45 0.4 0 20 40

0.9 0.8 0.7

Factoriser pas besoin Rsoudre Rsoudre

A = LU (an de simplier on aura de pivoter) Lz = y Uc = z

3. Faire le graphique des points donns et du polynme calcul.

0.6 On 0.5 0.4

rajoute maintenant deux point supplmentaires x5 = 2, y5 = 0 et x6 = 7, y6 = 3. On peut alors crire l'galit

Ac = y + r
0 20 avec r un vecteur de 40 rsidus. Ce systme surdtermin n'admet pas de solution unique, mais on privilgie souvent la solution c qui produit un rsidu r qui est orthogonal 1 A (A r = 0). On obtient alors le sytme linaire

0.9 0.8 0.7 0.6 0.5 0.4

1 0.9 0.8 0.7

0.8

A Ac = A y

(78)

0.6 0.6 0.5 0.4 0 20 40 0.3 0 20 40 0.2 0.4

4. Modier la procdure du point 2) pour rsoudre le systme linaire dni en (78). 5. Complter le graphique avec les nouveaux points et le nouveau polynme.
0 20 40

13.37 rsl01b 13.36 rsl00


On rappelle q'un polynme de degr p s'crit Soit le systme linaire Ax = b de dimension n. La rgle de Cramer permet de calculer la solution x de ce systme en ayant recours aux dterminants par la formule suivante,

y = cp xp + cp1 xp1 + + c0 .
Considrons quatre points (xi , yi ), i = 1, 2, 3, 4 qui appartiennent un polynme de degr p = 3. Les coecients de ce polynme correspondent la solution du systme linaire Ac = y avec c3 y1 x3 x2 x1 1 1 1 3 2 c2 y2 x2 x2 x2 1 A= 3 2 x x x 1 c = c y = y . 1 3 3 3 3 3 2 x4 x4 x4 1 c0 y4 L'application se fera avec x =

xi =

|Ai | |A|

i = 1, 2, . . . , n

(79)

o Ai est la matrice A dans laquelle on a remplac la i-me colonne par le vecteur b. On suppose que chaque dterminant est calcul selon le schma d'expansion des mineurs. Le dterminant de la matrice A s'crit alors,
n

|A| =
pP (n)

s(p)
i=1

ai pi

(80)

1359

et y =

3 7 1 3

o P (n) est l'ensemble des n! permutations de l'ensemble {1, 2, . . . , n}, pi est le i-me lment de la permutation p, s(p) est une fonction prenant les valeurs +1 ou 1 selon p. 1. Dvelopper une formule donnant approximativement le nombre d'oprations en virgule ottante eectuer pour obtenir la valeur du dterminant d'une matrice d'ordre n d'aprs l'quation (80). 2. Donner une formule pour le nombre d'oprations utilises pour rsoudre le systme linaire avec la rgle de Cramer donne sous (79). 3. Quel temps ncessite la rsolution d'un systme de taille n = 90 sur un ordinateur pouvant eectuer : (a) 522 Kops/seconde = 522000 ops/seconde (PC-386),

1. Ecrire le code qui construit la matrice A pour x et p donn.


n = length(x)

pour i = 1 : n faire pour j = 0 : p faire nfaire nfaire


Ai,j+1 = . . .

2. Rsoudre le systme linaire Ac = y en procdant comme suit :19


19 Il n'est pas permis d'utiliser l'oprateur \ de Matlab.

M. Gilli

Mthodes numriques  Recueil d'exercices

49

(b) 5200 Kops/seconde (DEC AXP 3000-800S), (c) 33000 Kops/seconde (Cray X-MP), (d) 1 Teraops/seconde = 1012 ops/seconde (Ordinateur parallle ?). Commenter. 4. Avec MATLAB, gnrer un systme de taille n = 90 et le rsoudre. Combien d'oprations en virgule ottante a-t-on eectu et combien de temps cela a-t-il pris ?

on peut formuler le systme comme

Ay + Ey1 + F z = 0
avec y le vecteur des 8 variables endognes [C I W 1 Y P K W E] , y1 est le vecteur des mmes variables mais considres avec un retard d'une priode et z = [1 W 2 T G T M ] est le vecteur des variables exognes. 1. Donner les matrices A, E et F . Une quantication du modle attribue les valeurs suivantes aux paramtres a, b et c du modle :
ao a1 a2 a3

13.38 rsl01
Soit la rgle de Cramer pour la rsolution d'un systme linaire Ax = b

16.5498 .0209 .2137 .8098

bo b1 b2 b3

20.3886 .1466 .6190 -.1583

co c1 c2 c3

4.8182 .4701 .1076 .3064

xi =

|Ai | |A|

i = 1, . . . , n

et on a observ les valeurs suivantes pour les variables aux priodes t 1 et t :


C t-1 t 61.6 65.0 I 1.3 3.3 W1 41.6 45.0 Y 60.6 66.1 P 19.0 21.1 K 201.4 204.5 W 49.4 53.0 E 61.7 67.7 W2 7.8 8.0

o Ai est la matrice A dans laquelle on a remplac la ime colonne par le vecteur b. On suppose que chaque dterminant est valu selon le schma de l'expansion des mineurs. 1. Estimer le nombre d'oprations lmentaires ncessaires pour rsoudre le systme Ax = b de taille n=90. 2. Quel temps ncessite une machine parallle, capable d'eectuer 1 traops (1012 ), pour eectuer ce calcul ? 3. Quelle conclusion peut-on tirer de ce rsultat ? Rappel : Le dterminant d'une matrice A peut s'crire comme
n

8.

9.

2. Ecrire le modle sous la forme

Ay = b
et dterminer numriquement b. On se propose maintenant de rsoudre ce systme avec les mthodes itratives de Jakobi et Gauss-Seidel respectivement, soit :

|A| =
pP (n)

s(p)
i=1

aipi

o P (n) est l'ensemble des n! permutations de l'ensemble I = {1, 2, . . . , n}, pi est le ime lment de la permutation p et s(p) est une fonction qui prend la valeur de +1 ou 1.

y (k+1) = By (k) + g (L + D)y (k+1) = U y (k) + b

k = 0, 1, 2, . . . k = 0, 1, 2, . . .

L, U et D sont des matrices triangulaires infrieures, suprieures et diagonales respectivement, telles que l'on vrit

13.39 rsl02
On considre un modle conomtrique constitu d'un systme de 8 quations, qui pour une priode t donne s'crivent :

A=L+D+U
3. Quels sont la matrice B et le vecteur g pour la mthode de Jakobi. 4. Pour la mthode de Gauss-Seidel, donner les matrices L, D et U et montrer qu'tant une particularit de D on peut crire

C = ao + a1 P + a2 P1 + a3 W I = b0 + b1 P + b2 P1 + b3 K1 W 1 = c0 + c1 E + c2 E1 + c3 T M Y =C +I +GT P = Y W1 K = K1 + I W = W1 + W2 E = Y + T W2
En crivant les quations sous la forme implicite, c'est dire par exemple pour la premire quation

y (k+1) = Ly (k+1) + U y (k) b

k = 0, 1, 2, . . .

Commenter la structure des matrices B et U . 5. Donner, pour les deux mthodes, les matrices qui  gouvernent" la convergence. Donner le module des valeurs propres des ces deux matrices. (On rappelle que le module d'une valeur propre est gale r2 + i2 , o r est la partie relle et i la partie imaginaire de la valeur propre). Que peut-on dire quant la faon dont les 2 mthodes vont converger ?

a0 + a1 P + a2 P1 + a3 W C = 0

M. Gilli

Mthodes numriques  Recueil d'exercices

50

6. Trouver une solution pour y en utilisant la mthode de Jakobi puis celle de Gauss-Seidel. On choisira pour y (o) les valeurs des variables observes pour la priode t 1. Comme critre d'arrt on choisira

Quel est le nombre d'oprations lmentaires ncessaires pour eectuer cette triangularisation ?

y (k+1) y (k) M ax | |< y (k)


o M ax est le maximum des lments du vecteur et = .001. La structure causale de ce systme Ay = b, peut tre reprsente au moyen d'un graphe. L'ensemble des sommets est donn par les lments du vecteur y et un lment aij non-null de la matrice A correspond l'xistence d'un arc j i. On ne tiendra pas compte des lments diagonaux de A qui introduisent simplement des boucles sur chaque sommet. 7. Donner le schma ch du graphe qui correspond au systme linaire Ay = b dni sous 2). On dcide maintenant de permuter les lignes et les colonnes de la matrice A dans l'ordre suivant : 4 8 3 7 5 2 1 6. 8. A quoi correspond cette opration de permutation ? Rsoudre ce nouveau systme avec Jakobi et GaussSeidel. 9. On considre maintenant la permutation des lignes et des colonnes de la matrice originale A dans l'ordre : 6 1 2 5 7 3 8 4. Que peut-on attendre quand la performance de Gauss-Seidel ? Rsoudre le systme avec Gauss-Seidel.

13.42 rsl07
1. Programmer l'algorithme 3.2.1 pour le calcul du vecteur de la transformation de Gauss et l'algorithme 3.2.2, qui applique la transformation de Gauss une matrice C , sous la forme de fonctions Matlab. La structure des fonctions sera la suivante :  t = vecgauss(x), avec x = A(k : n, k) le sousvecteur de la matrice A l'tape k .  C = trgauss(C,t), avec C la matrice laquelle on applique la transformation de Gauss. 2. Programmer l'algorithme 3.2.3 qui transforme une matrice A en une matrice de forme triangulaire suprieure. Donner la fonction la structure suivante :

A = trisup(A)
3. Programmer l'algorithme 3.2.4 qui applique l'limination de Gauss une matrice A. Donner la fonction la structure suivante :

A = elgauss(A)
Gnrer une matrice alatoire A d'ordre 10 et tester l'algorithme. Imprimer L et U et vrier que LU = A. 4. Pour chaque algorithme tablir l'aide de Maple la fonction du nombre d'oprations lmentaires (ops) pour transformer une matrice d'ordre n 3. Vrier le rsultat empiriquement. De quel ordre est la complexit de ces algorithmes ?

13.40 rsl03
Soit l'expression suivante :

13.43 rsl10
Programmer l'algorithme 4.1.2 qui, pour une matrice symtrique A produit la factorisation A = LDL . La structure de cette fonction Matlab sera la suivante :

x = B 1 (2A + I)(C 1 + A)b .

1. Montrer comment on peut calculer le vecteur x sans avoir recours aucune inversion de matrice. 2. Comment peut-on obtenir l'inverse de A en rsolvant [A] = ldl(A) . n systmes linaires du type Ax = b avec l'limination de Gauss ? Donner un exemple numrique. Comparer empiriquement, en factorisant quelques matrices alatoires, le nombre d'oprations lmentaires entre les algorithmes egpp et ldl. Quel est le rapport des flops respectifs. 13.41 rsl05 Avec Matlab programmer une fonction qui transforme, selon le schma de l'limination de Gauss, une matrice A donne en une matrice triangulaire suprieure. La fonction doit pouvoir s'appeler comme suit :

13.44 rsl11
1. Programmer l'algorithme 4.1.3 de Cholesky qui factorise une matrice A symtrique dnie positive en A = GG . La structure de cette fonction Matlab sera la suivante :

A = trisup(A)

Application : Chercher la matrice triangulaire suprieure qui correspond la matrice de Toeplitz aij = 1/(i + j 1) d'ordre 10.

[A] = cholesky(A) .

M. Gilli

Mthodes numriques  Recueil d'exercices

51

2. Etablir la fonction du nombre d'oprations lmentaires (ops) de cet algorithme. 3. Gnrer une matrice alatoire X d'ordre 1005 et un vecteur alatoire y de dimension 100. Estimer par la mthode des moindres carrs les paramtres du modle y = Xb + u .

13.48 SprintModel
Pritchard20 a sugger le modle suivant

x(t) = t (1 et/ )

(81)

Comparer le nombre de ops de votre procdure pour dcrire la performance d'un sprinter. Ce modle exavec le nombre de ops ncessaires pour valuer plique la distance x (en mtres) parcourue en fonction du b=inv(X'*X)*X'*y. temps t en secondes. Les coecients et sont des paramtres.

13.45 rsl12
1. Programmer l'algorithme 3.2.4 qui applique l'limination de Gauss une matrice A. Donner la fonction la structure suivante :

Lors des championnats du monde Rome en 1987 on a msur, lors de la nale, les temps suivants pour Carl Lewis et Ben Johnson :

x en mtres
Lewis (sec) Johnson (sec)

0 0 0

10 1.94 1.84

20 2.96 2.86

30 3.91 3.80

40 4.78 4.67

50 5.64 5.53

60 6.50 6.38

A = elgauss(A)
Gnrer une matrice alatoire A d'ordre 10 et tester l'algorithme. Imprimer L et U et vrier que LU = A. 2. Pour l'algorithme 3.2.4 tablir l'aide de Maple la fonction du nombre d'oprations lmentaires (ops) pour transformer une matrice d'ordre n 3. Vrier le rsultat empiriquement. De quel ordre est la complexit de cet algorithme ?

1. Construire trois vecteurs x, tL et tJ qui contiennent la distance (pour x) et les temps de Lewis (tL) respectivement de Johnson (tJ). Produire le graphique suivant :

100

13.46 rsl13
1. Programmer l'algorithme 3.2.5 qui applique l'limination de Gauss avec pivotage partiel une matrice A. Donner la fonction la structure suivante :

90

80

70

60

50

A = egpp(A)
40

Gnrer une matrice alatoire A d'ordre 10 et tester l'algorithme. Imprimer L et U et vrier que LU = A.

30

20

10

10

13.47 rsl14
Crer une matrice A d'ordre n = 7 et un vecteur colonne b de dimension n = 7. Compter le nombre d'oprations lementaires eectues l'aide de la fonction flops, lorsque l'on rsoud le systme linaire Ax = b : 1. en utilisant la fonction rsl vu au cours, 2. en utilisant l'oprateur \ de MATLAB, 3. en utilisant l'inverse de A calcule par la fonction inv. Rpter ces oprations pour des systmes de taille n = 10, 20, 30, 40, 50 et dessiner l'volution du nombre de ops en fonction de n. Que peut-on dire ? 2. Pour Lewis on tabli qu'on a = 14.4 et = 0.739. Avec la commande Matlab inline construire la fonction qui permet d'valuer l'expression (81) pour les valeurs de et qui correspondent a Lewis. En se servant de la commande Matlab linspace construire un vecteur t avec 100 valeurs equidistantes allant de 0 100. Evaluer les distances thoriques xth qui correspondent aux valeurs du vecteur t. Completer le graphique precdant avec cette courbe.

SIAM Review 35 :3, 359379.

20 W.G. Pritchard, (1993). Mathematical Models of Running.

M. Gilli

Mthodes numriques  Recueil d'exercices

52

100

90 80

70

60

50

40

A=

1 0 1 0 0 0 0

0 0

0 a1 0 a3 0 0 0

0 a2 0 0 0 0 0 0 0 0 0 0

0 1 1 1 0 0

0 1 0 1 0 1 0

0 1 0 0 1

1 1 0 0

0 1 0

0 1

0 a4 0 , 0 0 0 1

20 .3 14 2.2 b= 0 200 8 1.6

30

20

avec a1 = .2 a2 = .8 a3 = .5 a4 = .47 .

10

10

On envisage la rsolution de ce systme linaire avec la mthode de Gauss-Seidel, c'est--dire en procdant de la manire suivante :

3. Annoter le graphique comme illustr ci-aprs :


(t (1 exp(t/ )) 100 Lewis (Rome 87) Johnson (Rome 87) Lewis (thorique)

B =AI Initialiser le vecteur x Jusqu' convergence, faire x = Bx + b finfaire


An d'viter des oprations redondantes, celles qui impliquent les lments nuls lors du produit de la matrice avec le vecteur, on pourrait proposer la construction de la matrice caractres suivante
eq=['a1*x(5)+a2*x(7)' 'a3*x(5) ' 'a4*x(8) ' 'x(1)+x(2) ' ... ... '];

90

80

70

60 x (mtres)

50

40

30

20

10

5 t (secondes)

10

4. Changer la taille et la fonte des annotations du graphique an d'obtenir un rsultat qui ressemble au graphique qui suit :

ce qui permettrait d'valuer le ime produit scalaire, sans eectuer des oprations redondantes, l'aide de la commande eval(eq(i, :)). Programmer une version de cet algorithme de Gauss-Seidel qui vite les oprations redondantes en utilisant les matrices creuses de MATLAB (c'est--dire sans recourir la matrice dnie ci-dessus, ni la fonction eval). Vrier avec la fonction flops le nombre d'oprations lmentaires eectivement excutes.

(t (1 exp(t/ )) 100 90 80 70 x (mtres) 60 50 40 30 20 10 0 0 2 4 6 t (secondes) 8 10 Lewis (Rome 87) Johnson (Rome 87) Lewis (thorique)

13.50 Suites
On sait que la suite de terme gnral sn = n sin(1/n) on a
n

lim sn = 1 .

(82)

1. Avec inline denir la fonction qui evalue sn . 2. Calculer sn pour quelques valeurs de n an de vrier la relation (82). 3. Calculer les valeurs de sn pour n = 1 20. Reproduire les graphiques ci-dessous.

13.49 SparseLinSys01
Soit le systme linaire Ax = b avec

M. Gilli

Mthodes numriques  Recueil d'exercices

53

1 0.95 0.9 0.85 0.8 0.75 0.7 0 1.001


1 0.999 sn 0.998 0.997 0.996 0.995

13.52 svd-ex2
On dsire eectuer une estimation d'un modle de rgression multiple par les moindres carrs ordinaires en utilisant les rsultats de la dcomposition singulire. Soit X une matrice de donnes de rang complet k et de dimension n k et soit y un vecteur d'observations de dimension n 1. On cherche calculer l'estimation pour le modle y = X + comme la solution du problme min X y 2 . 2

10

15

20

D'autre part, la dcomposition singulire de X = U S V est suppose connue avec U = [u1 u2 un ] et V = [v1 v2 vk ], deux matrices orthogonales. On peut alors calculer par la formule

k i=1

ui y vi , i

et la somme des carrs des rsidus SSR = par


10 12 14 n 16 18 20

SSR =
i=k+1

(ui y)2 .

13.51 svd-ex1
Une application possible pour l'approximation d'une matrice par une matrice de rang infrieur constitue la compression de donnes lors de la transmission d'un trs grand nombre d'images prises par un satellite, par exemple. Pour ce faire, on digitalise au pralable une image en lui appliquant une grille de n lignes et n colonnes puis on assigne chaque carr de la grille un nombre qui correspond son niveau de luminosit suivant une chelle de 0 10 par exemple. Ainsi l'image est traduite en n2 entiers qu'il faudra par la suite transmettre sur terre. En procdant de la sorte, le volume de donnes transmettre peut cependant devenir rapidement prohibitif lorsqu'il s'agit d'un trs grand nombre d'images. Une possibilit consiste alors appliquer la matrice des luminosits une dcomposition singulire et ne transmettre que les 2k vecteurs singuliers ainsi que les k valeurs singulires qui permettent une approximation satisfaisante de la matrice originale. Ainsi, si une approximation de rang 6 pour une matrice d'ordre 1000 s'avre susante, le nombre de donnes transmettre serait de 2 6 1000 + 6 = 12006 au lieu de 106 , ce qui correspond un gain de 98, 8%.

1. En utilisant la commande svd de MATLAB, vrier que X = U1 S1 V1 avec U1 = [u1 u2 uk ], V1 = V = [v1 v2 vk ], S1 = diag(1 , 2 , . . . , k ) sur les donnes pour X charges grce l'instruction load v:\metri\mne\test2 . (3 points) en fonction de U , 2. Ecrire l'expression matricielle de (15 points) 3. Ecrire l'expression matricielle de SSR en fonction de U2 = [uk+1 uk+2 un ] et y . (10 4. En utilisant les expressions trouves aux points 2 points) et 3, programmer l'algorithme pour calculer et SSR sur les donnes X et y charges au point 1. (Vous pouvez vrier vos rsultats en utilisant l'une des autres faons de calculer et SSR) (5 5. En utilisant le fait que le pseudo-inverse de X , points) not X + , peut se calculer, lorsque X est de rang complet, 1 soit par (X X)1 X , soit par V1 S1 U1 , donner une expression pour le calcul de (X X)1 qui ne ncessite que les matrices V1 et S1 . (Indication : Calculer X + (X + ) ) (10 points) 6. Donner une estimation non biaise de la matrice des en appliquant la formule variances et covariances de trouve au point prcdent et calculer les valeurs des statistiques t de Student pour les paramtres estims. ( (Utilisez inv si vous n'avez pas rsolu le point 5) 5 points)

V1 , S1 et y .

Application : Le chier v:\metri\mne\svd_ex1.mat (

lire avec la commande load) contient une matrice A d'ordre 100 qui correspond une image digitalise avec deux niveaux de luminosit cods avec 0 et 1. Pour visualiser cette image avec MATLAB on peut se servir des instruction axis('ij'), spy(flipud(A)).

13.53 vis-00

En se basant sur l'tude des valeurs singulires rechercher On considre le modle linaire suivant : l'approximation B de plus petit rang de la matrice A qui I = 1 + 2 GNP + 3 p + 4 r + e (83) soit acceptable pour la qualit de cette image. (Pour la matrice approche B on imprimera une marque si bij > .4) dont les observations sont donnes dans le chier v:\metri\arml.dat.

M. Gilli

Mthodes numriques  Recueil d'exercices

54

L'estimation par la mthode des moindres carres des paramtres i , i = 0, 1, 2, 3 de ce modle correspond la solution du problme de minimisazion suivant :

min e e = (y X) (y X)

En vous servant uniquement des outils de visualisation de MATLAB donner les valeurs (approximatives) des paramtres qui minimisent cette somme de carres.

13.54 xxx-00
A Avec L TEX rproduire l'nonc du problme 1 jusqu'au point 1.