581264 Tutkimustiedonhallinnan peruskurssi, 3 ov, kevät 2004
Laskuharjoitus 5 (4.5., 6.5.)
-
Toteuta tasajakautuneiden satunnaislukujen
generointiin yleisesti käytetty yksinkertainen menetelmä
(linear congruential method); olkoon m=100 eli satunnaisluvut
ovat välillä [0,99].
-
Testaa menetelmää seuraavasti:
generoi 10000 arvoa ja tutki niiden tasajakautuneisuutta
piirtämällä histgrammi (pylväs per arvo; ks. alla).
Toista testi erilaisilla a:n ja c:n arvoilla, ja yritä
löytää mahdollisimman hyvin toimivat arvot.
Histogrammin voi piirtää esim. seuraavasti. Unixissa syötä satunnaisluvut (yksi per rivi) seuraavaan putkeen (ohjeita korjattu 30.4.2004):
$ (oma komento) | sort -n | uniq -c | \
awk -v m=100 'BEGIN {riveja=0} \
{while (riveja < $2) {print riveja,0; riveja++} print $2,$1; riveja++} \
END {while(riveja < m) {print riveja,0;riveja++}}' > temp
Sitten gnuplotissa:
gnuplot> plot "temp" with hist -
Vertaa jonkin valmiin satunnaislukugeneraattorin
(esim. käyttämäsi ohjelmointikielen sopivan funktion)
tuottamaan vastaavaan jakaumaan kokonaisluvuille [0,99].
awkilla esim:
awk 'BEGIN{for (i=1;i<=10000;i++) print int(rand()*100)}'
-
Testaa menetelmää seuraavasti:
generoi 10000 arvoa ja tutki niiden tasajakautuneisuutta
piirtämällä histgrammi (pylväs per arvo; ks. alla).
Toista testi erilaisilla a:n ja c:n arvoilla, ja yritä
löytää mahdollisimman hyvin toimivat arvot.
- Kolmiojakauma on jatkuva jakauma, jonka tiheysfunktio muodostaa (geometrisesti tulkittuna) tasakylkisen kolmion kyljet. Kirjoita ohjelma, joka generoi transformaatiomenetelmällä satunnaislukuja kolmiojakaumasta, joka saa arvoja väliltä -1,...,1. (Tiheysfunktio on siis lineaarinen pisteestä (-1,0) pisteeseen (0,1), ja siitä taas pisteeseen (1,0).) Piirrä myös kuva jakaumasta ja sen kertymäfunktiosta.
- Kirjoita ohjelma, joka generoi hylkäysmenetelmällä satunnaislukuja edellä mainitusta kolmiojakaumasta. Käytä apujakaumana sopivaa tasaista jakaumaa (mitä?).
-
Vertaile edellisten tehtävien toteutuksia tuottamalla kummallakin
10000 satunnaislukua. Tee kummastakin histogrammi.
- Kuinka samanlaisia jakaumia menetelmät tuottavat? Mistä ero johtuu?
- Millainen ero on suoritusajoissa, ja mistä ero johtuu? (Käytä tarvittaessa suurempaa satunnaislukujen määrää, jotta suoritusaikamittaukset ovat luotettavampia. Unixissa ajan mittaus esim. lisäämällä komento time ajastettavan komennon eteen.)
-
Laske Vitterin artikkelissa ja luennolla esitetyn algoritmin S mukainen
toisen tietueen valintatodennäköisyys. Käytä hyväksi sitä, että
P(2) = P(2|1) * P(1) + P(2|-1) * P(-1),
missä i (i=1 tai i=2) on tapahtuma "i:s tietue valitaan otokseen" ja -i on tapahtuma "i:ttä tietuetta ei valita otokseen". - Toteuta Vitterin artikkelissa ja luennoilla esitetty algoritmi A otantaan tietokannasta. Keksi sopiva tapa testata, että algoritmi näyttää toimivan oikein.
Ole ystävällinen ja täytä kurssipalaute. Autat kehittämään laitoksen opetusta!