|
© h.hofstede (h.hofstede@hogeland.nl)
|
|
SIMULEREN. |
|
|
|
|
Simuleren betekent
letterlijk "naspelen" of "nabootsen", en dat is
precies wat we onze trouwe TI deze les gaan laten doen.
Het zal daarbij gaan om kansexperimenten die te ingewikkeld zijn om
direct uit te rekenen na te gaan spelen.
Een belangrijke "TOOL" daarbij is de randomgenerator
van onze TI.
Randomgenerator.
De TI heeft 4 speciale functies om een random (dat betekent
"willekeurig") getal te maken. Daarvan zijn er twee erg interessant en 2
ook wat minder. De interessanten zijn:
1. randInt (via MATH- PRB - 5: randint)
Deze functie maakt een willekeurig geheel getal. Daarbij kun je 3
getallen achter randint invullen, gescheiden door de dikke komma, dus
zó: randint(a, b, c)
a en b geven aan tussen welke waarden de twee gehele
getallen moeten liggen (a en b zélf mogen daarbij ook nog)
c geeft hoeveel keer je zo'n willekeurig getal wilt hebben. Als
je niets invult voor c dan krijg je er eentje.
2. rand (via MATH - PRB - 1: rand)
Deze functie maakt een willekeurig decimaal getal (10 cijfers achter de
komma) tussen 0 en 1. Hier kun je tussen haakjes erachter alleen maar
aangeven hoeveel zulke getallen je wilt.
Nou zeg je misschien direct: "Dat komt toch nooit voor dat je precies
een getal tussen 0 en 1 wilt", maar ik hoop dat je begrijpt
dan je met de functie: a + b * rand
dan een decimaal getal tussen a en a
+ b kunt maken. Kijk, dat is al veel algemener! |
|
|
|
|
(a + b * rand)
maakt een decimaal getal tussen a
en a + b |
|
|
|
|
|
(de
twee minder interessante randomfuncties zijn trouwens randnorm
(getallen die normaal verdeeld zijn) en randbin(getallen die
binomiaal verdeeld zijn))
Uiteraard kun je de uitkomst van een worp weer direct opslaan in
een geheugen naar keuze:
- randint(1,4) → A slaat
een geheel getal tussen [1, 4] op in geheugen A
- 8 * rand → X slaat
een decimaal getal tussen 0 en 8 op in geheugen X
Werken met Lijsten.
Als je vaker een randomfunctie laat uitvoeren en wilt bijhouden hoe vaak
elke uitkomst is voorgekomen kun je vaak het best werken met
lijsten van getallen. Die lijsten hebben de namen L1, L2,
....L6 die je boven de getaltoetsen vindt (2nd 1 geeft
bijv. L1)
Om daarmee te werken zijn de volgende commando's nuttig: |
• |
ClrAllLists
maakt alle lijsten schoon (2nd MEM 4:
ClrAllLists) |
• |
seq(X, X, 1, 6)
→ L1 zet de getallen 1 tm 6 in L1
(we gaan zo meteen het gooien van een dobbelsteen simuleren, dus de
mogelijk uitkomsten zijn dan 1 tm 6). Dat vind je bij 2nd - LIST -
OPS - 5:seq |
• |
6 → dim(L2) zorgt ervoor dat L2 ook uit 6 getallen gaat
bestaan.
dim vind je bij 2nd -LIST - OPS - 3:dim
in deze lijst gaan we zo meteen de aantallen keren dat 1 tm 6 werd
gegooid zetten. |
|
|
|
|
OK, Laten we gaan
gooien!! Ik heb er zin in!
Dat gaat met het volgende programmaatje (regels zijn weer genummerd) |
|
|
|
PROGRAM DOBBEL
1 : ClrHome
2 :
ClrAllLists
3 : seq(X,
X, 1, 6) → L1
4 : 6
→ dim(L2)
5 :
Input"Hoeveel keer?", N
6 : For
(I, 1, N)
7 :
Randint(1,6) →
X
8 :
L2(X) + 1 → L2(X)
9 : end
|
|
|
|
|
|
Wat gebeurt er
allemaal? |
1 + 2 |
scherm en lijsten
schoonmaken (je kunt ze trouwens ook in één regel zetten met een
dubbele punt ertussen) |
3 |
L1 vullen met
1, 2, 3, 4, 5, 6 |
4 |
L2 ook grootte 6
geven |
5. |
In laten voeren hoe
vaak je wilt gooien |
7 |
Gooien met een
dobbelsteen |
8. |
Aantal gegooide ogen
één verhogen |
|
|
|
|
Voer het programma
maar eens uit en kijk daarna bij STAT - EDIT wat er in de lijsten L1 en
L2 is verschenen.
Bij mij gaf dat na 100 keer gooien de lijsten hiernaast.
Hmm... beetje vaak 6.... maar ja, 't is ook nog maar 100 keer.....
|
|
|
|
|
|
Het Monty-Hall Probleem
Je hebt een quiz gewonnen en krijgt drie deuren te zien. Achter
één ervan staat een dure auto, achter de twee anderen staat een geit. Je kiest een deur uit, en daarna maakt de quizmaster
één van de andere twee deuren open (hij weet dat de auto daar niet
staat). Er blijkt dus inderdaad een geit achter deze deur te staan.
Hij vraagt je vervolgens heel gemeen: "Wil je nog van
keus veranderen?".
Is dat een goede tactiek of niet? Of maakt het allemaal niets uit?
Nou, gewoon simuleren maar, zou ik zeggen..... |
|
|
|
|
N is hoe vaak we het
experiment uitvoeren
W is hoe vaak we moeten Wisselen, B is hoe vaak we moeten Blijven
- P is de deur waar de prijs echt achter zit.
- K is de deur die we hebben gekozen.
- X is de deur die de quizzmaster open maakt.
De blauwe lus zorgt ervoor dat de deur die
opengemaakt wordt (X) NIET de prijs is (P) en NIET de door ons
gekozen deur (K). Zolang dat nog wel zo is kies je een andere deur om
open te maken Dat is wat de quizzmaster doet (de enige
mogelijke deur openmaken als wij niet de prijs hadden, of willekeurig
één van de overige 2 deuren openmaken als wij wel de prijs hadden)
Let op dat nieuwe commando "or".
Dat test of aan de eerste OF de tweede voorwaarde is voldaan. (je vindt
het bij TEST - LOGIC - 2:or)
De rest is vanzelfsprekend denk ik:
- Als onze keuze de prijs is moeten we Blijven (B)
- Als onze keuze de prijs niet is moeten we Wisselen (W).
(het rode deel met die W is trouwens overbodig, want daar doen we verder
toch niets mee)
Mijn TI gaf bij 500 keer simuleren: |
PROGRAM DEUREN
: ClrHome
: Input"Hoe vaak?", N
: 0 →
W
: 0 → B
: For
(I, 1, N)
: randint(1, 3) → P
: randint(1, 3) → K
: randint(1, 3) → X
: While (X = P)
or (X = K)
:
randint(1, 3) → X
: End
:
If K = P
:
Then
:
B + 1 → B
:
Else
:
W + 1 → W
:
End
: End
: Disp "procent blijven:", 100 * B/N |
|
|
|
|
|
|
|
|
|
|
|
|
Het blijkt dat je in onze
simulatie in 33% van de gevallen moet blijven bij je keuze en in 67% dus
moet switchen. |
|
|
|
|
|
Stukkie geschiedenis....
Deze vraag werd beroemd toen hij gesteld werd door een lezer van
Parade Magazine in 1990 in de column van Marilyn Vos
Savant (dat was de vrouw met het hoogste IQ van alle vrouwen in de
VS; ze stond daarmee in het Guiness Book of World Records).
Marilyn had een column waarin lezers vragen mochten stellen aan haar. Op
deze vraag antwoordde ze dat je moest switchen omdat je dan een kans van
2/3
op de auto had.
Nou, toen was het hek van de dam!!!
Meer dan 10000 lezers reageerden, dat dat toch onzin was, immers er zijn
op het beslismoment nog slechts twee deuren over, dus de kans is 50% op
de prijs of je nou switcht of niet.....
Een groot deel van die lezers bestond zelfs uit wiskundigen !!!
Toch had Marilyn gelijk!
Als je ons programma hierboven bekijkt, dan zie je meteen waarom dat zo
is!!!!!
Kijk: de enige plek waar B eentje hoger wordt gemaakt is na
de test K = P
Maar die test heeft niets met die blauwe flauwekul te maken !!!!!! Dat
verandert niets aan K of aan P
Eigenlijk het enige dat je doet is twee random getallen K en P kiezen
(uit 1, 2, 3) en daarna kijken of K gelijk is aan P. Nou,
dat is natuurlijk in 1/3
van de keren het geval, en DAN moet je blijven! Dus
2/3
switchen... |
|
|
|
|
|
|
|
|
OPGAVEN |
|
|
|
|
1. |
Verander het
dobbelprogramma hierboven zodat je met 3 stenen gooit in plaats
van 1. |
|
|
|
|
2. |
Je gooit net zolang met
een dobbelsteen totdat je een keer lager gooit dan de vorige
keer. Daarna stop je.
Hoe vaak zul je dan gemiddeld kunnen gooien?
Schrijf een programma dat dat voor je simuleert. Laat het
programma vragen hoe vaak je moet simuleren. |
|
|
|
|
3. |
Het probleem
van de verzamelaar.
Schrijf een programma dat simuleert hoe vaak je gemiddeld met
een dobbelsteen moet gooien om alle aantallen ogen (1 tm 6) een
keer gegooid te hebben. |
|
|
|
|
|
|
|
|
|
|
|
|
|
© h.hofstede (h.hofstede@hogeland.nl)
|