TP19 Estimation Méthode de Monte-Carlo (1)
Classe entière
Méthode de Monte-Carlo :
Ce terme désigne toute méthode permettant d’évaluer une valeur en utilisant les probabilités et en répétant des expériences
aléatoires.
Le nom de ces méthodes fait allusion aux jeux de hasard pratiqués à Monte-Carlo , elle a été inventée par le physicien gréco-
américain Nicholas Metropolis ( 1915-1999 ).
Un premier exemple : par calcul d’une probabilité
On veut donner une valeur approchée de par la méthode de Monte-Carlo.
Pour ce faire, on définit deux variables aléatoires X1 , X2 indépendantes de même loi uniforme sur [ 0 , 1 ].
1- Calculer la probabilité P [ X1² + X2² ≤ 1 ] et illustrer ce résultat graphiquement.
2- Ecrire un script permettant d’afficher une valeur approchée de par cette méthode.
Quel théorème du cours assure la convergence de p vers lorsque N tend vers + ? Observer la vitesse de convergence.
Un deuxième exemple : à l’aide dune fonction de répartition
On veut calculer la somme



1- Proposer une méthode de Monte-Carlo pour le calcul de cette somme.
2- Ecrire plusieurs scripts répondant à la question.
3- Proposer un calcul direct sur ordinateur. Comparer les différents résultats obtenus
Quel théorème du cours assure la convergence L * exp(5) vers la somme cherchée quand N tend vers + ?
Observer la vitesse de convergence. Donner une variante du dernier calcul à l’aide d’une boucle for.
N=1000
X=grand(1,N,'poi',5)
// Avec Tabul et cumsum
T=tabul(X,'i')
T(:,3)=cumsum(T(:,2)/N)*exp(5)
disp(T)
// Avec length et find
L=length(find(X<=10))/N
disp(L*exp(5))
// Avec cdfpoi
x=10
P=cdfpoi('PQ',x,5)
disp(P*exp(5))
// Calcul direct
k=[1:x]
S=1 + sum(5.^k ./ cumprod(k))
disp(S)
Avec tabul et cumsum :
0. 9. 1.3357184
1. 41. 7.420658
2. 101. 22.410387
3. 131. 41.852511
4. 164. 66.192269
5. 177. 92.461398
6. 144. 113.83289
7. 103. 129.11945
8. 58. 137.72741
9. 39. 143.51552
10. 21. 146.6322
11. 8. 147.81951
12. 3. 148.26475
13. 1. 148.41316
Avec length et find : 146.6322
Avec cdfpoi : 146.3806
Par calcul direct : 146.3806
N=1000000
X= rand(2,N)
Y=X(1,:).^2+X(2,:).^2
p=length(find(Y<1))/N*4
disp(p,'Valeur approchée de pi : ')
disp(%pi,'Valeur exacte de pi :')
// graphique
plot([0,0],[1,0],[1,1],[0,1],[0,0])
theta=[0:0.1:%pi/2]
plot(cos(theta), sin(theta),'red')
plot2d(X(1,:),X(2,:),-1)
Valeur approchée de pi :
3.14274
Valeur exacte de pi :
3.1415927
Un troisième exemple : à l’aide d’une espérance
On veut calculer l’intégrale 

1- Montrer que cette intégrale est l’espérance d’une variable aléatoire de loi connue.
2- Ecrire le script correspondant au calcul approchée de cette intégrale
3- Comparer avec la commande « integrate »
Quel théorème permet d’affirmer que m converge vers 

quand N tend vers + ? Que dire de la vitesse de convergence ?
Evaluation de l’erreur d’approximation :
On sait par la loi faible des grands nombres que les valeurs empiriques obtenues tendent vers la valeur cherchée quand N
vers +. Mais comment évaluer l’erreur d’approximation ?
1) par l’inégalité de Bienaymé-Tchebychev
On veut estimer J = 

= E(
 ) où X U [ 0 , 1 ]
On considère un N-échantillon (X1 , ... , XN) indépendant et identiquement distribué de loi U [ 0 , 1 ].
i 1 , n , Yi =
 ; on note
  

   
, E(
) = J , V(
) = 
> 0, P [ |
- J | ] 


donc P[ J [
- ,
+ ] ) 1 - 


Si on veut que cette probabilité soit supérieure ou égale à 95%, on prendra : =

Le problème est que l’on ne connaît pas l’écart-type de Y1 . Scilab calcule l’écart-type empirique par la commande st_deviation.
2) par le théorème central limite.


converge en loi vers X* N (0,1) donc P[ | 

 ] 2 () 1 où est la fonction de répartition de X*
P( |
- J | ≤ ) 0.95 pour 2 () = 1.95 ce qui donne = -1(0.975) 0.8352 et =
Comparer les deux méthodes.
N=1000
X=rand(1,N)
Y=(1+X.^3).^(-1)
m=sum(Y)/N
disp(m,'Par l''espérance : ')
// calcul avec "integrate"
disp(integrate('1/(1+x^3)','x',0,1),'Par integrate : ')
Par l'espérance avec N = 1 000 :
0.8401357
Par l'espérance avec N = 10 000 :
0.8313303
Par l'espérance avec N = 100 000 :
0.8357538
Par integrate :
0.8356488
eps = st_deviation(Y)/ sqrt(0.05*N)
disp(m+eps,' et ',m-eps,'l''intégrale est comprise entre ')
l'intégrale est comprise entre
0.8134900
et
0.8590063
eps1= 0.8352*st_deviation(Y)/sqrt(N)
disp(m+eps1,' et ',m-eps1,'l''intégrale est comprise entre ')
l'intégrale est comprise entre
0.8265550
et
0.8350703
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !