Documente Academic
Documente Profesional
Documente Cultură
Obiective
Aplicaţia 5.2.
Să se utilizeze metoda înfăşurătoarei (vezi Figura 5.6) pentru a genera n
realizări ale unei variabile aleatoare 𝑋~𝑁(0,1).
Suport teoretic
Metoda respingerii
Metoda respingerii, cunoscută în literatura de specialitate şi ca metoda
acceptării şi respingerii, se referă la o serie întreagă de algoritmi care au în
comun faptul că variabilele care provin dintr-o anumită repartiţie dorită sunt
generate doar după un număr de iteraţii. După fiecare iteraţie în care se
generează valori aleatoare după procedee cunoscute, se testează dacă acestea
verifică o anumită condiţie: dacă acea condiţie este îndeplinită, algoritmul se
opreşte şi se “acceptă” rezultatul furnizat, iar în caz contrar valorile generate
se “resping” şi se reiau iteraţiile. Evident numărul de iteraţii fiind aleator, este
de dorit ca un astfel de algoritm să aibă în medie un număr de respingeri mic.
Din mulţimea de algoritmi care funcţionează după principiul metodei
respingerii, foarte importanţi sunt algoritmii care generează variabile
45
Modele de simulare. Îndrumar de laborator
Metoda polară
Algoritmul metodei polare este prezentat în Figura 5.1 [8].
Repetă
generează 𝑈1 ~𝑈(0,1)
generează 𝑈2 ~𝑈(0,1)
𝑉1 = 2𝑈1 − 1
𝑉2 = 2𝑈2 − 1
𝑆 = 𝑉1 2 + 𝑉2 2
Până când 𝑆 < 1
−2ln(𝑆) −2ln(𝑆)
𝑋1 = 𝑉1 √ , 𝑋2 = 𝑉2 √
𝑆 𝑆
Stop
Figura 5.1. Algoritmul metodei polare
1 respins
𝛤(𝑉1 , 𝑉2 )
-1 0 1
𝛤(𝑉1 , 𝑉2 )
acceptat
-1
Figura 5.2. Ilustrarea grafică a metodei polare
46
Lucrarea de laborator 5
Metoda înfăşurătoarei
Să presupunem că vrem să generăm o variabilă aleatoare 𝑋 de densitate
cunoscută 𝑝(𝑥) , adică 𝑋~𝑝(𝑥) . Presupunem de asemenea că există o
densitate de repartiţie 𝑔(𝑥) definită pe acelaşi domeniu 𝐷 ca şi 𝑝(𝑥), care
satisface următoarele două condiţii:
1. Există un algoritm eficient de generare a variabilei 𝑌~𝑔(𝑥);
2. Există un număr real 𝑐 > 0 astfel încât 𝑝(𝑥) ≤ 𝑐𝑔(𝑥) , adică 𝑝(𝑥) este
“înfăşurată” de 𝑔(𝑥).
În aceste condiţii, algoritmul din Figura 5.3 generează 𝑋~𝑝(𝑥) [11].
Repetă
generează 𝑌~𝑔(𝑥)
generează u~𝑈(0,1)
𝑝(𝑥)
Până când 𝑢 <
𝑐𝑔(𝑥)
𝑋←𝑌
Stop
Figura 5.3. Algoritmul metodei înfăşurătoarei - varianta generală
O variantă simplificată, dar mai puţin eficientă a metodei înfăşurătoarei este
următoarea. Considerăm că există 𝑀 număr real pozitiv astfel încât
𝑀 = max𝑥∈𝐷 𝑝(𝑥). Dacă domeniul de definiţie 𝐷 este intervalul [𝑎, 𝑏], unde
𝑎 < 𝑏, atunci algoritmul de generare este cel din Figura 5.4.
Repetă
generează 𝜂1 ~𝑈(𝑎, 𝑏)
generează 𝜂2 ~𝑈(0, 𝑀)
Până când 𝜂1 < 𝑝(𝜂2 )
𝑋 ← 𝜂1
Stop
Figura 5.4. Algoritmul metodei înfăşurătoarei- varianta simplificată
47
Modele de simulare. Îndrumar de laborator
respins
y=p(x)
𝛤(𝜂1 , 𝜂2 )
acceptat
0 a X b
Repetă
generează 𝜏~𝑈(0,1)
𝑌 ← −ln(𝜏)
generează 𝑢~𝑈(0,1)
𝑌2 1
𝑌− −
Până când 𝑢 < 𝑒 2 2
generează 𝜂~𝑈(0,1)
𝑠 ← −1
1
Dacă 𝜂 ≥ atunci
2
𝑠←1
𝑋 ← 𝑠𝑌
Stop
Figura 5.6. Algoritmul pentru generarea unei variabile 𝑁(0,1)
Observaţii
Se observă uşor că densitatea de repartiţie 𝑁(0,1) notată 𝑝(𝑥) se poate
scrie ca o amestecare aleatoare de două densităţi de repartiţie 𝑝1 (𝑥) şi
𝑝2 (𝑥). Mai precis, avem:
1 1
𝑝(𝑥) = 𝑝1 (𝑥) + 𝑝2 (𝑥) , (5.1)
2 2
Stop
unde:
48
Stop
Lucrarea de laborator 5
2 𝑥2
−
√ 𝑒 2 , 𝑑𝑎𝑐ă 𝑥 > 0
𝑝1 (𝑥) = { 𝜋 (5.2)
0, 𝑑𝑎𝑐ă 𝑥 ≤ 0
0, 𝑑𝑎𝑐ă 𝑥 > 0
𝑝2 (𝑥) = { 2 − 𝑥2 (5.3)
√ 𝑒 2 , 𝑑𝑎𝑐ă 𝑥 ≤ 0
𝜋
−1 1
𝑠=( 1 1) (5.4)
2 2
( x m) 2
1
- Funcţia densitate de repartiţie: f ( x)
2 2
e (5.5)
2
- Media: M ( X ) m (5.6)
- Dispersia: D 2 ( X ) 2 (5.7)
49
Modele de simulare. Îndrumar de laborator
Modul de lucru
Aplicaţia 5.1.
button1
label1 textBox1
textBox2
button2
chart1
50
Lucrarea de laborator 5
51
Modele de simulare. Îndrumar de laborator
j = 0;
for (i = 0; i < n; i++)
{
do
{
U1 = r.NextDouble();
U2 = r.NextDouble();
V1 = 2 * U1 - 1;
V2 = 2 * U2 - 1;
S = V1 * V1 + V2 * V2;
chart1.Series[2].Points.AddXY(V1, V2);
if (S>1)
{
chart1.Series[2].Points[j].Color = Color.Red;
chart1.Series[2].Points[j].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Star5;
}
else chart1.Series[2].Points[j].Color = Color.Green;
j++;
}
while (S>1);
X1 = V1 * Math.Sqrt(-2 * Math.Log(S) / S);
X2 = V2 * Math.Sqrt(-2 * Math.Log(S) / S);
textBox2.AppendText("\r\nExperimentul " + (i+1).ToString() + ": ");
textBox2.AppendText("\r\nX1 = " + X1.ToString());
textBox2.AppendText("\r\nX2 = " + X2.ToString());
textBox2.AppendText("\r\n=======================");
}
}
Observaţii
- Pentru desenarea cercului unitate (de ecuaţie 𝑥 2 + 𝑦 2 = 1 ), s-au
reprezentat grafic semicercurile formate din totalitatea punctelor de
coordonate (𝑡, √1 − 𝑡 2 ) , respectiv (𝑡, −√1 − 𝑡 2 ) , unde t parcurge
intervalul [−1, 1] cu un pas foarte mic;
- Pentru a genera câte n valori pentru variabilele 𝑋1 , 𝑋2 ~𝑁(0,1), se repetă de
n ori algoritmul metodei polare (iteraţia în care se generează puncte
uniform aleatoare pe pătrat, până când un punct “cade” în interiorul
cercului);
- În grafic s-au reprezentat toate punctele generate: cele respinse cu steluţe
de culoare roşie, cele acceptate cu pătrăţele de culoare verde;
- Cele n valori generate pentru fiecare variabilă 𝑋1 , 𝑋2 ~𝑁(0,1) nu au rămas
memorate în totalitatea lor, singurul scop momentan fiind afişarea şi
vizualizarea lor. O eventuală utilizare ulterioară a valorilor generate ar fi
necesitat memorarea acestora în variabile de tip vector.
52
Lucrarea de laborator 5
53
Modele de simulare. Îndrumar de laborator
Aplicaţia 5.2.
textBox2
label1 textBox1
label2 button1
54
Lucrarea de laborator 5
Observaţii
55
Modele de simulare. Îndrumar de laborator
56