TP 2 : Intégration numérique
Transcription
TP 2 : Intégration numérique
Grenoble INP – Pagora 1ère année Analyse numérique TP 2 : Intégration numérique 1 Méthode de Monte Carlo On rappelle ici rapidement le principe du calcul d’une intégrale par la méthode de Monte Carlo. On cherche à calculer l’intégrale Z I= f (x) dx Ω avec Ω ∈ Rn de volume V connu, c’est à dire qu’on connait la valeur exacte de Z V = 1 dx Ω La méthode de Monte Carlo consiste à tirer aléatoirement de manière uniforme un certain nombre de valeurs de x ∈ Ω notés xi , i = 1, . . . , N et on approche l’intégrale par I ≈ QN = 1.1 N V X f (xi ) N i=1 Un premier exemple sur R Question 1. Dans un fichier integraleMC.sci, écrire une fonction Scilab permettant d’estimer l’intégrale 1 de sur [0, 1] par la méthode de Monte Carlo avec pour entrée N le nombre de tirages aléatoires 1 + x2 π effectués. Vérifier que le résultat obtenu tend bien vers arctan(1) = . (disponible sous Scilab en tapant 4 atan(1) ou %pi./4) Question 2. Récupérer à l’endroit indiqué par votre enseignant le fichier evol integraleMC.sce. Ce fichier contient les instructions suivantes N = 1000 ; nb = 20 ; for i = 1:nb QNevol = zeros(1,N) ; for k = 1:N QNevol(1,k) = integraleMC(k) ; end // style = -1 trace des + au lieu d’une courbe // faire plusieurs plot2d a la suite superpose les graphes plot2d(1:N,QNevol,style=-1) ; end // style = 2 permet de tracer une ligne bleu plot2d(1:N,%pi./4.*ones(1,N),style=2) ; Que fait ce programme ? Que pensez vous du graphe final obtenu ? Qu’en déduisez vous sur la rapidité de la convergence de la méthode de Monte Carlo sur cet exemple ? 1 1.2 Un exemple de l’utilité de la méthode de Monte Carlo Question 3. Soit f la fonction de 2 variables définie sur [0, 1] × [0, 1] de la manière suivante 1 si x2 + y 2 ≤ 1 f (x, y) = 0 sinon Intuiter (en faisant un dessin par exemple) la valeur de l’intégrale suivante ZZ f (x, y) dx dy [0,1]×[0,1] Question 4. Compléter le fichier integraleMC2.sci afin de calculer l’intégrale de la question précédente par la méthode de Monte Carlo. function [ QN ] = integraleMC2(N) // N le nombre de points utilises pour la methode de Monte Carlo // QN va contenir l’estimation de l’integrale QN = 0 ; for k = 1:N // simulation aleatoire de loi uniforme d’un point dans [0,1]x[0,1] u = rand(1,2) ; x = u(1,1) ; // abscisse du point simule y = u(1,2) ; // ordonnee du point simule // calcul de f(x,y) if ( ....... ) then f = ......... ; else f = ......... ; end QN = QN + ........... ; end endfunction puis modifier le fichier evol integraleMC.sce de la manière suivante : – QNevol(1,k) = integraleMC(k) par QNevol(1,k) = integraleMC2(k) – Dans plot2d(1:N,%pi./4.*ones(1,N),style=2), remplacer %pi./4 par la valeur de l’intégrale intuitée juste avant. afin de vérifier si votre intuition à la question précédente était la bonne. 2 Méthodes de Newton – Cotes Dans toute la section, nous allons essayer d’approcher le calcul de l’intégrale Z 10 1 = 2 arctan(10) ≈ 2.9422553 2 −10 1 + x en utilisant les formules de Newton – Cotes. 2 Figure 1 – 2.1 1 sur [−10, 10] 1 + x2 Formules de quadrature simples (Newton-Cotes fermés) Question 5. Récupérer à l’endroit indiqué par votre enseignant le fichier NCF.sci et compléter le fichier en suivant les commentaires dans le code. function [ inte ] = NCF(a,b,n,wi) // on veut approcher l’integrale de f(x) = 1./(1+x.*x) sur [a,b] // n est l’entier (tel que l’on ait n+1 points d’interpolation) // ex : n = 1 formule des trapezes ; n = 2 formule de Simpson // wi est un vecteur donne en entree (vous n’avez pas besoin de le donner) // contenant les poids necessaires a la formule de Newton-Cotes ferme // ex : n = 1, wi = [1./2 1./2] // inte va contenir l’estimation de l’integrale // remplir le vecteur x contenant les points d’integration x = ................. ; // y vecteur contenant f(x) y = (1 + x.*x).^(-1) ; // l’integrale estimee vaut inte = ................ ; endfunction A l’arrivée, la fonction NCF doit retourner l’estimation de l’intégrale de formule de Newton-Cotes fermée à n + 1 points. 1 sur le segment [a, b] pour la 1 + x2 Question 6. Récupérer à l’endroit indiqué par votre enseignant le fichier NCF verif.sce. Celui-ci teste les formules de Newton-Cotes pour différents n. Normalement vous devez voir s’afficher les traces suivantes Estimations integrale de 1/(1+x*x) sur [-10,10] 3 0.1980198 13.39934 1.2880371 3.2444783 1.696548 6.8280169 La vraie valeur est 2.9422553 Ecart en valeur absolue avec la vraie valeur 2.7442355 10.457085 1.6542183 0.3022229 1.2457073 3.8857615 Si vous avez des résultats différents, c’est que vous avez des problèmes. Si vous avez bien les bons résultats, que pensez vous de la convergence des formules de Newton-Cotes dans ce cas ? 2.2 Formules composites Question 7. Récupérer à l’endroit indiqué par votre enseignant le fichier NCF comp.sci et compléter le fichier en suivant les commentaires dans le code. function [ inte ] = NCF_comp(a,b,r) // on veut approcher l’integrale de f(x) = 1./(1+x.*x) sur [a,b] // par la formule composite des trapezes (NC ferme, n = 1) // r est le nombre de subdivision de l’intervalle [a,b] // inte va contenir l’estimation de l’integrale n = 1 ; wi = [1./2 1./2] ; // t vecteur contenant les ti (decoupage de intervalle [a,b]) // le vecteur est de taille r+1 t = ................ ; inte = 0. ; // Boucle de calcul pour l’integrale for k = 0:(r-1) // l’integrale estimee vaut inte = inte + NCF(... , ... , n, wi) ; end endfunction puis exécuter le fichier NCF compverif.sce et vérifier la convergence de la méthode en fonction du nombre de subdivision r. Question 8. Modifier NCF comp.sci pour utiliser une autre méthode de Newton-Cotes fermé (par exemple Simpson) et comparer la vitesse de convergence de la méthode par rapport à la méthode des trapèzes. 2.3 Pour aller plus loin Question 9. Reprendre les questions 5 à 8 pour les formules de Newton-Cotes ouvert vues en cours. 4