4.5 Simulering og stokastiske eksperimenter
Monte Carlo-simulering, Python og GeoGebra, store talls lov.
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 ()
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
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
- random.randint(a, b) gir eit tilfeldig heiltal mellom og (inklusiv)
- random.choice(liste) vel eit tilfeldig element frå ei liste
GeoGebra-kommandoar:
- TilfeldigMellom(a, b) genererer tilfeldig heiltal i
- Tilfeldig() gir uniformt tilfeldig tal i
For reproduserbare resultat kan ein setje seed med random.seed(42) i Python.
Meir presist: La vere uavhengige stokastiske variablar med same fordeling og forventningsverdi . Då gjeld:
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
Standardfeil for estimat:
For er standardfeilen ca. 0,01. For 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.
Bruk Monte Carlo-simulering til å estimere arealet av ein sirkel med radius 1 ved å bruke tilfeldige punkt 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}")Køyring gir til dømes:
Standardfeilen er , som stemmer med avviket frå eksakt .
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 etter nokre tusen kast. Svingingane avtek i takt med - dette er store tals lov i praksis.
Løys oppgåvene:
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.
Forklar kva som blir meint med pseudotilfeldige tal og kvifor dei er tilfredsstillande for praktisk bruk i statistikk.
Løys oppgåvene:
I ei gruppe på 30 personar, kva er sannsynet for at minst to har bursdag på same dag? Estimer svaret med Monte Carlo-simulering ( gjentakingar). (Anta 365 dagar per år.)
Blir simuleringa køyrt med gjentakingar versus gjentakingar, kva ventar du å sjå? Kva seier store tals lov om skilnaden i nøyaktigheit?
Løys oppgåvene:
To terningar blir kasta og produktet blir rekna ut. Bruk simulering () til å estimere og .
Bruk Python til å teikne eit histogram over fordelinga til basert på 100 000 simuleringar. Skildr forma på fordelinga. Er ho symmetrisk?
Forklar samanhengen mellom store tals lov og sentralgrenseverdisetninga. Kva seier sentralgrenseverdisetninga om fordelinga til for store ?
Oppsummering
Monte Carlo-simulering:
- Estimer
- Standardfeil for estimatet:
- Typisk blir brukt for god presisjon
Store tals lov:
- når
- 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
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.