1 1 SCHEMA D’EULER EXPLICITE Méthodes Numériques pour les EDP en Finances - ENSTA - M2 - S1-1 TP 3: Options Americaines 18 Novembre 2008 On cherche une approximation numérique de la fonction put américain p = p(t, s), (t, s) ∈ Ω := (0, T ) × (0, Smax ) solution du système d’inéquation aux dérivées partielles suivant: min(∂t p + Ap, p − ϕ) = 0, p(t, Smax ) = 0, t ∈ (0, T ), p(0, s) = ϕ(s) dans Ω, (1a) (1b) (1c) 2 avec Av := − σ2 s2 ∂s,s v − rs ∂s v + rv. où σ, r, K sont des constantes strictement positives. Pour les applications numériques on prendra les paramètres financiers suivant: K = 100, Smax = 200, T = 1, σ = 0.2 et r = 0.1. On considèrera deux payoff ϕ1 ou ϕ2 pour les tests: Payoff classique (payoff=1): ϕ1 (x) := (K − x)+ et un payoff créneau (payoff=2): ϕ2 (x) := (i.e. ϕ2 (x) = 1 K 2 pour K 2 K 1K (x) 2 2 ≤x≤K ≤ x ≤ K et ϕ2 (x) = 0 sinon). Schema d’Euler Explicite On reprend les notations des precedents TP: maillage sj = jh, j = 0, . . . , M + 1, h = Smax /(M + 1), et tn = nδt, 0 ≤ n ≤ N, δt = T /N. On cherche Pjn une approximation de P (tn , sj ). On choisi de travailler avec comme inconnue le vecteur P0n P n := ... . PIn On considère le schéma explicite décentré à droite (schéma EE), i.e.: n+1 n −P n n n n Pj −Pjn Pj+1 n+1 j σ2 2 −Pj−1 +2Pj −Pj+1 n + 2 sj − rsj + rPj , Pj − φ(sj ) = 0. min δt h2 h 0 ≤ j ≤ M, n+1 PM +1 =0 2 2 UN SCHÉMA D’EULER IMPLICITE n pour n = 0, . . . , N − 1 (et aussi par convention P−1 = 0). On note A la matrice de discrétisation de A, de taille M + 1, t.q. (AP )j := + σ 2 2 −Pj−1 + 2Pj − Pj+1 Pj+1 − Pj sj − rsj + rPj , 2 2 h h 0 ≤ j ≤ M, (avec la convention P−1 = 0). NB: A est la même matrice que pour le schéma aux différences finies décentré à droite de l’option europénne correspondante. Notons aussi g le vecteur de composantes gj := ϕ(sj ). On obtient alors l’écriture équivalente du schema (EE), dans RM +1 : P n+1 − P n + AP n , P n+1 − g) = 0, δt P 0 = g. min( n = 0, . . . , N − 1, (2) (le ”min” étant pris composante par composante). On vérifie enfin que l’itération principale s’écrit aussi P n+1 = max(P n − δtAP n , g). • Télécharger le programme tp3.sci à complèter. Il s’agit du programme du précédent TP. Il y a quelques modifications sur la partie graphique puisqu’on ne possède plus la solution exacte ici. Pour simplifier on travaille avec des matrices pleines (TYPE=FULL). • Modifier la variable METHODE à la valeur ’EE-AMER’ (calcul pour l’option américaine), et programmer le schema (EE) correspondant. • Vérifier que le programme donne une solution stable avec les paramètres M=20 et N=20, mais qu’il y a un problème de stabilité avec d’autres paramètres (par ex. M=50 avec N=20). 2 Un schéma d’Euler Implicite On désire programmer le schéma d’Euler Implicite (EI) en temps qui s’écrit naturellement comme suit: P n+1 − P n + AP n+1 , P n+1 − g) = 0, δt P 0 = g. min( n = 0, . . . , N − 1, (3) Posons B = I +δtA et b = P n : pour chaque n, on doit trouver x solution du système non linéaire min(Bx − b, x − g) = 0. (4) On prendra alors P n+1 = x. On propose de tester deux algorithmes pour résoudre (4). 2 UN SCHÉMA D’EULER IMPLICITE 2.1 3 Algorithme de Brennan et Schwartz - ou ”méthode UL” Il existe une méthode directe pour résoudre min(Bx−b, x−g) = 0, lorsque la solution cherchée a un ”profil” particulier.1 L’idée est d’écrire une décomposition de type B = UL (L: matrice triangulaire inférieure et U: matrice triangulaire supérieure avec Uii = 1), et d’espérer avoir l’équivalence min(ULx − b, x − g) = 0 ⇔ min(Lx − U −1 b, x − g) = 0. Enfin, on utilise que la deuxième écriture possède une résolution explicite simple: (i) résolution de c = U −1 b: algorithme de montée; (ii) résolution de min(Lx − c, x − g) = 0: algorithme de descente projetée. • Définir METHODE==’EI-AMER-UL’ dans votre fichier principal. • Programmer la décomposition B = UL d’une matrice tridiagonale B quelconque: On pourra télécharger le fichier ul_q.sci (et le renommer en ul.sci), puis compléter la fonction function [U,L]=ul(B). Tester la décomposition sur la matrice B := I + δtA dans le cas M = 10. On pourra pour cela introduire dans la boucle principale un test à la première itération n=0: case METHODE==’EI-AMER-UL’ if n==0 getf ul.sci; // loading functions // Here decompose B=UL and test the decomposition end ... • Programmer l’algorithme de descente et de descente projetée (compléter les fonctions descente et descente_p dans ul.sci). Tester la fonction descente. • Programmer le schema en utilisant les algorithmes de montée (fourni) et de descente projetée. Tester la méthode avec N = 20, M + 1 = 50 (Payoff classique) Vérifier on resoud bien min(Bx − b, x − g) = 0 à chaque itération en temps. Pour cela on pourra rajouter un affichage de || min(Bx − b, x − g)||∞ après le calcul du nouveau P dans l’itération principale: Pold=P; P=... 1 Dans le cas du put américain à 1 actif et pour une approche par éléments finis, voir la Réf. Jaillet, Lamberton, Lapeyre, 1990. L’algorithme a été initialement introduit par Brennan et Schwartz pour une approche par éléments finis. 4 3 UNE MÉTHODE DE SPLITTING err=norm(min(B*P-Pold,P-P0(s))); printf(’Verif: min(B x- b, x-g)= %f\n’, err); • Reprendre le test avec le payoff particulier correspondant à ϕ2 . Vérifier dans ce cas qu’on n’a pas min(Bx − b, x − g) 6= 0 (dès n = 0). 2.2 Une méthode de Newton On veut appliquer une méthode de type Newton pour resoudre F (x) = 0 avec F (x) := min(Bx − b, x − g). On considère l’algorithme suivant: itérer sur k ≥ 0 (x0 point de départ à choisir) xk+1 = xk − F ′ (xk )−1 F (xk ), jusqu’à ce que F (xk ) = 0 (ou encore xk+1 = xk ). On prendra la définition suivante de F ′ (xk ) (ligne par ligne): Bi,j if (Bxk − b)i ≤ (xk − g)i, ′ k F (x )i,j := δi,j otherwise. • Fixer le paramêtre SCHEMA=’EI-AMER-N’. • Programmer l’algorithme en complétant la fonction se trouvant dans newton_q.sci (fichier à télécharger et à renommer en newton.sci). • Tester la méthode avec N = 20, M = 50 avec le Payoff classique ϕ1 . • Tester avec le payoff particulier ϕ2 , vérifier que la méthode fonctionne encore. NB. Il existe d’autres méthodes à peu près équivalentes: Méthode ”Primale-Duale”, méthode d’itération sur les politiques, algorithme de Howard. 3 Une méthode de splitting On propose une méthode simplifiée: P n+1,(1) − P n + AP n+1,(1) = 0, δt t.q. P n+1 = max(P n+1,(1) , g) Calculer P n+1,(1) t.q. (5) Calculer P n+1 (6) • Programmer cette méthode (SCHEMA=EI-SPLIT). Quel avantage voyez-vous par rapport à la méthode de Howard ? • Proposer une variante de type Crank-Nicolson.