UtkastBoka ble skrevet det første døgnet etter at læreplanen kom, og kvalitetssikres nå kapittel for kapittel gjennom høsten 2026. Kapitler merket «Kvalitetssikret» er gjennomgått; resten er utkast du gjerne må lese og melde fra om.
Fant du en feil, eller savner du noe i dette kapittelet?Alt leses, og feil rettes fortløpende.
Tilbake
4.8
Simulering av tilfeldige forsøk

4.8 Simulering av tilfeldige forsøk

Å simulere forsøk digitalt (regneark og programmering) og sammenligne med teoretisk sannsynlighet.

45 min
7 oppgaver
SimuleringRegnearkPython
Din fremgang i kapitlet
0 / 7 oppgaver

Den tredje veien til et svar

Så langt har vi hatt to veier til en sannsynlighet: regne den ut fra en modell, eller måle den med relative frekvenser fra virkelige data.

Den tredje veien er å la maskinen utføre forsøket for oss — tusener av ganger, på et sekund. Det kalles simulering, og det er grunnen til at mange problemer som var uoverkommelige for hundre år siden, er rutine i dag.

Simulering er ikke en erstatning for utregning. Den er et supplement som er uunnværlig når regnestykket blir for vanskelig, og et kontrollverktøy når du ikke er sikker på at utregningen din er riktig.

Simulering
Å simulere et stokastisk forsøk er å la en datamaskin utføre forsøket mange ganger etter en sannsynlighetsmodell vi selv har gitt den, og bruke den relative frekvensen som anslag på sannsynligheten.

P(A)antall ganger A inntraffantall simulerte forsøkP(A) \approx \frac{\text{antall ganger } A \text{ inntraff}}{\text{antall simulerte forsøk}}

Begrunnelsen er store talls lov fra kapittel 4.1: med nok gjentakelser legger den relative frekvensen seg inntil sannsynligheten.

Framgangsmåten

Enhver simulering følger de samme fem skrittene, enten du bruker regneark eller programmering:

1. Bestem modellen. Hva er utfallene, og hvor sannsynlig er hvert av dem?
2. Simuler ett forsøk. Trekk tilfeldige tall etter modellen.
3. Avgjør om hendelsen inntraff. Skriv betingelsen som en test som gir sant eller usant.
4. Gjenta mange ganger og tell. Hold en teller over hvor mange ganger hendelsen inntraff.
5. Del på antall forsøk, og tolk svaret.

Skritt 1 er det viktigste — og det maskinen ikke kan gjøre for deg. Simuleringen måler den modellen du ga den, ikke virkeligheten. Er modellen gal, blir svaret galt uansett hvor mange forsøk du kjører.

✏️Eksempel 1

Vi vil anslå sannsynligheten for at summen av to terninger blir minst 10. Beskriv en simulering i regneark, og sammenlign med den teoretiske verdien.

Løsning:

Skritt 1 — modellen. To terninger, hver med seks like sannsynlige utfall.

Skritt 2 — ett forsøk. I celle A1 og B1 legger vi ett terningkast hver:

A1:  =TILFELDIGMELLOM(1;6)
B1:  =TILFELDIGMELLOM(1;6)

I C1 regner vi summen:

C1:  =A1+B1

Skritt 3 — testen. I D1 skriver vi 1 når hendelsen inntraff, og 0 ellers:

D1:  =HVIS(C1>=10;1;0)

Skritt 4 — gjenta og tell. Vi merker A1:D1 og drar nedover til rad 5000. Så teller vi:

F1:  =SUMMER(D1:D5000)

Skritt 5 — del og tolk.

F2:  =F1/5000

En kjøring gir typisk et tall rundt 0,170{,}17. Trykker vi F9, regnes arket om med nye tilfeldige tall, og vi får et litt annet tall hver gang — det er uvissheten i selve simuleringen.

Den teoretiske verdien. Summen blir minst 10 for parene

(4,6), (5,5), (6,4), (5,6), (6,5), (6,6)(4,6),\ (5,5),\ (6,4),\ (5,6),\ (6,5),\ (6,6)

Det er 6 av de 36 utfallene:

P(minst 10)=636=160,167P(\text{minst 10}) = \frac{6}{36} = \frac{1}{6} \approx 0{,}167

Simuleringen treffer altså godt. Merk rekkefølgen her: vi kunne regnet det ut med en gang, og simuleringen var strengt tatt unødvendig. Poenget er at metoden virker på et problem vi kan kontrollere — da tør vi bruke den på problemer vi ikke kan kontrollere.

Svar: Simuleringen gir omtrent 0,170{,}17; den teoretiske verdien er 160,167\displaystyle \frac{1}{6} \approx 0{,}167.

📝Oppgave 1
Regneark. Sett opp en simulering av 2000 kast med to terninger, etter framgangsmåten i eksempel 1.
a

Hvilken formel gir ett terningkast?

b

Skriv en formel i D1 som gir 1 når summen i C1 er nøyaktig 7, og 0 ellers.

c

Hva er den teoretiske sannsynligheten for sum 7? Oppgi forkortet brøk.

d

Hvor mange av de 2000 kastene venter du gir sum 7?

e

Trykk F9 fem ganger og noter anslaget hver gang. Beskriv hvor mye tallene varierer.

Løs oppgaven

Simulering i Python

I et program blir de fem skrittene til fem linjer. Mønsteret er alltid det samme:

import random

antall = 100000          # hvor mange forsøk
treff = 0                # telleren

for i in range(antall):
    # ett forsøk
    # test om hendelsen inntraff
    # øk telleren hvis den gjorde det
    pass

print(treff / antall)

Fordelen framfor regneark er at du kan kjøre langt flere forsøk, og at forsøket kan være mer sammensatt enn én rad med celler.

✏️Eksempel 2

I et spill kaster du to terninger. Du vinner dersom minst én av dem viser 5 eller 6.

a) Skriv et program som anslår vinnersannsynligheten.
b) Bestem vinnersannsynligheten ved regning, og sammenlign.

Løsning:

a) Vi følger de fem skrittene.

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 ett terningkast — skritt 2.
- if t1 >= 5 or t2 >= 5 er testen. or betyr «eller», og det er det inklusive «eller» fra kapittel 4.4: vinner du med begge, teller det også — skritt 3.
- treff = treff + 1 øker telleren. Legg merke til at ett likhetstegn tilordner en verdi; det er ikke en likning — skritt 4.
- Siste linje deler på antall forsøk — skritt 5.

Programmet skriver ut et tall rundt 0,5560{,}556.

b) Vi regner med komplementet, slik kapittel 4.2 lærte oss. Det motsatte av «minst én viser 5 eller 6» er «ingen av dem viser 5 eller 6», altså at begge viser 1, 2, 3 eller 4.

For én terning:

P(høyst 4)=46=23P(\text{høyst 4}) = \frac{4}{6} = \frac{2}{3}

Terningene er uavhengige, så vi ganger:

P(ingen 5 eller 6)=2323=49P(\text{ingen 5 eller 6}) = \frac{2}{3} \cdot \frac{2}{3} = \frac{4}{9}

P(vinner)=149=9949=590,556P(\text{vinner}) = 1 - \frac{4}{9} = \frac{9}{9} - \frac{4}{9} = \frac{5}{9} \approx 0{,}556

Simuleringen og utregningen stemmer overens. Da vet vi to ting: utregningen er trolig riktig, og programmet gjør trolig det det skal.

Svar: a) Et program som teller treff i 100 000 kast; det gir omtrent 0,5560{,}556. b) 590,556\displaystyle \frac{5}{9} \approx 0{,}556.

📝Oppgave 2

Gjør det samme som i eksempel 2. I et annet spill kaster du tre terninger, og du vinner dersom minst én av dem viser sekser.

a

Skriv testlinja i programmet som avgjør om du vinner.

b

Bestem sannsynligheten for at én terning ikke viser sekser. Oppgi forkortet brøk.

c

Bestem sannsynligheten for at ingen av de tre viser sekser. Oppgi som brøk.

d

Bestem vinnersannsynligheten. Oppgi som brøk.

e

Skriv vinnersannsynligheten som desimaltall med tre desimaler.

Løs oppgaven

Å lese andres simuleringsprogram

En vanlig eksamensoppgave gir deg et ferdig program og spør hvilken sannsynlighet det regner ut. Framgangsmåten er å lese programmet i to omganger:

Først komponentene, linje for linje: hva er konstantene, hva trekkes tilfeldig, hva er testen, hva telles, hva skrives ut?

Så flyten, altså hva som skjer når programmet kjører: følg to gjennomløp av løkka og hold styr på hva hver variabel inneholder etter hvert skritt. Deretter «og så videre» for resten.

Nøkkelen ligger nesten alltid i testlinja. Den forteller nøyaktig hvilken hendelse programmet teller.

✏️Eksempel 3

Forklar hvilken sannsynlighet programmet under anslår, og hvorfor simulering er et rimelig valg 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)

Løsning:

Komponentene:

- n = 200000 er antall forsøk, og teller = 0 er telleren. Begge settes før løkka begynner.
- Den ytre løkka for i in range(n) gjentar hele forsøket 200 000 ganger.
- p = 1 nullstiller — eller rettere, én-stiller — produktet foran hvert forsøk. Det må stå inne i den ytre løkka; sto det utenfor, ville produktet vokst gjennom alle forsøkene.
- Den indre løkka for k in range(3) kjører tre ganger. Hver gang ganges p med et nytt terningkast. Etter tre runder er p produktet av tre terningkast.
- if p > 100 er testen: er produktet større enn 100?
- teller = teller + 1 øker telleren når testen slår til.
- print(teller / n) skriver ut andelen — altså anslaget.

Flyten, to gjennomløp:

Første gjennomløp av den ytre løkka. p settes til 1. Indre løkke: si at terningene gir 4, 6 og 5. Da blir p først 14=41 \cdot 4 = 4, så 46=244 \cdot 6 = 24, så 245=12024 \cdot 5 = 120. Testen 120>100120 > 100 slår til, og teller blir 1.

Andre gjennomløp. p settes til 1 igjen. Si at terningene gir 2, 3 og 6. Da blir p 22, så 66, så 3636. Testen 36>10036 > 100 slår ikke til, og teller står stille på 1.

Og så videre, 200 000 ganger. Til slutt deles telleren på 200 000.

Hvilken sannsynlighet? Programmet anslår

P(produktet av tre terningkast er større enn 100)P(\text{produktet av tre terningkast er større enn } 100)

Hvorfor simulering? Utfallsrommet har 63=2166^3 = 216 utfall, og det finnes ingen enkel formel for hvor mange av dem som gir produkt over 100 — vi måtte gått gjennom alle 216 og telt. Det lar seg gjøre, men det er tungvint for hånd. Simuleringen gir svaret på et sekund, og gir dessuten en metode som fortsatt virker om vi går opp til fire eller fem terninger, der opptellingen blir uoverkommelig.

Svar: Programmet anslår sannsynligheten for at produktet av tre terningkast blir større enn 100.

📝Oppgave 3
Programanalyse. Studer programmet:

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)

Kortene er nummerert 1 til 52, og de fire essene har numrene 49, 50, 51 og 52.

a

Hva gjør random.sample(range(1, 53), 5)?

b

Hva teller variabelen hoy?

c

Hvilken sannsynlighet anslår programmet?

d

Hvordan måtte testlinja if hoy >= 1: endres for å anslå sannsynligheten for nøyaktig ett ess?

e

Bestem sannsynligheten for at ingen av de fem kortene er ess, ved regning. Svar med tre desimaler.

Løs oppgaven

Hvor nøyaktig er en simulering?

Et simuleringssvar er en måling, ikke en fasit. To kjøringer av samme program gir ulike tall, og forskjellen er ikke en feil — den er uvissheten.

Den viktigste regelen å huske er denne:

For å halvere usikkerheten må du firedoble antall forsøk.

Grunnen er at usikkerheten synker som 1n\dfrac{1}{\sqrt{n}}: firedobler du nn, dobles n\sqrt{n}, og usikkerheten halveres. Det betyr at de første tusen forsøkene gir mye, mens de neste hundre tusen gir stadig mindre igjen for arbeidet.

Derfor skal du aldri oppgi et simuleringssvar med flere desimaler enn simuleringen kan bære. Har du kjørt 1000 forsøk, er «0,3427» en påstand du ikke har dekning for; «omtrent 0,34» er ærlig.

✏️Eksempel 4

Figuren over viser 10 000 simulerte kast med to terninger sammenlignet med de teoretiske sannsynlighetene.

a) Hvorfor er søylene høyest i midten?
b) Det største avviket mellom simulert og teoretisk andel er 0,00850{,}0085. Er det stort eller lite?
c) Hvor mange kast måtte vi kjørt for å halvere det typiske avviket?

Løsning:

a) Fordi summene i midten kan oppnås på flest måter. Sum 7 kan komme av 6 av de 36 tallparene, mens sum 2 bare kan komme av ett — nemlig (1,1)(1,1).

P(sum 7)=636=160,167P(sum 2)=1360,028P(\text{sum } 7) = \frac{6}{36} = \frac{1}{6} \approx 0{,}167 \qquad P(\text{sum } 2) = \frac{1}{36} \approx 0{,}028

Dette er det samme poenget som i kapittel 4.3: de 11 summene er ikke like sannsynlige, selv om de 36 parene er det.

b) Det er lite. Avviket 0,00850{,}0085 skal sammenlignes med selve sannsynligheten det gjelder, 0,1670{,}167. Det tilsvarer omtrent 5 % av verdien, og en simulering på 10 000 forsøk kan ikke love bedre enn dette.

En nyttig målestokk: med 10 000 forsøk ligger det typiske avviket i størrelsesorden 110000=1100=0,01\displaystyle \frac{1}{\sqrt{10\,000}} = \frac{1}{100} = 0{,}01. Vårt største avvik er altså akkurat der man skulle vente.

c) Usikkerheten synker som 1n\displaystyle \frac{1}{\sqrt{n}}. Skal den halveres, må n\sqrt{n} dobles, og da må nn firedobles:

410000=40000 kast4 \cdot 10\,000 = 40\,000 \text{ kast}

Svar: a) Fordi de midtre summene kan oppnås på flere måter. b) Lite — det er i den størrelsesorden 10 000 forsøk gir. c) 40 000 kast.

📝Oppgave 4

Om usikkerheten i en simulering.

a

En simulering med 2500 forsøk gir anslaget 0,384. Omtrent hvor stort er det typiske avviket, regnet som 1n\displaystyle \frac{1}{\sqrt{n}}? Svar med to desimaler.

b

Hvor mange forsøk trengs for å halvere avviket i a)?

c

Hvor mange forsøk trengs for å gjøre avviket ti ganger mindre enn i a)?

d

En elev skriver «simuleringen gir 0,38400». Hva er galt med svaret?

e

Hvordan bør svaret i d) i stedet skrives?

Løs oppgaven

Oppsummering

- Simulering utfører forsøket mange ganger digitalt og bruker den relative frekvensen som anslag. Begrunnelsen er store talls lov.
- Framgangsmåten er fem skritt: modell, ett forsøk, test, gjenta og tell, del og tolk.
- Simuleringen måler modellen du ga den. Er modellen gal, hjelper ikke flere forsøk.
- I regneark: TILFELDIGMELLOM, HVIS og SUMMER, og F9 for ny kjøring. I Python: en løkke med en teller.
- Når du leser andres program: finn testlinja — den sier hvilken hendelse som telles. Følg deretter to gjennomløp av løkka.
- Et simuleringssvar er en måling med usikkerhet. Firedobling av nn halverer usikkerheten, og svaret skal ikke oppgis med flere desimaler enn det kan bære.
- Bruk simulering til å kontrollere en utregning du er usikker på — og til å svare når utregningen er for vanskelig.

📝Oppgave 5
Samleoppgave (Del 1 — uten hjelpemidler). Et program simulerer fire kast med et pengestykke og teller hvor ofte alle fire viser kron. Du skal kontrollere programmet ved regning før du stoler på det.
a

Hvor mange utfall har utfallsrommet for fire kast?

b

Bestem sannsynligheten for at alle fire viser kron. Oppgi forkortet brøk.

c

Programmet kjører 80 000 forsøk. Omtrent hvor mange treff venter du?

d

En kjøring gir 5043 treff. Regn ut anslaget med fire desimaler, og sammenlign med b).

e

En annen kjøring gir 12 000 treff. Hva bør du mistenke?

Løs oppgaven
📝Oppgave 6
Samleoppgave (Del 2 — programmering). En kiosk selger 200 lodd. 8 av dem gir gevinst. Et idrettslag kjøper 15 lodd.
a

Skriv linja som trekker de 15 loddene idrettslaget kjøper, når loddene er nummerert 1 til 200 og gevinstloddene har numrene 1 til 8.

b

Skriv testlinja som avgjør om laget fikk minst én gevinst.

c

Bestem sannsynligheten for at laget ikke får noen gevinst, ved regning. Svar med tre desimaler.

d

Bestem sannsynligheten for minst én gevinst. Svar med tre desimaler.

e

Laget vurderer å kjøpe 30 lodd i stedet. Blir sannsynligheten for minst én gevinst dobbelt så stor? Regn ut og forklar.

Løs oppgaven
📝Oppgave 7
Drøftingsoppgave. Et forsikringsselskap simulerer utbetalinger etter storm. De legger inn at hver enkelt bygning skades uavhengig av de andre, med sannsynlighet 0,002. Programmet kjører 10 millioner simulerte år og konkluderer: «Sannsynligheten for at vi må utbetale mer enn en milliard kroner på ett år, er mindre enn 1 av 100 000.»
a

Er antakelsen om at bygningene skades uavhengig av hverandre, rimelig ved storm? Begrunn.

b

Hvilken vei vil denne antakelsen trekke anslaget — for høyt eller for lavt?

c

Hjelper det å øke fra 10 millioner til 100 millioner simulerte år?

d

Hva kunne selskapet gjort for å forbedre modellen?

e

Formuler en generell lærdom om simulering ut fra 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.