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