TP19 Estimation Méthode de Monte

publicité
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écoamé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 X 1 , X2 indépendantes de même loi uniforme sur [ 0 , 1 ].
1Calculer la probabilité P [ X1² + X2² ≤ 1 ] et illustrer ce résultat graphiquement.
2Ecrire un script permettant d’afficher une valeur approchée de  par cette méthode.
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
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 d’une fonction de répartition
On veut calculer la somme
1Proposer une méthode de Monte-Carlo pour le calcul de cette somme.
2Ecrire plusieurs scripts répondant à la question.
3Proposer un calcul direct sur ordinateur. Comparer les différents résultats obtenus
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
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.
Un troisième exemple : à l’aide d’une espérance
On veut
123-
calculer l’intégrale
Montrer que cette intégrale est l’espérance d’une variable aléatoire de loi connue.
Ecrire le script correspondant au calcul approchée de cette intégrale
Comparer avec la commande « 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
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 integrate :
0.8356488
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.
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
 2) par le théorème central limite.
converge en loi vers X* ↪ N (0,1) donc P[ |
P( |
≤  ]  2 () – 1 où  est la fonction de répartition de X*
- J | ≤  )  0.95 pour 2 () = 1.95 ce qui donne  = -1(0.975)  0.8352 et  =
eps1= 0.8352*st_deviation(Y)/sqrt(N)
disp(m+eps1,' et ',m-eps1,'l''intégrale est comprise entre ')
Comparer les deux méthodes.

l'intégrale est comprise entre
0.8265550
et
0.8350703
Téléchargement