Tilbake
4.5

4.5 Simulering og stokastiske eksperimenter

Monte Carlo-simulering, Python og GeoGebra, store talls lov.

50 min
8 oppgaver
Monte CarloSimuleringPythonStore talls lov
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 8 oppgaver
Kapitlets plass i kurset

Simulering og Monte Carlo-metoden

Mange sannsynsproblem er vanskelege eller umoglege å løyse analytisk. I slike tilfelle kan vi bruke simulering - å gjenta eit tilfeldig forsøk mange gonger på ei datamaskin og telje utfall.

Monte Carlo-simulering er ein metode der vi:
1. Definerer ein modell for det stokastiske forsøket
2. Genererer tilfeldige tal for å simulere forsøket
3. Gjentek forsøket eit stort tal gonger (NN)
4. Bruker dei observerte frekvensane som estimat for sannsyn

Namnet kjem frå kasinoet i Monte Carlo, fordi metoden byggjer på tilfeldigheit - akkurat som eit kasino.

Kvifor simulering?
- Nokre problem er for kompliserte til å løyse eksakt
- Simulering gir ei intuitiv forståing av sannsyn
- Digitale verktøy gjer det enkelt å køyre tusenvis av forsøk
- Resultata kan brukast til å kontrollere analytiske berekningar

Tilfeldige tal og pseudotilfeldigheit

Eit tilfeldig tal er eit tal som er generert av ein tilfeldig prosess, der kvart tal i eit gitt intervall er like sannsynleg.

I praksis bruker datamaskiner pseudotilfeldige talgeneratorar (PRNG) - algoritmar som produserer talsekvensar som ser ut som tilfeldige, men som eigentleg er deterministiske (avgjorde av ein startverdi kalla «seed»).

Vanlege funksjonar i Python:
- random.random() gir eit uniformt tilfeldig tal i [0,1)[0, 1)
- random.randint(a, b) gir eit tilfeldig heiltal mellom aa og bb (inklusiv)
- random.choice(liste) vel eit tilfeldig element frå ei liste

GeoGebra-kommandoar:
- TilfeldigMellom(a, b) genererer tilfeldig heiltal i [a,b][a, b]
- Tilfeldig() gir uniformt tilfeldig tal i [0,1)[0, 1)

For reproduserbare resultat kan ein setje seed med random.seed(42) i Python.

📜Store tals lov
Store tals lov seier at gjennomsnittet av observasjonane i eit forsøk vil nærme seg forventningsverdien når talet på forsøk aukar.

Meir presist: La X1,X2,,XnX_1, X_2, \ldots, X_n vere uavhengige stokastiske variablar med same fordeling og forventningsverdi μ\mu. Då gjeld:

Xˉn=X1+X2++Xnnμna˚n\bar{X}_n = \frac{X_1 + X_2 + \cdots + X_n}{n} \to \mu \quad \text{når } n \to \infty

I praksis tyder dette:
- Den relative frekvensen av ei hending nærmar seg det teoretiske sannsynet
- Gjennomsnittleg gevinst i eit spel nærmar seg forventningsverdien
- Estimata frå simulering blir betre (med lågare standardfeil) for større nn

Standardfeil for estimat: SE(p^)1N\displaystyle \text{SE}(\hat{p}) \approx \frac{1}{\sqrt{N}}

For N=10000N = 10\,000 er standardfeilen ca. 0,01. For N=1000000N = 1\,000\,000 er han ca. 0,001.

Åtvaring: Store tals lov seier ikkje at det vil «jamne seg ut» på kort sikt (gamblarfeilslutninga). Kvart einskild forsøk er framleis heilt tilfeldig.

✏️Monte Carlo-simulering i Python

Bruk Monte Carlo-simulering til å estimere arealet av ein sirkel med radius 1 ved å bruke tilfeldige punkt i kvadratet [1,1]×[1,1][-1, 1] \times [-1, 1].

Metoden: Eit tilfeldig punkt (x,y)(x, y) i kvadratet med sidelengd 2 er innanfor sirkelen dersom x2+y21x^2 + y^2 \leq 1.

P(punkt i sirkel)=Areal sirkelAreal kvadrat=π1222=π4P(\text{punkt i sirkel}) = \frac{\text{Areal sirkel}}{\text{Areal kvadrat}} = \frac{\pi \cdot 1^2}{2^2} = \frac{\pi}{4}

Dermed er π4p^\pi \approx 4 \cdot \hat{p}.

import random

N = 1_000_000
innenfor = 0

for _ in range(N):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
    if x**2 + y**2 <= 1:
        innenfor += 1

pi_estimat = 4 * innenfor / N
print(f"Estimert pi = {pi_estimat:.5f}")
print(f"Eksakt pi   = {3.14159:.5f}")

Køyring gir til dømes: π^3,14152\hat{\pi} \approx 3{,}14152

Standardfeilen er 1106=0,001\displaystyle \approx \frac{1}{\sqrt{10^6}} = 0{,}001, som stemmer med avviket frå eksakt π\pi.

✏️Store tals lov illustrert ved myntkast

Simuler 5000 myntkast og vis grafisk korleis delen kron nærmar seg 0,5. Forklar kva grafen illustrerer om konvergensen av estimat.

import random
import matplotlib.pyplot as plt

N = 5000
antall_kron = 0
andel_kron = []

for i in range(1, N + 1):
    kast = random.randint(0, 1)  # 0 = mynt, 1 = kron
    antall_kron += kast
    andel_kron.append(antall_kron / i)

plt.figure(figsize=(10, 5))
plt.plot(range(1, N + 1), andel_kron, linewidth=0.7, label='Estimert P(kron)')
plt.axhline(y=0.5, color='r', linestyle='--', label='Teoretisk verdi (0,5)')
plt.xlabel('Antall kast')
plt.ylabel('Andel kron')
plt.title('Store talls lov: Konvergens mot 0,5')
plt.legend()
plt.ylim(0.3, 0.7)
plt.show()

Tolking: Grafen viser at delen kron svingar mykje i starten (stor usikkerheit for få kast), men gradvis stabiliserer seg rundt 0,50{,}5 etter nokre tusen kast. Svingingane avtek i takt med 1n\displaystyle \frac{1}{\sqrt{n}} - dette er store tals lov i praksis.

📝Oppgave 1

Løys oppgåvene:

a

Skriv eit Python-program som simulerer 10 000 kast med ein vanleg seksidig terning og estimerer sannsynet for å få 6. Samanlikn med den teoretiske verdien.

b

Forklar kva som blir meint med pseudotilfeldige tal og kvifor dei er tilfredsstillande for praktisk bruk i statistikk.

📝Oppgave 2

Løys oppgåvene:

a

I ei gruppe på 30 personar, kva er sannsynet for at minst to har bursdag på same dag? Estimer svaret med Monte Carlo-simulering (N=50000N = 50\,000 gjentakingar). (Anta 365 dagar per år.)

b

Blir simuleringa køyrt med N=100N = 100 gjentakingar versus N=100000N = 100\,000 gjentakingar, kva ventar du å sjå? Kva seier store tals lov om skilnaden i nøyaktigheit?

📝Oppgave 3

Løys oppgåvene:

a

To terningar blir kasta og produktet P=X1X2P = X_1 \cdot X_2 blir rekna ut. Bruk simulering (N=100000N = 100\,000) til å estimere E(P)E(P) og Var(P)\text{Var}(P).

b

Bruk Python til å teikne eit histogram over fordelinga til PP basert på 100 000 simuleringar. Skildr forma på fordelinga. Er ho symmetrisk?

c

Forklar samanhengen mellom store tals lov og sentralgrenseverdisetninga. Kva seier sentralgrenseverdisetninga om fordelinga til Xˉn\bar{X}_n for store nn?

Oppsummering

Monte Carlo-simulering:
- Estimer P(A)talet pa˚ gonger A inntreffN\displaystyle P(A) \approx \frac{\text{talet på gonger } A \text{ inntreff}}{N}
- Standardfeil for estimatet: SE1N\displaystyle \text{SE} \approx \frac{1}{\sqrt{N}}
- Typisk blir N10000N \geq 10\,000 brukt for god presisjon

Store tals lov:
- Xˉnμ\bar{X}_n \to \mu når nn \to \infty
- Gjeld for alle fordelingar med endeleg forventningsverdi
- Forklarer kvifor simulering fungerer

Python-verktøy: random.random(), random.randint(), random.choice(), random.seed()

GeoGebra-verktøy: TilfeldigMellom(), Tilfeldig() og reknerket for simulering

Repetisjonsoppgåver
Din fremgang
0deloppgaver0 / 5 oppgaver

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.