1 Simularea Variabilelor Aleatoare Uniform Repartizate
1 Simularea Variabilelor Aleatoare Uniform Repartizate
Generarea unor valori numerice n conformitate cu o anumita repartitie (simularea unei vari-
abile aleatoare) este o prelucrare frecvent utilizata atat n Statistica (de exemplu n tehnicile de
esantionare) cat si n modelarea stohastica si n implementarea algoritmilor aleatori (de tip Monte-
Carlo).
Exista doua modalitati principale de simulare a variabilelor aleatoare, si anume:
prin utilizarea unor dispozitive fizice cum ar fi zarul, ruleta si detectorii de radiatie nucleara;
prin implementarea pe calculator a unor algoritmi de generare a unor valori numerice.
Generatoarele bazate pe dispozitive fizice au cateva dezavantaje cum ar fi: rezultatele sunt
dificil de reprodus, iar functionarea dispozitivelor poate fi afectata de evenimente externe. Din
acest motiv, dupa aparitia si dezvoltarea calculatoarelor, interesul s-a orientat nspre metodele de
generare care se bazeaza pe capabilitatile aritmetice ale acestora.
Metodele de simulare a variabilelor aleatoare cu ajutorul calculatorului nu sunt perfecte ntrucat
calculatorul n sine este un dispozitiv determinist, iar majoritatea metodelor se bazeaza pe secvente
deterministe de calcul. Din acest motiv, valorile generate cu ajutorul calculatorului sunt n realitate
pseudo-aleatoare. In continuare vom omite calificativul pseudo doar pentru simplitate.
Din punct de vedere al modului de proiectare, generatoarele pot fi clasificate n:
generatoare de numere aleatoare uniform repartizate;
generatoare de numere aleatoare neuniform repartizate.
De cele mai multe ori generatoarele din a doua categorie se construiesc pe baza celor din prima
categorie.
In continuare vom prezenta algoritmi de generare a numerelor uniform repartizate si metode
generale pentru simularea variabilelor neuniform repartizate, discrete sau continui.
1
Perioada lui sa fie mare n raport cu numarul de valori generate.
Valorile generate sa nu fie secvential corelate. Aceasta proprietate trebuie nteleasa n modul
urmator: considerand secvente de cate p valori succesiv generate se obtine o umplere uni-
forma a spatiului p-dimensional. In cazul prezentei corelatiei secventiale, aceste puncte din
spatiul p-dimensional se grupeaza ntr-un numar redus de hiperplane.
De remarcat ca importanta calitatii unui generator depinde de tipul aplicatiei unde este folosit
(ea este mai putin importanta n aplicatiile care utilizeaza numerele aleatoare doar pentru ilustrari
grafice de efect si devine foarte importanta de exemplu n aproximarea integralelor prin metoda
Monte-Carlo).
Satisfacerea conditiilor de mai sus poate fi asigurata printr-o buna alegere a functiei g. Cele mai
frecvent utilizate metode (pe care se bazeaza si generatoarele incluse n limbajele de programare)
sunt cele congruentiale. Acestea sunt caracterizate printr-o relatie de recurenta de forma:
1. a = 16807, c = 0, m = 231 1;
2. a = 1429 , c = 0, m = 231 1;
Secventa de valori generate depinde de valoarea initiala (x0 ). Aceasta este de regula stabilita
de catre utilizator prin proceduri specifice fiecarui limbaj de programare (de exemplu, procedura
randomize din Pascal sau functia srand din C). Daca se doreste ca la fiecare relansare a programului
sa fie generata alta secventa de valori este indicat ca x0 sa fie stabilita pornind de la ceasul intern
al calculatorului.
Daca m = 2 atunci se obtine un generator de biti conducand la o alta varianta de generare
a numerelor ntregi. Pentru o reprezentare pe 32 de biti, fiecare valoare ntreaga, xn , poate fi
exprimata ca:
2
xn = b(1) (2) (32)
n bn . . . bn
(i)
iar fiecare bit bn se genereaza cu regula:
(i) (i)
b(i)
n = (bnp + bn(pq) )mod2
(i) (i)
n care p > q > 0, iar b0 , . . . , bp sunt valori binare care asigura initializarea generatorului.
Pentru ca generatorul sa aiba proprietati statistice bune, parametrii p si q se aleg astfel ncat
polinomul X p + X q + 1 sa fie prim n Z2 [X]. Un exemplu de alegere a parametrilor este p = 98 si
q = 27. In acest caz perioada generatorului este 2p 1.
3
FX1 (u) = inf{x IR|FX (x) u}, u [0, 1].
Metoda inversarii functiei de repartitie se bazeaza pe urmatorul rezultat:
Fie F o functie de repartitie. Daca U este o variabila aleatoare uniform repartizata n
[0, 1], atunci functia de repartitie a variabilei aleatoare X = F 1 (U ) este F .
Intr-adevar, daca notam cu FX functia de repartitie a variabilei X = F 1 (U ) atunci are loc:
FX (x) = P ({X < x}) = P ({F 1 (U ) < x}) = P ({U < F (x)}) = P ({0 < U < F (x)}) = F (x)
deci functia de repartitie a lui X este chiar F .
Astfel forma generala a algoritmului de simulare a unei variabile avand functia de repartitie FX
este:
u:=Random
x:=InvF(u) /* InvF este inversa functiei F */
Return x
Pentru repartitii concrete se obtin variante particulare ale algorimilor, care difera ntre ele prin
modul de implementare a inversei functiei de repartitie.
4
i:=1
u:=Random
While (u>Fi) and (i<n) Do i:=i+1
Return xi
Exemple.
1. Repartitia Bernoulli. Fie X : {0, 1} o variabila binara caracterizata de P ({X = 0}) = p
si P ({X = 1}) = q = 1 p. Functia de repartitie este:
0, x0
FX (x) = p, 0 < x 1
1, x > 1
In acest caz particular problema cautarii este mult simplificata si algoritmul devine:
u:=Random
If u<=p then x:=0 else x:=1
Return x
x:=0
For k:=1 to n do
{u:=Random
i:=INT(N*u)+1
x:=x+t[i]
}
Return x
5
In acest caz este ineficient sa se genereze un tabel al functiei de repartitie (ntrucat tabelul
este infinit si nu se cunoaste a priori cate elemente trebuie generate), fiind mai indicat ca evaluarea
acesteia sa se faca pe masura ce se efectueaza cautarea intervalului care contine valoarea u. Aceasta
varianta a algoritmului are forma:
u:=Random
i:=0; p:=exp(-lambda); f:=p
While (u>f) do {i:=i+1; p:=p*lambda/i; f:=f+p;}
Return i
u Fi1
x = xi1 + (xi xi1 )
Fi Fi1
aceasta fiind valoarea care se returneaza si nu xi . In locul ultimei relatii, care asigura o interpolare
liniara a valorilor din tabelul functiei de repartitie, se poate aplica o formula corespunzatoare unui
alt tip de interpolare.
Exemple.
1. Repartitia exponentiala. Fie X : [0, ) o variabila aleatoare avand functia de repartitie:
FX (x) = 1 ex , > 0.
1
Inversa acestei functii este FX1 (u) = ln(1 u). Intrucat daca u este uniform repartizata
n (0, 1) atunci si 1 u este uniform repartizata n (0, 1), rezulta ca algoritmul de simulare
are forma:
u:=Random
Return -ln(u)/lambda
Observatie. Metoda inversarii functiei de repartitie poate fi extinsa si n cazul variabilelor multi-
dimensionale. Pe o astfel de extindere se bazeaza metoda Box-Muller de simulare a variabilelor
normale. Aceasta metoda va fi prezentata n sectiunea dedicata variabilelor cu repartitie normala.
6
3 Metoda respingerii
Fie X o variabila aleatoare pentru care se cunoaste un algoritm de simulare si fie E un eveniment
de probabilitate nenula. Sa presupunem ca repartitia variabilei Y are proprietatea:
Repeat
X:=GenerareX
Until E
Return X
Principalele probleme care trebuie rezolvate pentru a aplica metoda respingerii pentru simularea
unei variabile Y sunt:
gasirea variabilei X,
stabilirea evenimentului E,
astfel ncat sa fie satisfacuta relatia (2). In plus este de dorit ca n aplicarea algoritmului, numarul
mediu de respingeri ale valorilor generate sa nu fie prea mare. Numarul mediu de respingeri este
cu atat mai mic cu cat P (E) e mai apropiat de 1.
Un caz particular, destul de frecvent ntalnit, n care metoda respingerii poate fi aplicata cu
succes este cel al simularii repartitiilor uniforme multidimensionale pe domenii oarecare pornind de
la repartitii uniforme pe domenii paralelipipedice.
Presupunem ca Y , variabila care trebuie simulata, are repartitia uniforma pe domeniul D Rn .
Fie D0 = [a1 , b1 ] [a2 , b2 ] . . . [an , bn ] cel mai mic domeniu paralelipipedic care contine domeniul
D, iar X o variabila uniform repartizata pe D0 . Considerand evenimentul E = {X D}, variabila
Y poate fi simulata n modul urmator:
Repeat
/* generarea componentelor vectorului u din D */
For i:=1 to n Do ui=ai+(bi-ai)*Random
Until (u1, u2,..., un) in D
Repeat
x:=2*Random-1; y:=2*Random-1;
Until (x*x+y*y<1)
7
2. Generarea unor puncte uniform repartizate n interiorul unui tor centrat n origine cu raza
mare egala cu 4 si cea mica egala cu 2:
Repeat
x:=-4+8*Random; y:=-4+8*Random; z:=-1+2*Random;
Until (z*z+Sqr(Sqrt(x*x+y*y)-3)<1)
Intuitiv metoda respingerii consta n acest caz n generarea de puncte uniform repartizate n
domeniul D0 delimitat de axa Ox si graficul functiei cfX si n acceptarea valorii abscisei doar daca
punctul apartine si domeniului D determinat de axa Ox si graficul functiei fY .
Astfel algoritmul de generare este:
Repeat
x:=GenerareX;
u:=Random;
Until c*f_X(x)*u<=f_Y(x);
Se observa ca evenimentul E este {cfX (X)U fY (X)} unde X este variabila aleatoare cu
densitatea fX iar U este o variabila uniform repartizata n (0, 1).
Aratam ca P (E) = 1/c. Intr-adevar:
Z
P (E) = P ({cfX (X)U fY (X)}) = fX (x)I(0,1) (u)dxdu =
{(x,u)|cfX (x)ufY (x)}
Z Z fY (x)/(cfX (x)) Z
fY (x) 1
= fX (x)dx I(0,1) (u)du = dx = .
{x|fX (x)>0} 0 {x|fX (x)>0} c c
Deci algoritmul este cu atat mai eficient cu cat c este mai apropiat de 1. Astfel este indicat
ca c sa se aleaga ca fiind cea mai mica valoare care verifica fY (x) cfX (x), de exemplu c =
maxx fY (x)/fX (x).
Pentru a justifica utilizarea
R
metodei trebuie sa aratam ca pentru orice multime boreliana, B,
are loc P ({X B}|E) = B fY (x)dx. Intr-adevar:
Z
P ({X B} E)
P ({X B}|E) = =c fX (x)I(0,1) (u)dxdu =
P (E) {xB}{cufX (x)fY (x)}
Z Z Z fY (x)/(cfX (x)) Z
=c fX (x)I(0,1) (u)dxdu = c fX (x) I(0,1) (u)du = fY (x)dx.
{xB}{ufY (x)/(cfX (x))} {xB} 0 B
Exemple.
1. Simularea repartitiei exponentiale trunchiata la (0, 1). Fie Y variabila avand densitatea de
repartitie: (
ex
1e 1 , daca x (0, 1)
fY (x) =
0 x 6 (0, 1)
8
Fie X variabila cu densitatea de repartitie fX (x) = ex pentru x 0 si egala cu 0 n rest.
Atunci
fY (x) e
c = max = .
x0 fX (x) e1
Repeat
x:=-ln(Random)
u:=Random
Until u<1/e
Se observa ca: r
fY (x) 2e
c = max =
x fX (x)
deci algoritmul poate fi descris astfel:
Repeat
x:=-ln(Random)
u:=Random
Until ln(u)<=-(x-1)*(x-1)/2
3. Simularea abscisei unui punct uniform repartizat n discul unitate. Variabila de simulat, Y ,
are densitatea
2p
FY (x) = 1 x2 I[1,1] (x), xR
Considerand X ca fiind o variabila uniform repartizata n [1, 1] (fX (x) = 1/21[1,1] ) se
obtine c = 4/. Algoritmul poate fi scris n forma:
Repeat
x:=2*Random-1
u:=Random
Until (u*u<=1-x*x)
9
4 Metoda descompunerii
Se aplica atunci cand functia de repartitie a variabilei de simulat poate fi scrisa ca o combinatie
convexa a unor functii de repartitie asociate unor variabile pentru care se cunosc metode de simulare.
Fie F1 , F2 , . . . , Fn functii de repartitie si fie (p1 , p2 , . . . , pn ) o repartitie de probabilitate (0
P
pi 1, ni=1 pi = 1).
P
Consideram functia de repartitie F (x) = ni=1 pi Fi (x). Pentru a simula o variabila aleatoare n
conformitate cu repartitia data de F se aplica algoritmul:
Pas1. Se genereaza o valoare i {1, 2, . . . , n} n conformitate cu repartitia p (aplicand, de
exemplu, metoda inversarii functiei de repartitie).
Pas2. Se returneaza o valoarea generata prin metoda de simulare a variabilelor cu repartitia
corespunzatoare lui Fi
Observatie. Metoda se aplica n acelasi mod n cazul n care se cunosc functiile de densitate ale
variabilelor Xi .
Exemple.
1. Simularea repartitiei normale. Fie X o variabila cu repartitia normala standard. Atunci |X|
are repartitia seminormala. Tinand cont de faptul ca repartitia normala este simetrica putem
scrie:
1 1
FX (x) = F|X| (x) + F|X| (x),
2 2
astfel ca algoritmul de simulare a lui X este:
u:=Random
x:="generare variabila cu repartitia seminormala"
If u<0.5 then Return -x else Return x
n(X )/ tinde n distributie (cand n tinde la infinit) catre Z N (0, 1). X reprezinta (X1 +
. . . + Xn )/n.
Considerand X U( 0, 1) rezulta ca = 1/2, 2 = 1/12, deci
(X1 + . . . + Xn ) n/2
Zn = .
n/ 12
10
Se observa ca luand n = 12 expresia lui Zn devine foarte simpla (Z12 = X1 + . . . X12 6) astfel ca
un algoritm care simuleaza repartitia normala este:
z:=-6;
For i:=1 to 12 do
z:=z+Random
Return z
Observatie. Aceasta metoda este costisitoare din punct de vedere computattional ntrucat pentru
generarea unei valori z necesita 12 apeluri ale functiei Random.
u:=Random; v:=Random
r:=sqrt(-2*ln(u))
z1:=r*cos(2*pi*v)
z2:=r*sin(2*pi*v)
Return z1,z2
O varianta a acestui algoritm care evita folosirea functiilor trigonometrice si care se bazeaza pe
generarea de puncte uniform distribuite n interiorul cercului unitate este:
Repeat
u:=2*Random-1; v:=2*Random-1; s+u^2+v^2
Until 0<s<1
r:=sqrt(-2*ln(s)/s)
z1:=r*u; z2:=r*v
Return z1, z2
Observatie. La fiecare apel al oricareia dintre variantele algoritmului se obtin doua valori n con-
formitate cu repartitia normala standard.
11
6 Simularea variabilelor de tip 2 , Student si Fisher
Simularea acestor variabile se bazeaza pe legaturile ce exista ntre ele si repartitia normala stan-
dard. Presupunem ca avem la dispozitie o funtie normala care genereaza valori n conformitate cu
repartitia normala standard.
Pentru simularea unei variabile X 2 (n) se poate folosi algoritmul:
x:=0
For i:=1 to n do x:=x+normala(0,1)
Return x
z:=normala(0,1)
y:=0
For i:=1 to n do y:=y+normala(0,1)
x:=z*sqrt(n)/sqrt(y)
Return x
y:=0
For i:=1 to n1 do y:=y+normala(0,1)
z:=0
For i:=1 to n2 do z:=z+normala(0,1)
x:=(y/n1)/(z/n2)
Return x
Observatie. Algoritmii folosesc din fiecare apel al al functiei normala ambele valori generate.
Referinte
[1] M.T. Boswell, S.D. Gore, G.P. Patil, C. Taillie, The Art of Computer Generation of Random
Variables, in Handbook of Statistics, vol. 9 (ed. C.R. Rao), Elsevier Science Publ., 1993.
[2] S.M. Ermakov, Metoda Monte Carlo si probleme nrudite, Ed. Tehnica, 1976.
[4] W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery, Numerical Recipes in C. The Art
of Scientific Computing, Cambridge University Press, 1992.
[5] B. Ycart, Simulation des modeles markoviens, curs DESS dIngenierie Mathematique, Univ. J.
Fourier, Grenoble, 1997.
12