Documente Academic
Documente Profesional
Documente Cultură
frecvente
Formalizeaza notiunea ant. de
similaritate a distributiilor
Oi reprezinta numarul valorilor
de date observate in cel de-al
valori ale
i-lea interval (sunt k intervale)
pi este prob. ca o valoare sa
pi datelor
intre in cel de-al i-lea interval
sub distributia ipotetica
pdf
Ar fi de asteptat sa observam
in intervalul I, Ei = npi, dintr-un
total de n observatii
valori ale datelor
Daca pp. distributionala este
2
corecta, atunci χ02 urmeaza o k
Oi − Ei
distr.χ2 cu k-s-1 gr.de libertate χ = ∑
2
0
(s e nr.parametrilor distributiei i =1 Ei
ipotetice)
Generarea numerelor aleatoare
Apare ca instrument de lucru in cazul sistemelor si
proceselor stochastice (nedeterministe) – ce necesita
modele cu elemente stochastice
Implica utilizarea distributiilor de probabilitate ca
elemente de baza de modelare
Larg utilizata si in alte domenii:
Simularea statica (Monte-Carlo) – de ex. calculul lui π
Analiza probabilistica a algoritmilor – cu conditia sa putem
caracteriza in mod rezonabil distributia datelor de intrare
Criptografia – la baza constructiei cheilor de criptare si a
altor parametri ai algoritmilor si protocoalelor criptografice
...
Ce este un numar “aleator”?
Nu putem spune ca un anumit numar este aleator
“Aleatorizarea” (randomness) este un proces
nedeterminist ce produce astfel de numere (fara
insa a putea fi siguri niciodata asupra urmatoarei
valori produse)
Surse bune de numere pur
aleatoare: ruleta, dar si alte
dispozitive fizice (electronice,
radioactive) mult mai rapide
Totusi, acestea sunt foarte greu
de utilizat in simulare
Numere pseudo-aleatoare
Cel mai important in simulari, care de obicei se
fac pentru a compara diverse evolutii ale unui
sistem, este pastrarea conditiilor de operare
Aceste conditii sunt influentate de esantioanele
datelor de intrare, la randul lor determinate de
numerele aleatoare folosite
⇒trebuie pastrata sursa de numere aleatoare in
toate simularile
⇒chiar daca sunt pseudo-aleatoare (generate de
algoritmi - deterministi) acestea trebuie sa
satisfaca anumite proprietati statistice
Proprietati ale unui “bun” generator
si numerelor aleatoare generate
Numerele generate trebuie sa fie independente statistic
(fara autocorelare)
Generatorul trebuie sa fie rapid
Memoria necesara algoritmului de generare nu trebuie
sa fie excesiva
Perioada de repetitie a numerelor generate trebuie sa fie
suficient de mare
Pericolul degenerarii sirului de numere trebuie eliminat
(nu trebuie ca de la un anumit rang, numerele sa nu mai
respecte conditiile impuse)
Sirul de numere aleatoare trebuie sa fie reproductibil
Metode analitice de generare a n.a.(1)
Mijlocul patratului (Von Neumann)
Un numar initial (seed) este ridicat la patrat, si cifrele
din mijloc formeaza primul n.a. (prin repozitionarea
punctului zecimal se poate obtine un numar intre 0 si
1); acesta se ridica din nou la patrat si se obtine prin
aceeasi tehnica al doilea n.a., iar procedeul continua
Sursa slaba de n.a. – prin faptul ca anumite secvente
πr 2
4 = a
P(x,y) r*r 10000
π 12
4 = a
y 1 *1 10000
r a
⇒π =
2500
x
Functii de generare a n.a. in C/C++.
Functiile rand() si srand()
Returneaza valori intregi generate (pseudo) aleator
rand() – returneaza acelasi sir de numere
Aplica metoda congruentiala multiplicativa (factor 232) si
returneaza secvente de n.a. intre 0..RAND_MAX (constanta
simbolica e definita in stdlib.h, valoarea uzuala este 32767)
Sirul de numere returnat poate fi schimbat daca se modifica
valoarea implicita a variabilei seed (reinitializare generator)
srand() – face (re)initializarea generatorului de n.a.
Utilizare: srand(int iSeed)
iSeed poate fi data explicit, ca o constanta (1=val.implicita),
sau setata diferit la fiecare rulare, in functie de timp
Functia time() si operatorul %
Trebuie inclus header-ul <time.h> ce contine definitia:
“time_t time(time_t *tloc);”, echivalenta cu:
“int time(int *tloc);”
tloc este locatia de memorie a unei variabile intregi unde poate fi
stocata valoarea generata (optional)
Descriere: time() returneaza valoarea intreaga (in sec.) de
la 1/1/1970, pentru a obtine o valoare diferita a sămânţei
la fiecare rulare a unui program
Daca tloc ≠ 0, valoarea returnata este si stocata in locatia spre
care pointeaza tloc
Operatorul % (modulo) permite scalarea valorilor:
rand( ) % 10 ⇒ un n.a. intre 0 si 9 inclusiv
rand( ) % b + a ⇒ un n.a. intre a si b-1 inclusiv
Exemplu: generarea a 10 numere intre 0..20
// printing 10 random numbers // printing 10 random numbers
// between 0 and 20: // between 0 and 20
// Same numbers each run // Different numbers each run
#include <iostream.h>
#include <iostream.h> #include <time.h>
using namespace std; using namespace std;
main() main()
{ {
int i, iNum; int i = 1;
i=1 // print the time
while ( i<=10 ) cout << time(NULL) << endl;
{ // seed the random number
// generator with the time
iNum = rand() % 21; srand( time(NULL) );
cout << iNum << " "; while( i<=10 )
i++; {
} cout << rand() % 21 << " ";
} i++;
}
}
Tema: Proiect + Referat
Construiti pachetul propriu de rutine de generare
de numere aleatoare; implementati cel putin trei
metode (functii) de generare de n.a.
Implementati functii-criteriu de verificare privind
calitatea numerelor generate
Implementati pe baza generatorului de n.a. 2-3
generatoare de distributii simple (de ex.uniforma,
binomiala, Bernoulli)
Studiati proprietatile esantioanelor generate, prin
comparatie si cu date generate folosind Excel