4.5 Simulering og stokastiske eksperimenter
Monte Carlo-simulering, Python og GeoGebra, store talls lov.
Simulering og Monte Carlo-metoden
Mange sannsynlighetsproblemer er vanskelige eller umulige å løse analytisk. I slike tilfeller kan vi bruke simulering - å gjenta et tilfeldig forsøk mange ganger på en datamaskin og telle utfall.
Monte Carlo-simulering er en metode der vi:
1. Definerer en modell for det stokastiske forsøket
2. Genererer tilfeldige tall for å simulere forsøket
3. Gjentar forsøket et stort antall ganger ()
4. Bruker de observerte frekvensene som estimat for sannsynligheter
Navnet kommer fra kasinoet i Monte Carlo, fordi metoden bygger på tilfeldighet - akkurat som et kasino.
Hvorfor simulering?
- Noen problemer er for kompliserte til å løse eksakt
- Simulering gir en intuitiv forståelse av sannsynligheter
- Digitale verktøy gjør det enkelt å kjøre tusenvis av forsøk
- Resultatene kan brukes til å kontrollere analytiske beregninger
Et tilfeldig tall er et tall som er generert av en tilfeldig prosess, der hvert tall i et gitt intervall er like sannsynlig.
I praksis bruker datamaskiner pseudotilfeldige tallgeneratorer (PRNG) - algoritmer som produserer tallsekvenser som ser ut som tilfeldige, men som egentlig er deterministiske (bestemt av en startverdi kalt «seed»).
Vanlige funksjoner i Python:
- random.random() gir et uniformt tilfeldig tall i
- random.randint(a, b) gir et tilfeldig heltall mellom og (inklusiv)
- random.choice(liste) velger et tilfeldig element fra en liste
GeoGebra-kommandoer:
- TilfeldigMellom(a, b) genererer tilfeldig heltall i
- Tilfeldig() gir uniformt tilfeldig tall i
For reproduserbare resultater kan man sette seed med random.seed(42) i Python.
Mer presist: La være uavhengige stokastiske variabler med samme fordeling og forventningsverdi . Da gjelder:
I praksis betyr dette:
- Den relative frekvensen av en hendelse nærmer seg den teoretiske sannsynligheten
- Gjennomsnittlig gevinst i et spill nærmer seg forventningsverdien
- Estimatene fra simulering blir bedre (med lavere standardfeil) for større
Standardfeil for estimat:
For er standardfeilen ca. 0,01. For er den ca. 0,001.
Advarsel: Store talls lov sier ikke at det vil «jevne seg ut» på kort sikt (gamblerfeilslutning). Hvert enkelt forsøk er fortsatt helt tilfeldig.
Bruk Monte Carlo-simulering til å estimere arealet av en sirkel med radius 1 ved å bruke tilfeldige punkter i kvadratet .
Dermed er .
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}")Kjøring gir for eksempel:
Standardfeilen er , som stemmer med avviket fra eksakt .
Simuler 5000 myntkast og vis grafisk hvordan andelen kron nærmer seg 0,5. Forklar hva grafen illustrerer om konvergensen av estimater.
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()Tolkning: Grafen viser at andelen kron svinger mye i starten (stor usikkerhet for få kast), men gradvis stabiliserer seg rundt etter noen tusen kast. Svingningene avtar i takt med - dette er store talls lov i praksis.
Løs oppgavene:
Skriv et Python-program som simulerer 10 000 kast med en vanlig seksidet terning og estimerer sannsynligheten for å få 6. Sammenlign med den teoretiske verdien.
Forklar hva som menes med pseudotilfeldige tall og hvorfor de er tilfredsstillende for praktisk bruk i statistikk.
Løs oppgavene:
I en gruppe på 30 personer, hva er sannsynligheten for at minst to har bursdag på samme dag? Estimer svaret med Monte Carlo-simulering ( gjentagelser). (Anta 365 dager per år.)
Kjøres simuleringen med gjentagelser versus gjentagelser, hva forventer du å se? Hva sier store talls lov om forskjellen i nøyaktighet?
Løs oppgavene:
To terninger kastes og produktet beregnes. Bruk simulering () til å estimere og .
Bruk Python til å tegne et histogram over fordelingen til basert på 100 000 simuleringer. Beskriv formen på fordelingen. Er den symmetrisk?
Forklar sammenhengen mellom store talls lov og sentral grenseverdisetningen. Hva sier sentral grenseverdisetningen om fordelingen til for store ?
Oppsummering
Monte Carlo-simulering:
- Estimer
- Standardfeil for estimatet:
- Typisk brukes for god presisjon
Store talls lov:
- når
- Gjelder for alle fordelinger med endelig forventningsverdi
- Forklarer hvorfor simulering fungerer
Python-verktøy: random.random(), random.randint(), random.choice(), random.seed()
GeoGebra-verktøy: TilfeldigMellom(), Tilfeldig() og regnearket for simulering
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.