KADD 2022 Laboratorium 6 ENFrom Łukasz Graczykowski(Difference between revisions)
Lgraczyk (Talk | contribs)
(Created page with "{| align="right" | __TOC__ |} == Exercise == ''Part one'': '''linear congruent generator of pseudorandom numbers''' (1 pkt.) Please write a generator of pseudorandom numbers ...") Newer edit → Revision as of 11:26, 4 April 2022
ExercisePart one: linear congruent generator of pseudorandom numbers (1 pkt.) Please write a generator of pseudorandom numbers and save generated numbers into a file. The generator should be based on the following formula:
This generator is called LCG - linear congruent generator. Providing the first (beginning) number
For simplicity we can uuse
The result of the macro execution should be a file with the name name.dat containing a series of generated numbers for a given set of parameters. The macro should be executed three times, resulting in three files:
Część druga: test widmowy (1 pkt.) Należy przeprowadzić test widmowy aby przetestować jakość generatora. By to zrobić należy narysować na płaszczyźnie punkty o współrzędnych Jeśli punkty będą rozłożone równomiernie generator można uznać za dobry. Jeśli zdecydowanie widać pewną okresowość - punkty powtarzają się wielokrotnie - generator nie działa poprawnie. Oczywiście na rozłożenie punktów wpływa jedynie dobór parametrów
Wynikiem powinny być trzy wykresy widma. Część trzecia: generacja liczb losowych oparta na transformacji rozkładu jednorodnego (3 pkt.) Dowolna funkcja zmiennej losowej jest zmienną losową. Powstaje więc pytanie jaka jest gęstość zmiennej losowej Y jeżeli znana jest gęstość
Teraz jeżeli założymy, że gęstość prawdopodobieństwa
gdzie
Jeśli zmienna losowa Używając tej metody należy wygenerować 10000 liczb z rozkładu: Dla
Uwagi
x0 = time(NULL);
TH1D *hUniform = new TH1D("hUniform","Uniform distribution",100,0,1); TH2D *hCorr = new TH2D("hCorr","Correlation",100,xmin,xmax,100,0,1);
const int N = 1000000;
ifstream ifile; ifile.open("dane.dat"); double val; while(ifile>>val) { cout<<val<<endl; } ifile.close();
ofstream ofile; ofile.open("dane.dat"); for(int i=0;i<N;i++) ofile<<val<<endl; } ofile.close(); WynikPrzykładowy rozkład dla parametrów:
Przykładowy wynik transformacji rozkładu jednorodnego: |