I.
Introducere
Cuvantul simulare deriva de la latinescul simulatio care inseamna capacitatea de a reproduce, reprezenta sau imita ceva. Din cauza ambiguitatilor generate de diversele sensuri ale acestui cuvant in vorbirea obisnuita, este dificil sa se precizeze o semnificatie generala a termenului simulare valabila pentru toate stiintele particulare. Simularea numerica este o tehnica potrivit careia se asociaza sistemului real un model adecvat numit model de simulare care reprezinta (cu ajutorul unuialgoritm) toate interactiunile logice ale componentelor sistemului.Astfel, modelul de simulare permite crearea unor experiente artificiale asupra sistemului (exprimate prin numere sau valori logice), iar pe baza prelucrarii acestor experiente, de cele mai multe ori prin procedee ale statisticii matematice, se pot obtine raspunsurile laintrebarile referitoare la sistem. Un model de simulare se realizeaza in mai multe etape. Lucrarea de fata isi propune sa ilustreze fiecare etapa din realizarea unui model de simulare a unei variabile Beta(a,b), cu ajutorul variabilei Gamma(0,1,v) Vom stabili obiectivele prin definirea problemei, urmata de realizarea unei analize primare a datelor prin colectionarea notiunilor necesare, pecare le vom trata amanuntit din punct de vedere matematic. Odata stabilite reperele teoretice, atat din punct de vedere al definitiilor si teoremelor necesare, cat si din punct de vedere al calculelor corespunzatoare si al demonstratiilor, vom elabora un algoritm de simulare in concordanta cu obiectivele initiale si vom prezenta o variant de implementare a acestuia in limbajul C++. Vom continua acum cu prima etapa din realizarea unui model de simulare, ce consta in formularea intrebarilor despre sistem la care trebuie sa se gaseasca raspunsuri(adica formularea problemei).
Formularea problemei
Construiti doua metode de simulare a variabilei Beta(a, b) pentru cazurile:a, b intregi pozitivi; 1 < a, b > 1.
unde
2. Repartitia Gamma
Repartitia Gamma(,,) are densitatea data de formula
unde R, , > 0 sunt respectiv parametri de locatie, de scala si de forma ai variabilei.Functia gamma () este definit de urmatoarea relatie :
Daca notam cu X variabila Gamma(0,1,) atunci se constata ca legatura intre X si Y este data de formulele adica generarea lui Y se reduce la generarea lui X. In consecinta ne vom ocupa numai de generarea variabilei X. Observam ca :
unde C[X] este coeficintul de variatie a lui X . De asemenea, cand = 1, X este variabila exponentiala negativa Exp(1). In concluzie, generarea oricaror variabile de tip gamma se reduce la generalizarea variabilei aleatoare X de tipul Gamma(0,1,). In generarea variabilei aleatoare X vor fi considerate separta cazurile 0 < < 1 si 1 < < (cazul = 1 corespunde repartitie Exp(1)) . Spun ca este necesar si esential sa construim metode pentru simularea unei repartitii Gamma standard, adica Gamma(0,1, ), R+. Daca = k N+, atunci repartitia gama devine repartitie Erlang. 3. Repartitia Erlang(k) , k N+ este un caz particular al repartitiei Gamma(,,) , ,, R+ care are densitatea de repartitie:
este o variabila Beta(a,b) . Demonstratie. Densitatea comuna de repartitie a lui (X1,X2) este
avem
B. Repartitia Gamma
In continuare prezentam o metoda de respingere pentru simularea variabilei Gamma(0,1,), > 1 , bazata pe infasurarea cu o densitatea Cauchy nonstandard trunchiata pe[0, ] de forma : h(x) =
( ( ))
,x
(1.1)
unde k este o constanta de normare. Teorema 2 Daca infasuram densitatea Gamma(0,1,), > 1, cu densitatea h(x) data de (1.1) atunci pentru c 2 1 avem
Demonstratie: Avem
de unde rezulta ca ecuatia (x) = 0 are Solutia x0 = 1 > 0 iar daca c 2 1 atunci avem
ceea ce demonstreaza teorema. Teorema 3 Daca Zi, 1 variabila i k sunt variabile Exp(1) independente, atunci
(formula 1) este o variabila Erlang(k) . Demonstratie. Vom folosi tehnica functiei caracteristice si vom arata ca functia caracteristica a variabilei X data de formula 1 de mai sus este aceeasi cu functia caracteristica a variabilei Erlang(k) de unde se deduce ca cele doua repartitii coincid. Pentru variabila Erlang(k) functia caracteristica este :
Dar
Deci
Observam ca in constructia algoritmului nu intervine constanta k, dar este necesara pentru a calcula pa = . Un calcul simplu arata ca
Mai observam si faptul ca daca descopunem sub forma = k + p , k = [] N+ , p = k [0,1] si consideram variabilele X Gamma(0,1,) , Ek +Erlang(k) , Y Gamma(0,1,p), atunci simularea lui X se realizeaza cu relatia X = Ek + Y, (Ek,Y) - independente Urmatorul algoritm ne va ajuta la simularea unei variabile Erlang(k), k intreg pozitiv conform Teoremei 3, care de asemenea ne va ajuta la simularea variabilei Bet(a,b) conform Teoremei 1. Algoritmul EXRJ de simulare a exponentialei prin metoda respingerii: Initializeaza N := 0; repeat Genereaza U0,U1 uniforme 0 1 si independente; Ia U := U0,K := 1; while U0 U1 do begin K := K + 1, U0 := U1, genereaza U1 uniform 0 1; end; (s-a simulat un subsir descendent); if K mod 2 = 0 then N := N + 1; (se numara subsirurile respinse); until K mod 2 = 1; Ia Z := N + U.
V. Validarea algoritmilor.
1. Verificarea mediei si dispersiei
Observam ca dimensiunea multimii de selectie influenteaza rezultatele mediei sidispersiei aferente setului de date, in sensul ca le apropie foarte mult de valorile teoretice corespunzatoare tipului de date din multimea de selectie (o consecinta alegii numerelor mari) . Astfel, in tabelul urmator vom exprima rezultatele obtinute pentru diferite dimensiuni ale multimii de selectie in comparatie cu valorile teoretice corespunzatoare. Beta(2,5) Nr. Volum Media crt de obtinuta selectie 1 2 3 4 10 50 200 300 0.3160188 0.2735838 0.2747299 0.2809293 Media Eroare Dispersia teoretica obtinuta 0.28 0.28 0.28 0.28 0.036 0.0065 0.0053 0.0009 0.0619768 0.028750 0.0227285 0.02597 Dispersia Eroare teoretica 0,0255 0,0255 0,0255 0,0255 0.036 0.0032 0.0028 0.00047
Rezultatul acestor experimente confirma faptul ca media si dispersia se apropie de media si dispersia teoretica pe masura ce creste volumul de selectie.
Din acestea se observa faptul ca algoritmul prezentat produce rezultate ce aproximeaza corect densitatea de probabilitate a tipului de variabila Beta.
while (Y <= 0); U = uniform(); Exponent = b * log(Y/b) - T + log (1+T*T/c) ; Umax = pow(e,Exponent) ; } while (U > Umax) ; return Y ; } // Exp(1) double Exp1() { int N = 0 ; int K ; double U0,U1,U2; do { U0 = uniform() ; U1 = uniform(); U2 = U0 ; K = 1; while (U0 >= U1) { K++; U0 = U1 ; U1 = uniform() ; } if (K % 2 == 0) N++; } while (K % 2 == 0) ; return N + U2 ; }
//simularea variabilei erlang(caz particular de gamma) unde a este intreg pozitiv double Erlang (int a) { double Z[100],X ; for (int i = 1; i <= a ; i++) { Z[i] = Exp1(); } X=0; for (int i = 1; i <= a ; i++) { X = X + Z[i]; } return X ; }
int main() { srand(time(0)); double a,b; int nr; // volumul de selectie cout << "Dati a: " << endl; cin >> a ; cout << "Dati b: " << endl ; cin >> b ; cout << "Dati nr de valori: " << endl ; cin >> nr ; double v[1000], d, S; fstream f("fis.out", ios::out); S=0;
for (int i = 1 ; i<= nr ; i++) { double X1, X2; //verific daca a si b sunt de tip intreg sau double if (fabs(a-round(a)) < 0.0000001) X1 = Erlang(int(a)); else X1 = GammaCauchy(a); if (fabs(b-round(b)) < 0.0000001) X2 = Erlang(int(b)); else X2 = GammaCauchy(b); v[i] = X1/(X1+X2); //calculez dispersia pt variabilele din v[i] // a/(a+b) este media teoretica a var din v[i] S = S + pow((v[i]-(a/(a+b))),2); d = S / i; f << v[i] << " , " ; } f << "Dispersia este" << d ; f.close(); system("pause"); return 0; }
Bibliografie [1] Vaduva, I. (1977). Modele de simulare cu calculatorul. Editura Tehica, Bucuresti [2] Ion Vaduva, Modele de simulare, Bucuresti, 2004 [3] Enciclopedia Wikipedia, Gamma Distribution http://en.wikipedia.org/wiki/Gamma_distribution [4] Enciclopedia Wikipedia, Beta Distribution http://en.wikipedia.org/wiki/Beta_distribution [5] Enciclopedia Wikipedia, Erlang Distribution http://en.wikipedia.org/wiki/JavaScript