AANSLUITINGSPROJECT TUE - VO
startpagina ] omhoog ] rekenen met resten ] [ lcgenerator ] roostertoets ] beterelcmgenerator ]

 

Een (slechte) random-getallengenerator

Op de pagina rekenen met resten heb je geleerd hoe je modulo rekent. In het onderstaande rijvoorschrift wordt dat gebruikt:

xn+1= 6xn  + 7 (mod 10)
x0 = 1

Dit voorschrift noem je een recursief voorschrift. Je kunt x1 pas uitrekenen als je x0 kent. En als je x1 kent dan kun je pas x2 uitrekenen.  De waarde van x0 wordt ook wel de kiem genoemd. Als die waarde gegeven is dan staan alle andere waarden vast.

In dit voorbeeld ziet de rij getallen er als volgt uit:

x0 = 1 ;
x1 = 6*1 + 7 (mod 10) 3
x2 = 6*3 + 7 (mod 10) 5
x3 = 6*5 + 7 (mod 10) 7
x4 = 6*7 + 7 (mod 10) 9
x5 = 6*9 + 7 (mod 10) 1

Verder rekenen is niet meer nodig. x5 is gelijk aan x0 en dus is x6 gelijk aan x1. Met dit voorschrift krijg je een cyclus met lengte 5.  Als je nu bijvoorbeeld afspreekt dat een getal onder de 5 ''kop" voorstelt en een getal boven de 4 "munt" dan maak je op deze manier het rijtje: kkmmmkkmmm...

Als je met een ander getal start of als je de getallen in het voorschrift verandert dan krijg je andere getallen. Een voorbeeld met hetzelfde modulusgetal (10):

xn+1= 5xn  (mod 10)
x0 = 1

Je krijgt nu:
x0 = 1
x1 = 5*1 (mod 10) 5;
x2 = 5*5 (mod 10) 5

Deze rij levert een cyclus met lengte 1. Er komt steeds dezelfde waarde tevoorschijn. Het zal duidelijk zijn dat dit rijtje minder goed is dan het vorige als je aan het werpen van een munt denkt: kmmmmm...

De maximale cycluslengte die je bij modulus 10 kunt krijgen is 10. Een voorbeeld van zo'n rij is

xn+1= xn + 1 (mod 10)
x0 = 1

Dit keer krijg je de rij:

x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
1 1+1=2 2+1=3 4 5 6 7 8 9 0

Weliswaar krijg je nu 10 verschillende waarden maar het is wel een zeer geordend patroon. Dit rijtje worpen zou niemand als echt accepteren: kkkkkmmmmkkkkkmmmmmkkkkkmmmmm...

De bovenstaande voorbeelden zijn voorbeelden van slechte random-getallengeneratoren. Deze methode om getallen te maken heet de lineaire congruentiemethode. Het voorschrift ziet er in het algemeen als volgt uit

xn+1= axn  + b (mod m)
x0 = startwaarde

Als je randomgetallen hiermee wilt maken dan ben je op zoek naar waarden voor a, b die een lange en "springerige" rij voortbrengen. De lengte van de rij is maximaal m. Dan moet de rij zich gaan herhalen  Je maakt dus helemaal geen echte randomgetallen op die manier. De getallen heten daarom ook wel pseudo-randomgetallen. Maar als m zeer groot is dan ziet een gebruiker niet dat de rij zich herhaalt. In de generator die in computerprogramma's zitten generatoren met cycluslengte in de orde van 1020. Dat ziet een gebruiker echt niet!!!! De startwaarde wordt daarbij op de een of andere wijze gekoppeld aan interne instellingen van de computer (denk aan de klok).

Op de pagina Een betere random-getallengenerator kun je meer lezen over deze manier om randomgetallen te maken. Maar je kunt het beste eerst de volgende opgave maken.  

opgave 5
a) Welke rij getallen krijg je bij startwaarde = 1, a = 3, b = 1 en m = 6
b) Ook bij m = 6 kun je een cyclus  met lengte 6 krijgen. Zoek a en b die zo'n rijtje voortbrengen.
c) Hieronder zie je een rij met m = 6 in een grafiek. Bepaal bijbehorende a en b?


opgave 6
Met een dobbelsteen kun je 1, 2, 3, 4, 5 of 6 ogen gooien.

a) Hoe kun je dit eenvoudig simuleren met behulp van de lineaire congruentiemethode als je m = 240 neemt?

In Excel levert de functie
ASELECT() een "pseudo-randomgetal"  tussen 0 en 1. Met de functie AFRONDEN_N_BOVEN(...)
kun je getallen afronden

b)  Hoe kun je met behulp van deze functies een worp met een dobbelsteen simuleren?
c) "Gooi" 600 keer met een dobbelsteen" Hoe vaak gooi je 1 oog, hoe vaak 2 ogen,... hoe vaak gooi je  6 ogen? Gebruik voor dit tellen de functie
 AANTAL_ALS(...)

      Opmerkingen

  •  met de functie AANTAL_ALS(...) kun je in Excel tellen
  • Hieronder zie je de naam van de functies in de Engelstalige versie
Nederlandse versie Engelstalige versie
ASELECT()  RAND()
AFRONDEN_N_BOVEN(...) ROUNDUP(...)
 AANTAL_ALS(...) COUNTIF(...)