Documente Academic
Documente Profesional
Documente Cultură
Obiective
Aplicaţia 1.
Să se genereze n valori ale unei variabile aleatoare cu repartiţie normală 𝑁(𝑚, 𝜎 2 ). Să se
calculeze media aritmetică a valorilor generate şi să se compare cu media teoretică a repartiţiei
normale. Aproximativ câte valori trebuie generate, astfel încât în mod constant (în experimente
succesive), media aritmetică să aproximeze cu o precizie bună (la primele două zecimale) media
teoretică?
Aplicaţia 2.
Să se genereze n valori ale unei variabile aleatoare repartizate exponenţial negativ. Să se
compare media aritmetică a valorilor generate cu media teoretică a repartiţiei exponenţial
negative.
Aplicaţia 3.
Cunoscând că variabila aleatoare reprezentând timpul de funcţionare a unui echipament
(în ani) are o repartiţie exponenţial negativă de parametru λ, care este probabilitatea ca un astfel
de echipament să mai funcţioneze corespunzător şi după t ani? Să se calculeze probabilitatea
teoretică si apoi să se calculeze această probabilitate şi în mod empiric (prin aproximare cu
frecvenţa).
1
Modele de simulare. Îndrumar de laborator
Suport teoretic
Metoda respingerii
respins
Algoritmul metodei respingerii:
M
repetă
generează 𝜂1 ~𝑈(𝑎, 𝑏)
(𝜂1 , 𝜂2 ) generează 𝜂2 ~𝑈(0, 𝑀)
( xm)2
1
- Funcţia densitate de repartiţie: f ( x) e 2 2
(6.1)
2
- Media: M ( X ) m (6.2)
- Dispersia: D 2 ( X ) 2 (6.3)
2
Lucrarea de laborator 6
1
- Media: M ( X ) (6.6)
1
- Dispersia: D 2 ( X ) (6.7)
2
Modul de lucru
Aplicaţia 1.
textBox6
textBox1
textBox2
textBox3
textBox4
textBox5
chart1
button1
button2
3
Modele de simulare. Îndrumar de laborator
4
Lucrarea de laborator 6
chart1.Series[1].Points.Clear();
x = new double[n];
M = f(m, m, d);
j = 0;
textBox6.Clear();
for (i=0;i<n;i++)
{
do
{
eta1 = a + (b - a) * r.NextDouble();
eta2 = M * r.NextDouble();
chart1.Series[1].Points.AddXY(eta1, eta2);
if (eta2 > f(eta1, m, d))
{
chart1.Series[1].Points[j].Color = Color.Red;
chart1.Series[1].Points[j].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Star5;
}
else chart1.Series[1].Points[j].Color = Color.Green;
j++;
}
while (eta2>f(eta1, m, d));
x[i] = eta1;
textBox6.AppendText(x[i].ToString()+"\n");
}
Observaţii
5
Modele de simulare. Îndrumar de laborator
În Figura 6.4 se poate observa că la generarea a 100 de valori cu repartiţie N(2,1), media
aritmetică a valorilor generate este 2.032, o aproximaţie destul de bună a mediei teoretice.
În Tabelul 6.1 sunt prezentate rezultate ale mai multor experimente de simulare, pentru
diverse valori ale datelor de intrare. Completaţi tabelul cu rezultatele propriilor experimente.
6
Lucrarea de laborator 6
Numărul de
distribuţiei Media empirică (media
valori Media teoretică
media (m) aritmetică a valorilor
generate (exactă)
dispersia (d) generate)
Exp.1 0.00 -0.217983041060149
n=10 Exp.2 0.00 -0.385121569216774
Exp.3 0.00 0.213302658504482
Exp.1 0.00 -0.0210136184566719
n=100 Exp.2 0.00 0.00660864040563284
m=0 Exp.3 0.00 -0.00788649409445307
d=1 Exp.1 0.00 0.0309608101802696
n=1000 Exp.2 0.00 -0.00374669268436111
Exp.3 0.00 0.0475363586086483
Exp.1 0.00 -0.00811779316333951
n=10000 Exp.2 0.00 0.000189853469463898
Exp.3 0.00 0.00138187768234959
n=10 Exp.1 2.50 1.43737428893213
m=2.5 n=100 Exp.1 2.50 2.88305380827424
d=9 n=1000 Exp.1 2.50 2.49564916146903
n=10000 Exp.1 2.50 2.50456899965022
7
Modele de simulare. Îndrumar de laborator
Aplicaţia 2.
Pornind de la aplicaţia realizată anterior (Aplicaţia 1), se vor parcurge următorii paşi:
1. Construirea interfeţei grafice. Putem construi interfaţa în mod similar cu cea din
Aplicaţia 1, cu modificarea: în locul parametrilor Medie şi Dispersie ai repartiţiei
normale, se introduce parametrul Lambda pentru repartiţia exponenţial negativă (Figura
6.5).
8
Lucrarea de laborator 6
private void button1_Click(object sender, EventArgs e)
{
double eta1, eta2, M, k;
int i, j;
Random r = new Random();
L = Convert.ToDouble(textBox1.Text);
n = Convert.ToInt32(textBox3.Text);
a = Convert.ToDouble(textBox4.Text);
b = Convert.ToDouble(textBox5.Text);
chart1.Series[0].Points.Clear();
for (k = a; k <= b; k += 0.01)
chart1.Series[0].Points.AddXY(k, f(k, L));
chart1.Series[1].Points.Clear();
x = new double[n];
M = f(a,L);
j = 0;
textBox6.Clear();
for (i=0;i<n;i++)
{
do
{
eta1 = a + (b - a) * r.NextDouble();
eta2 = M * r.NextDouble();
chart1.Series[1].Points.AddXY(eta1, eta2);
if (eta2 > f(eta1, L))
{
chart1.Series[1].Points[j].Color = Color.Red;
chart1.Series[1].Points[j].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Star5;
}
else chart1.Series[1].Points[j].Color = Color.Green;
j++;
}
while (eta2>f(eta1, L));
x[i] = eta1;
textBox6.AppendText(x[i].ToString()+"\n");
}
}
Observaţii
9
Modele de simulare. Îndrumar de laborator
10
Lucrarea de laborator 6
Observaţii
- Cum influenţează parametrul λ valorile generate? Observând graficele din Figurile 6.6 si 6.7,
o valoare mică a parametrului λ (0.02) conduce la o curbă care se apropie lent de axa Ox. Pe
intervalul [a,b], aria de sub grafic este destul de mare. O valoare mai mare a parametrului
λ (s-a folosit 2 în exemplu) conduce la o curbă care coboară foarte rapid spre axa Ox, lăsând
dedesubtul graficului o arie mică (pe orizontală). Astfel se explică valorile generate: valori
mai mari pentru λ mic (Figura 6.6), valori mai mici pentru λ mai mare (Figura 6.7);
- O valoare mică a parametrului λ determină ca probabilitatea ca un punct generat să fie
acceptat să fie mult mai mare decât în cazul unei valori mai mari a lui λ. Se poate observa în
Figura 6.7, cât de multe puncte au fost respinse până când să se obtină cele n valori dorite;
- De asemenea, se poate remarca faptul că deşi utilizatorul poate stabili intervalul [a,b] pe
care să se genereze valori, în realitate parametrul λ determină o limită maximă. De la un
punct încolo, graficul se apropie atât de mult de axa Ox, încât probabilitatea de generare a
unui punct dedesubtul graficului devine practic nulă.
11
Modele de simulare. Îndrumar de laborator
În Tabelul 6.2 sunt prezentate rezultatele mai multor experimente de simulare, pentru
diverse valori ale datelor de intrare. Completaţi tabelul cu rezultatele propriilor experimente.
Parametrul Numărul de
Media empirică (media
distribuţiei valori Media teoretică
aritmetică a valorilor
λ generate (exactă)
generate)
Exp.1 100.00 89.8151259356249
n=10 Exp.2 100.00 112.9993564113971
Exp.3 100.00 86.5761636554152
Exp.1 100.00 81.0731338993987
n=100 Exp.2 100.00 102.928648545839
λ = 0.01 Exp.3 100.00 83.59451484801
Exp.1 100.00 79.7347434306213
n=1000 Exp.2 100.00 93.3877782339173
Exp.3 100.00 102.119980154615
Exp.1 100.00 100.079932128815
n=10000 Exp.2 100.00 98.830666443185
Exp.3 100.00 99.6228392138254
n=10 Exp.1 0.40 0.367102210580885
λ =2.5 n=100 Exp.1 0.40 0.435022510744176
n=1000 Exp.1 0.40 0.410734737182844
n=10000 Exp.1 0.40 0.398810077863425
12
Lucrarea de laborator 6
Aplicaţia 3.
Prin definiţie, funcţia de repartiţie a unei variabile aleatoare X este 𝐹: 𝑅 → [0,1], unde:
Dacă valoarea F(t) reprezintă probabilitatea ca timpul de funcţionare să fie mai mic decât t,
atunci probabilitatea ca timpul de funcţionare să fie cel puţin t va fi:
Pr = 1 − 𝐹(𝑡) (6.9)
Pornind de la aplicaţia realizată anterior (Aplicaţia 2), se vor parcurge următorii paşi:
label5
textBox6
2. Se defineşte funcţia de repartiţie exponenţial negativă (relaţia (6.5) din secţiunea Suport
teoretic):
double F(double x, double L)
{
return 1- Math.Exp(-L * x);
}
13
Modele de simulare. Îndrumar de laborator
chart1.Series[0].Points.Clear();
for (k = a; k <= b; k += 0.01)
chart1.Series[0].Points.AddXY(k, f(k, L));
chart1.Series[1].Points.Clear();
x = new double[n];
M = f(a,L);
t= Convert.ToDouble(textBox6.Text);
textBox5.Clear();
for (i=0;i<n;i++)
{
do
{
eta1 = a + (b - a) * r.NextDouble();
eta2 = M * r.NextDouble();
}
while (eta2>f(eta1, L));
x[i] = eta1;
chart1.Series[1].Points.AddXY(eta1, eta2);
if (x[i]>=t)
{
nr_fav++;
chart1.Series[1].Points[i].Color = Color.Green;
chart1.Series[1].Points[i].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
}
else chart1.Series[1].Points[i].Color = Color.Red;
textBox5.AppendText(x[i].ToString()+"\n");
}
pt = 1 - F(t, L);
pe = (double)nr_fav / n;
textBox5.AppendText("Probabilitatea teoretica=" + pt.ToString("0.00000"));
textBox5.AppendText("\r\nProbabilitatea empirica=" + pe.ToString("0.00000"));
}
Observaţii
- în grafic nu se mai reprezintă şi punctele respinse de metoda de generare, ci doar
punctele acceptate: cu pătrăţele roşii timpii de funcţionare mai mici decât t, cu
cerculeţe de culoare verde timpii consideraţi cazuri favorabile, peste t ani;
- în variabila pt s-a calculat probabilitatea teoretică (folosind funcţia de repartiţie) ca un
echipament să mai funcţioneze şi după t ani;
14
Lucrarea de laborator 6
15
Modele de simulare. Îndrumar de laborator
În Tabelul 6.3 sunt prezentate rezultate ale mai multor experimente de simulare, pentru
diverse valori ale datelor de intrare. Completaţi tabelul cu rezultatele propriilor experimente.
Experiment
Numărul de funcţioneze după t ani
Parametrul λ
valori
Timpul t Probabilitatea Probailitatea empirică
generate
teoretică (exactă) (frecvenţa)
Concluzii
În această lucrare de laborator s-a utilizat metoda respingerii pentru a genera o variabilă
aleatoare de repartiţie cunoscută;
Valorile generate cu ajutorul metodei respingerii se folosesc în aplicaţiile de modelare şi
simulare, pentru a estima diverşi parametri sau indicatori statistici;
Aplicaţiile rezolvate au demonstrat că pentru a obţine bune aproximări ale indicatorilor
teoretici (uneori imposibil de calculat), numărul valorilor generate trebuie să fie suficient
de mare. În majoritatea experimentelor realizate, un număr de n=10000 de valori generate
s-a dovedit a fi suficient pentru o bună aproximare a mediei teoretice a unei variabile sau
pentru estimarea probabilităţii de producere a unui eveniment.
16