Å simulere forsøk digitalt (rekneark og programmering) og samanlikne med teoretisk sannsyn.
Den tredje vegen til eit svar
Så langt har vi hatt to vegar til eit sannsyn: rekne det ut frå ein modell, eller måle det med relative frekvensar frå verkelege data.
Den tredje vegen er å la maskinen utføre forsøket for oss — tusenvis av gonger, på eit sekund. Det blir kalla simulering, og det er grunnen til at mange problem som var uoverkomelege for hundre år sidan, er rutine i dag.
Simulering er ikkje ein erstatning for utrekning. Ho er eit supplement som er uunnverleg når reknestykket blir for vanskeleg, og eit kontrollverktøy når du ikkje er sikker på at utrekninga di er rett.
Grunngivinga er store tals lov frå kapittel 4.1: med nok gjentakingar legg den relative frekvensen seg inntil sannsynet.
Framgangsmåten
Kvar simulering følgjer dei same fem stega, anten du bruker rekneark eller programmering:
1. Bestem modellen. Kva er utfalla, og kor sannsynleg er kvart av dei?
2. Simuler eitt forsøk. Trekk tilfeldige tal etter modellen.
3. Avgjer om hendinga inntraff. Skriv vilkåret som ein test som gir sant eller usant.
4. Gjenta mange gonger og tel. Hald ein teljar over kor mange gonger hendinga inntraff.
5. Del på talet på forsøk, og tolk svaret.
Modellen er det viktigaste — og det maskinen ikkje kan gjere for deg. Simuleringa måler den modellen du gav henne, ikkje røynda. Er modellen gal, blir svaret gale same kor mange forsøk du køyrer.
Vi vil anslå sannsynet for at summen av to terningar blir minst 10. Skildre ei simulering i rekneark, og samanlikn med den teoretiske verdien.
Modellen. To terningar, kvar med seks like sannsynlege utfall.
Eitt forsøk. I celle A1 og B1 legg vi eitt terningkast kvar:
A1: =TILFELDIGMELLOM(1;6)
B1: =TILFELDIGMELLOM(1;6)I C1 reknar vi summen:
C1: =A1+B1Testen. I D1 skriv vi 1 når hendinga inntraff, og 0 elles:
D1: =HVIS(C1>=10;1;0)Gjenta og tel. Vi merkjer A1:D1 og dreg nedover til rad 5000. Så tel vi:
F1: =SUMMER(D1:D5000)Del og tolk.
F2: =F1/5000Ei køyring gir typisk eit tal rundt . Trykkjer vi F9, blir arket rekna om med nye tilfeldige tal, og vi får eit litt anna tal kvar gong — det er uvissa i sjølve simuleringa.
Den teoretiske verdien. Summen blir minst 10 for para
Det er 6 av dei 36 utfalla:
Simuleringa treffer altså godt. Merk rekkjefølgja her: vi kunne ha rekna det ut med ein gong, og simuleringa var strengt teke unødvendig. Poenget er at metoden verkar på eit problem vi kan kontrollere — då tør vi bruke han på problem vi ikkje kan kontrollere.
Svar: Simuleringa gir omtrent ; den teoretiske verdien er .
| Funksjon | Gjer |
|---|---|
=TILFELDIGMELLOM(1;6) | tilfeldig heiltal frå 1 til 6 |
=TILFELDIG() | tilfeldig desimaltal mellom 0 og 1 |
=HVIS(vilkår;1;0) | 1 om vilkåret er sant, elles 0 |
=SUMMER(område) | summen — altså talet på treff når cellene er 1 og 0 |
=ANTALL.HVIS(område;">=10") | tel direkte utan hjelpekolonne |
Alle tilfeldige tal blir rekna om når arket blir oppdatert. Trykk F9 for å køyre simuleringa på nytt.
Kva formel gir eitt terningkast?
Skriv ein formel i D1 som gir 1 når summen i C1 er nøyaktig 7, og 0 elles.
Kva er det teoretiske sannsynet for sum 7? Oppgi forkorta brøk.
Kor mange av dei 2000 kasta ventar du gir sum 7?
Trykk F9 fem gonger og noter anslaget kvar gong. Skildre kor mykje tala varierer.
Simulering i Python
I eit program blir dei fem stega til fem linjer. Mønsteret er alltid det same:
import random
antall = 100000 # kor mange forsøk
treff = 0 # teljaren
for i in range(antall):
# eitt forsøk
# test om hendinga inntraff
# auk teljaren om ho gjorde det
pass
print(treff / antall)Fordelen framfor rekneark er at du kan køyre langt fleire forsøk, og at forsøket kan vere meir samansett enn éi rad med celler.
I eit spel kastar du to terningar. Du vinn dersom minst éin av dei viser 5 eller 6.
a) Skriv eit program som anslår vinnarsannsynet.
b) Bestem vinnarsannsynet ved rekning, og samanlikn.
a) Vi følgjer dei fem stega.
import random
antall = 100000
treff = 0
for i in range(antall):
t1 = random.randint(1, 6)
t2 = random.randint(1, 6)
if t1 >= 5 or t2 >= 5:
treff = treff + 1
print(treff / antall)- random.randint(1, 6) er eitt terningkast — eitt forsøk.
- if t1 >= 5 or t2 >= 5 er testen. or betyr «eller», og det er den inklusive «eller» frå kapittel 4.4: vinn du med begge, tel det òg — testen.
- treff = treff + 1 aukar teljaren. Legg merke til at eitt likskapsteikn tilordnar ein verdi; det er ikkje ei likning — teljaren.
- Siste linja deler på talet på forsøk — del og tolk.
Programmet skriv ut eit tal rundt .
b) Vi reknar med komplementet, slik kapittel 4.2 lærte oss. Det motsette av «minst éin viser 5 eller 6» er «ingen av dei viser 5 eller 6», altså at begge viser 1, 2, 3 eller 4.
For éin terning:
Terningane er uavhengige, så vi gongar:
Simuleringa og utrekninga stemmer overeins. Då veit vi to ting: utrekninga er truleg rett, og programmet gjer truleg det det skal.
Svar: a) Eit program som tel treff i 100 000 kast; det gir omtrent . b) .
Gjer det same som i døme 2. I eit anna spel kastar du tre terningar, og du vinn dersom minst éin av dei viser seksar.
Skriv testlinja i programmet som avgjer om du vinn.
Bestem sannsynet for at éin terning ikkje viser seksar. Oppgi forkorta brøk.
Bestem sannsynet for at ingen av dei tre viser seksar. Oppgi som brøk.
Bestem vinnarsannsynet. Oppgi som brøk.
Skriv vinnarsannsynet som desimaltal med tre desimalar.
Å lese simuleringsprogram som andre har skrive
Ei vanleg eksamensoppgåve gir deg eit ferdig program og spør kva sannsyn det reknar ut. Framgangsmåten er å lese programmet i to omgangar:
Først komponentane, linje for linje: kva er konstantane, kva blir trekt tilfeldig, kva er testen, kva blir talt, kva blir skrive ut?
Så flyten, altså kva som skjer når programmet køyrer: følg to gjennomløp av løkka og hald styr på kva kvar variabel inneheld etter kvart steg. Deretter «og så vidare» for resten.
Nøkkelen ligg nesten alltid i testlinja. Ho fortel nøyaktig kva hending programmet tel.
Forklar kva sannsyn programmet under anslår, og kvifor simulering er eit rimeleg val her.
import random
n = 200000
teller = 0
for i in range(n):
p = 1
for k in range(3):
p = p * random.randint(1, 6)
if p > 100:
teller = teller + 1
print(teller / n)Komponentane:
- n = 200000 er talet på forsøk, og teller = 0 er teljaren. Begge blir sette før løkka byrjar.
- Den ytre løkka for i in range(n) gjentek heile forsøket 200 000 gonger.
- p = 1 nullstiller — eller rettare, einstiller — produktet framfor kvart forsøk. Det må stå inne i den ytre løkka; stod det utanfor, ville produktet ha vakse gjennom alle forsøka.
- Den indre løkka for k in range(3) køyrer tre gonger. Kvar gong blir p gonga med eit nytt terningkast. Etter tre rundar er p produktet av tre terningkast.
- if p > 100 er testen: er produktet større enn 100?
- teller = teller + 1 aukar teljaren når testen slår til.
- print(teller / n) skriv ut delen — altså anslaget.
Flyten, to gjennomløp:
Første gjennomløp av den ytre løkka. p blir sett til 1. Sei at terningane i den indre løkka gir 4, 6 og 5:
Testen slår til, og teller blir 1.
Andre gjennomløp. p blir sett til 1 igjen. Sei at terningane gir 2, 3 og 6:
Testen slår ikkje til, og teller står stille på 1.
Og så vidare, 200 000 gonger. Til slutt blir teljaren delt på 200 000.
Kva sannsyn? Programmet anslår
Kvifor simulering? Utfallsrommet har utfall, og det finst ingen enkel formel for kor mange av dei som gir produkt over 100 — vi måtte ha gått gjennom alle 216 og talt. Det let seg gjere, men det er tungvint for hand. Simuleringa gir svaret på eit sekund, og gir dessutan ein metode som framleis verkar om vi går opp til fire eller fem terningar, der opptellinga blir uoverkomeleg.
Svar: Programmet anslår sannsynet for at produktet av tre terningkast blir større enn 100.
import random
n = 50000
teller = 0
for i in range(n):
kort = random.sample(range(1, 53), 5)
hoy = 0
for k in kort:
if k > 48:
hoy = hoy + 1
if hoy >= 1:
teller = teller + 1
print(teller / n)Korta er nummererte 1 til 52, og dei fire essa har nummera 49, 50, 51 og 52.
Kva gjer random.sample(range(1, 53), 5)?
Kva tel variabelen hoy?
Kva sannsyn anslår programmet?
Korleis måtte testlinja if hoy >= 1: endrast for å anslå sannsynet for nøyaktig eitt ess?
Bestem sannsynet for at ingen av dei fem korta er ess, ved rekning. Svar med tre desimalar.
Kor nøyaktig er ei simulering?
Eit simuleringssvar er ei måling, ikkje ein fasit. To køyringar av same program gir ulike tal, og skilnaden er ikkje ein feil — han er uvissa.
Den viktigaste regelen å hugse er denne:
For å halvere uvissa må du firedoble talet på forsøk.
Grunnen er at uvissa søkk som : firedoblar du , blir dobla, og uvissa blir halvert.
Som grov regel hamnar anslaget nesten alltid innanfor frå det sanne sannsynet. Det er ein grov øvre feilmargin (same tommelfingerregel som i kapittel 3.1), ikkje det typiske avviket — det typiske avviket er som regel mindre. Det betyr at dei første tusen forsøka gir mykje, medan dei neste hundre tusen gir stadig mindre att for arbeidet.
Difor skal du aldri oppgi eit simuleringssvar med fleire desimalar enn simuleringa kan bere. Har du køyrt 1000 forsøk, er «0,3427» ein påstand du ikkje har dekning for; «omtrent 0,34» er ærleg.
Figuren over viser 10 000 simulerte kast med to terningar samanlikna med dei teoretiske sannsyna.
a) Kvifor er søylene høgast i midten?
b) Det største avviket mellom simulert og teoretisk del er , ved sum 5. Er det stort eller lite?
c) Kor mange kast måtte vi ha køyrt for å halvere uvissa?
a) Fordi summane i midten kan oppnåast på flest måtar. Sum 7 kan kome av 6 av dei 36 talpara, medan sum 2 berre kan kome av eitt — nemleg .
Dette er det same poenget som i kapittel 4.3: dei 11 summane er ikkje like sannsynlege, sjølv om dei 36 para er det.
b) Det er lite. Avviket ligg ved sum 5, og skal samanliknast med sannsynet der:
Avviket er omtrent 8 % av verdien.
Ein nyttig målestokk er den grove øvre feilmarginen: med 10 000 forsøk hamnar anslaget nesten alltid innanfor
Det største avviket vårt, , ligg innanfor.
c) Uvissa søkk som . Skal ho halverast, må doblast, og då må firedoblast:
Svar: a) Fordi dei midtre summane kan oppnåast på fleire måtar. b) Lite — det ligg innanfor den grove feilmarginen som 10 000 forsøk gir. c) 40 000 kast.
Om uvissa i ei simulering.
Ei simulering med 2500 forsøk gir anslaget 0,384. Kor stor er den grove feilmarginen ? Svar med to desimalar.
Kor mange forsøk trengst for å halvere feilmarginen i a)?
Kor mange forsøk trengst for å gjere feilmarginen ti gonger mindre enn i a)?
Ein elev skriv «simuleringa gir 0,38400». Kva er gale med svaret?
Korleis bør svaret i d) i staden skrivast?
Oppsummering
- Simulering utfører forsøket mange gonger digitalt og bruker den relative frekvensen som anslag. Grunngivinga er store tals lov.
- Framgangsmåten er fem steg: modell, eitt forsøk, test, gjenta og tel, del og tolk.
- Simuleringa måler modellen du gav henne. Er modellen gal, hjelper ikkje fleire forsøk.
- I rekneark: TILFELDIGMELLOM, HVIS og SUMMER, og F9 for ny køyring. I Python: ei løkke med ein teljar.
- Når du les program som andre har skrive: finn testlinja — ho seier kva hending som blir talt. Følg deretter to gjennomløp av løkka.
- Eit simuleringssvar er ei måling med uvisse. Firedobling av halverer uvissa, og svaret skal ikkje oppgivast med fleire desimalar enn det kan bere.
- Bruk simulering til å kontrollere ei utrekning du er usikker på — og til å svare når utrekninga er for vanskeleg.
Kor mange utfall har utfallsrommet for fire kast?
Bestem sannsynet for at alle fire viser krone. Oppgi forkorta brøk.
Programmet køyrer 80 000 forsøk. Omtrent kor mange treff ventar du?
Ei køyring gir 5043 treff. Rekn ut anslaget med fire desimalar, og samanlikn med b).
Ei anna køyring gir 12 000 treff. Kva bør du mistenkje?
Skriv linja som trekkjer dei 15 lodda idrettslaget kjøper, når lodda er nummererte 1 til 200 og gevinstlodda har nummera 1 til 8.
Skriv testlinja som avgjer om laget fekk minst éin gevinst.
Bestem sannsynet for at laget ikkje får nokon gevinst, ved rekning. Svar med tre desimalar.
Bestem sannsynet for minst éin gevinst. Svar med tre desimalar.
Laget vurderer å kjøpe 30 lodd i staden. Blir sannsynet for minst éin gevinst dobbelt så stort? Rekn ut og forklar.
Er føresetnaden om at bygningane blir skadde uavhengig av kvarandre, rimeleg ved storm? Grunngi.
Kva veg vil denne føresetnaden dra anslaget — for høgt eller for lågt?
Hjelper det å auke frå 10 millionar til 100 millionar simulerte år?
Kva kunne selskapet ha gjort for å betre modellen?
Formuler ein generell lærdom om simulering ut frå dette.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
