0% ont trouvé ce document utile (0 vote)
25 vues7 pages

TP Simulation Aléatoire

Le document présente un TP de simulation aléatoire utilisant différentes lois de probabilité, notamment la loi normale, la loi de Weibull, la loi de Cauchy, et la méthode de Monte-Carlo pour l'estimation d'intégrales. Des algorithmes et des codes R sont fournis pour générer des réalisations et visualiser les résultats à l'aide d'histogrammes. La méthode de rejet est également expliquée pour simuler des variables aléatoires avec une densité cible.

Transféré par

Ismaël
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues7 pages

TP Simulation Aléatoire

Le document présente un TP de simulation aléatoire utilisant différentes lois de probabilité, notamment la loi normale, la loi de Weibull, la loi de Cauchy, et la méthode de Monte-Carlo pour l'estimation d'intégrales. Des algorithmes et des codes R sont fournis pour générer des réalisations et visualiser les résultats à l'aide d'histogrammes. La méthode de rejet est également expliquée pour simuler des variables aléatoires avec une densité cible.

Transféré par

Ismaël
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP de Simulation Aléatoire I

Université Nationale des Sciences, Technologies, Ingénierie et Mathématiques


(UNSTIM)
École Nationale Supérieure de Génie Mathématique et Modélisation
(ENSGMM)
Filière : GMM 1 Année académique : 2024–2025
TCHINHOUN Thibaut - ANATO Kristland

I - Algorithme de Box-Muller
On utilise l’algorithme de Box-Muller pour générer 50 réalisations indépendantes suivant
une loi normale N (35, 5). Les formules sont :
q q
Z1 = −2 ln U1 cos(2πU2 ), Z2 = −2 ln U1 sin(2πU2 ),

où U1 , U2 ∼ U(0, 1), et X = 35 + 5Z.


Listing 1 – Code R pour Box-Muller
1 # Param tres
2 n <- 50 # Nombre de r a l i s a t i o n s
3 mu <- 35 # Moyenne
4 sigma <- 5 # cart - type
5

6 # Algorithme de Box - Muller


7 U1 <- runif ( n / 2)
8 U2 <- runif ( n / 2)
9 Z1 <- sqrt ( -2 * log ( U1 ) ) * cos (2 * pi * U2 )
10 Z2 <- sqrt ( -2 * log ( U1 ) ) * sin (2 * pi * U2 )
11 Z <- c ( Z1 , Z2 )
12 X <- mu + sigma * Z
13

14 # Histogramme
15 hist (X , prob = TRUE , main = " Histogramme ␣ de ␣ N (35 , ␣ 5) " , xlab = " Valeurs
" , col = " lightblue " )
16 curve ( dnorm (x , mean = mu , sd = sigma ) , add = TRUE , col = " red " , lwd =
2)

1
Figure 1 – Histogramme des réalisations de N (35, 5) avec densité superposée.

II - Loi de Weibull par inversion


La fonction de répartition de la loi de Weibull est :

F (x) = 1 − exp(−(λx)a ), x > 0.

Par inversion, pour U ∼ U(0, 1), on a :

(− ln U )1/a
X= .
λ

Listing 2 – Code R pour la loi de Weibull


1 # Param tres
2 n <- 1000
3 a <- 2
4 lambda <- 1
5

6 # Simulation par inversion


7 U <- runif ( n )
8 X <- (( - log ( U ) ) ^(1 / a ) ) / lambda
9

10 # Histogramme

2
11 hist (X , prob = TRUE , main = " Histogramme ␣ de ␣ la ␣ loi ␣ de ␣ Weibull " , xlab =
" Valeurs " , col = " lightblue " )
12 curve ( dweibull (x , shape = a , scale = 1 / lambda ) , add = TRUE , col = " red
" , lwd = 2)

Figure 2 – Histogramme des réalisations de la loi de Weibull.

III - Loi de Cauchy


1 - Fonction de répartition
La densité de la loi de Cauchy est :
1
g(x) = , x ∈ R.
π(1 + x2 )

La fonction de répartition est :


arctan(x) 1
G(x) = + .
π 2

3
2 - Simulation par inversion
Pour U ∼ U(0, 1), on a :
1
  
X = tan π U − .
2
On utilise u1 = 0.313, u2 = 0.03, u3 = 0.872.
Listing 3 – Code R pour la loi de Cauchy
1 # Valeurs de U
2 U <- c (0.313 , 0.03 , 0.872)
3

4 # Simulation
5 X <- tan ( pi * ( U - 0.5) )
6 print ( X )

Résultats : X1 ≈ −0.655, X2 ≈ −3.078, X3 ≈ 1.253.

IV - Intégrale par Monte-Carlo


On considère l’intégrale :
Z 4
1 y2
I= √ e− 2 dy = Φ(4) − Φ(0).
0 2π

1 - Valeur exacte

Listing 4 – Code R pour la valeur exacte


1 I _ exact <- pnorm (4) - pnorm (0)
2 print ( I _ exact )

Résultat : I ≈ 0.4999683.

2 et 3 - Estimation et IC

Listing 5 – Monte-Carlo et intervalle de confiance


1 n <- 10000
2 a <- 0; b <- 4
3 f <- function ( y ) (1 / sqrt (2 * pi ) ) * exp ( - y ^2 / 2)
4 Y <- runif (n , a , b )
5 f _ Y <- f ( Y )
6 I _ hat <- ( b - a ) * mean ( f _ Y )
7

8 s <- sd ( f _ Y )
9 se <- s / sqrt ( n )
10 IC <- c ( I _ hat - 1.96 * se , I _ hat + 1.96 * se )
11 print ( list ( Estimation = I _ hat , IC _ 95 = IC ) )

4
4 - Convergence

Listing 6 – Convergence de Monte-Carlo


1 n _ max <- 10000
2 I _ n <- numeric ( n _ max )
3 se _ n <- numeric ( n _ max )
4 for ( i in 1: n _ max ) {
5 Y <- runif (i , 0 , 4)
6 f _ Y <- f ( Y )
7 I _ n [ i ] <- 4 * mean ( f _ Y )
8 se _ n [ i ] <- sd ( f _ Y ) / sqrt ( i )
9 }
10 plot (1: n _ max , I _n , type = " l " , ylim = c (0.45 , 0.55) ,
11 xlab = " Taille ␣ de ␣l ’ chantillon " , ylab = " Estimation ␣ de ␣ I " , main
= " Convergence ␣ de ␣ Monte - Carlo " )
12 lines (1: n _ max , I _ n + 1.96 * se _n , col = " blue " , lty = 2)
13 lines (1: n _ max , I _ n - 1.96 * se _n , col = " blue " , lty = 2)
14 abline ( h = I _ exact , col = " red " , lwd = 2)
15 legend ( " topright " , legend = c ( " Estimation " , " IC ␣ 95% " , " Valeur ␣ exacte " )
,
16 col = c ( " black " , " blue " , " red " ) , lty = c (1 , 2 , 1) )

5
Figure 3 – Convergence de l’estimation de I avec intervalle de confiance à 95%.

V - Méthode de rejet
On simule une variable aléatoire avec la densité :
2√
f (x) = 1 − x2 , x ∈ [−1, 1],
π
1
en utilisant la densité instrumentale g(y) = 2
sur [−1, 1].

1 - Constante c
On cherche c tel que f (x) ≤ cg(x). On a :

f (x) 2
π
1 − x2 4√
= 1 = 1 − x2 .
g(x) 2
π

Le maximum est atteint en x = 0, soit π4 . Ainsi, c = π4 .

2 - Simulation par rejet


y+1 f (Y )
On génère Y ∼ U(−1, 1) avec G(y) = 2
, soit Y = 2U − 1. On accepte Y si U ′ ≤ cg(Y )
.

6
Listing 7 – Code R pour la méthode de rejet
1 # Param tres
2 n <- 10
3 c <- 4 / pi
4 f <- function ( x ) (2 / pi ) * sqrt (1 - x ^2)
5 g <- function ( x ) 1 / 2
6

7 # Simulation
8 X <- numeric (0)
9 while ( length ( X ) < n ) {
10 U1 <- runif (1) # Pour Y
11 U2 <- runif (1) # Pour le test de rejet
12 Y <- 2 * U1 - 1 # Simulation de Y selon g
13 if ( U2 <= f ( Y ) / ( c * g ( Y ) ) ) {
14 X <- c (X , Y )
15 }
16 }
17

18 # R sultats
19 print ( X )
20

21 # Histogramme pour v r i f i c a t i o n
22 hist (X , prob = TRUE , main = " Histogramme ␣ de ␣ la ␣ loi ␣ cible " , col = "
lightblue " )
23 curve ( f ( x ) , add = TRUE , col = " red " , lwd = 2)

Les réalisations simulées sont :

X ≈ {−0.449, −0.171, −0.796, −0.948, 0.794, −0.343, −0.784, −0.948, −0.893, 0.824}.

Ces valeurs sont tirées de l’exécution du code R avec ‘[Link](123)‘

Vous aimerez peut-être aussi