Monte-Carlo Methode

Werbung
Datenanalyse
(PHY231)
Herbstsemester 2016
Olaf Steinkamp
36-J-22
[email protected]
044 63 55763
Vorlesungsprogramm
●
●
●
●
●
●
●
●
Einführung, Messunsicherheiten, Darstellung von Messdaten
Grundbegriffe der Wahrscheinlichkeitsrechnung und Statistik
- Mittelwert, Standardabweichung, Kovarianz und Korrelation
Fehlerfortpflanzungsgesetz
Wahrscheinlichkeitsverteilungen
- diskrete Verteilungen, kontinuierliche Verteilungen
- zentraler Grenzwertsatz
Monte-Carlo Methode
Wahrscheinlichkeitsverteilungen II
- Faltung zweier Verteilungen
- Verteilungen zweier Variablen
Stichproben und Schätzfunktionen
- Maximum-Likelihood Methode
- Methode der kleinsten Quadrate
Interpretation von Messergebnissen
- Konfidenzintervalle, Testen von Hypothesen
Datenanalyse HS16
Monte-Carlo Methode (2)
Beispielprogramme im
Verzeichnis
/disk/puma/da/vorl/mc
O. Steinkamp
“Monte-Carlo” Simulation
Erzeugung von “Pseudozufallszahlen” mittels Computeralgorithmen
●
zur Simulation stochastischer Prozesse
●
●
z.B. radioaktiver Zerfall, Messfehler …
zur numerischen Lösung komplexer Prozesse
●
z.B. komplizierte Fehlerfortpflanzung
Bereits mehrmals in Vorlesungsbeispielen genutzt
●
Kopf oder Zahl: “Münzen werfen” mit dem Computer
●
“Messfehler”: gaußverteilte Abweichungen vom wahren Wert
Datenanalyse HS16
Monte-Carlo Methode (3)
O. Steinkamp
“Monte-Carlo” Simulation
Teilchenphysik: detaillierte Simulation kompletter Experimente
●
●
●
Planungsphase:
- Optimierung des Experimentaufbaus
Vorbereitungsphase:
- Entwicklung von Analyse-Algorithmen
Datennahme/Auswertung:
- Verständnis der gemachten Beobachtungen
Simulation des Zerfalls eines
schwarzen Lochs in ATLAS am LHC
Simulation verschiedenster physikalischer Prozesse statistischer Natur
●
Anzahl, Art, Richtung, Impuls der bei einer Kollision erzeugten Teilchen
●
Zerfall instabiler Teilchen
●
Wechselwirkung der Teilchen im Detektormaterial (Energieverlust, Streuung)
●
Signalerzeugung im Detektor, Rauschen der Ausleseelektronik
●
Messunsicherheiten: zusätzliches “verschmieren” simulierter oder
rekonstruierter Grössen (z.B. addiere Abweichungen gemäß Gaussverteilung)
Datenanalyse HS16
Monte-Carlo Methode (4)
O. Steinkamp
Erzeugen gleichverteilter Zufallszahlen
Häufig verwendeter Algorithmus
x i +1 = (a ⋅ x i + c) mod m
●
a, c, m
x0
: ganzzahlige Konstanten
: ganzzahliger Startwert
erzeugt bei guter Wahl von a, c und m eine zwischen 1 und m gleichverteilte
Zahlenfolge
● gute Werte sind z.B. a = 7 5 = 16'807, c = 0, m = 231-1 = 2'147'483'647
● nicht so gute Werte sind z.B. a = 1, c = 0, m = 2
●
xi /m ergibt eine zwischen 0 und 1 gleichverteilte Zahlenfolge
●
aufgepasst: gleicher Startwert x0 ergibt die gleiche Zahlenfolge
●
●
●
Wiederholung vermeiden: letzten Wert einer erzeugten Zahlenfolge merken, als
Startwert für die nächste Zahlenfolge benutzen (machen Software-Pakete intern)
Reproduzierbarkeit bei gleichem Startwert kann aber auch nützlich sein
Erzeugung wirklich zufälliger Zufallszahlen: z.B. Rauschsignal eines Widerstands
pylab Funktion random.rand erzeugt (Pseudo-)zufallszahlen
die zwischen 0 und 1 gleichverteilt sind
Datenanalyse HS16
Monte-Carlo Methode (5)
O. Steinkamp
Erzeugung einer Gaußverteilung
Benutze zentralen Grenzwertsatz (siehe letzte Woche)
●
●
die Summe vieler unabhängiger gleichverteilter Zufallszahlen nähert sich
einer Gaußverteilung an
nur für Gaußverteilung geeignet und ineffizient (für jede Zufallszahl der
Gaussverteilung müssen viele gleichverteilte Zufallszahlen erzeugt werden)
Datenanalyse HS16
Monte-Carlo Methode (6)
O. Steinkamp
“Hit-and-miss” Methode
Erzeuge Zufallszahlen x mit a≤x≤b gemäß Wahrscheinlichkeitsdichte p(x)
●
bestimme den maximalen Wert pmax , den
p(x) über das Intervall [a,b] annimmt
●
pmax →
erzeuge voneinander unabhängige
Zufallszahlenpaare ( xi , yi )
●
xi gleichverteilt zwischen a und b,
●
yi gleichverteilt zwischen 0 und pmax
●
akzeptiere xi wenn yi ≤ p(xi)
●
verwerfe xi wenn yi > p(xi)
0→
a
b
die akzeptierten Zahlen xi
sind gemäß p(x) verteilt
●
funktioniert für beliebige Verteilungen p(x),
Effizienz hängt von der Form von p(x) ab
Datenanalyse HS16
Monte-Carlo Methode (7)
O. Steinkamp
Invertieren der Verteilungsfunktion
Erzeuge zwischen 0 und 1 gleichverteilte Zufallszahlen ui , führe
Variablentransformation u → x aus, so dass x gemäß p(x) verteilt ist
●
kumulative Verteilungsfunktion für p(x)
x
P (x ) =
●
∫
−∞
0 ≤ P (x ) ≤ 1
p ( x ' ) dx '
Wahrscheinlichkeitsdichte und kumulative Verteilungsfunktion für u
u
g (u) = 1
G (u ) =
⇒
∫ g (u ' ) du '
= u
0
●
Erhaltung der Wahrscheinlichkeit bei der Variablentransformation
p ( x ) dx = g (u ) du
P (x) =
⇒
⇒
●
∫ p ( x ' ) dx '
=
∫ g (u ' ) du '
= u
−1
x i = P (ui ) ist gemäß p(x) verteilt
sehr effizient und funktioniert für alle p(x), für die P(x) umkehrbar ist
Datenanalyse HS16
Monte-Carlo Methode (8)
O. Steinkamp
Beispiel Gleichverteilung
p(x)
g(u)
1
1
(b-a)
0
●
1
0
u
1
b−a
f ür
x
a ≤ x ≤ b
kumulative Verteilungsfunktion
x
P (x ) =
∫ p ( x ' )dx =
a
●
b
gewünschte Wahrscheinlichkeitsdichte
p(x) =
●
a
1
⋅( x −a) ≡ u
b−a
erzeuge ui gleichverteilt zwischen 0 und 1
⇒
x i = P −1 (ui ) = (b − a)⋅u i + a
sind gleichverteilt zwischen a und b
Datenanalyse HS16
Monte-Carlo Methode (9)
O. Steinkamp
Beispiel Gleichverteilung
p(x)
g(u)
1
Erhaltung der Wahrscheinlichkeit:
→ Flächen gleich groß
1
(b-a)
0
●
1
0
u
1
b−a
f ür
x
a ≤ x ≤ b
kumulative Verteilungsfunktion
x
P (x ) =
∫ p ( x ' )dx =
a
●
b
gewünschte Wahrscheinlichkeitsdichte
p(x) =
●
a
1
⋅( x −a) ≡ u
b−a
erzeuge ui gleichverteilt zwischen 0 und 1
⇒
x i = P −1 (ui ) = (b − a)⋅u i + a
sind gleichverteilt zwischen a und b
Datenanalyse HS16
Monte-Carlo Methode (10)
O. Steinkamp
Beispiel Gaußverteilung
P(x)
u = P(x)
g(u)
●
p(x)
kumulative Verteilungsfunktion
der Gaußverteilung (μ=0, σ=1)
P ( x ) = (1/ 2)⋅ ( 1 + erf ( x / √ 2 ) )
●
erzeuge ui gleichverteilt
⇒
−1
−1
x i = P (ui ) = √ 2⋅erf ( 2 u i −1 )
x = P-1(u)
sind gemäß Gaußverteilung mit μ=0 und σ=1 verteilt
Datenanalyse HS16
Monte-Carlo Methode (11)
O. Steinkamp
Beispiel Exponentialverteilung
●
Wahrscheinlichkeitsdichte:
p ( x ) = λ ⋅e
●
kumulative Verteilungsfunktion:
P (x ) =
●
x
∫0
λ ⋅e−λ x ' dx ' = 1−e−λ x ≡ u
Umkehrfunktion
x = −
●
−λ x
ln (1−u )
λ
#!/usr/bin/env python
exp_invert.py
from pylab import *
import scipy.stats as stats
hold(True)
#
# erzeuge exponentialverteilte Zufallszahlen
#
lambda = 0.56
n
= 10000
x
= -log(rand(n)) / lambda
#
# histogrammiere und zeichne wahre Kurve
#
nbins
= 30 ; xmin = 0.0 ; xmax = 6.0
hist(x,,nbins,(xmin,xmax))
#
# zeichne wahre Kurve
#
xf
= frange(xmin,xmax,0.02)
plot(xf,n*bin*stats.expon.pdf(xf,0,lambda))
erzeuge ui gleichverteilt zwischen 0 und 1
⇒
ln u i
xi = − λ
sind gemäss Exponentialfunktion verteilt
Datenanalyse HS16
Monte-Carlo Methode (12)
O. Steinkamp
Python: from scipy import stats
●
stats.binom.rvs
- Binomialverteilung
●
stats.poisson.rvs
- Poissonverteilung
●
stats.cauchy.rvs
- Breit-Wigner Verteilung (“Cauchyverteilung”)
●
stats.chi2.rvs
- ²-Verteilung
●
stats.expon.rvs
- Exponentialverteilung
●
stats.norm.rvs
- Gaußverteilung (“normal distribution”)
●
stats.uniform.rvs
- Gleichverteilung (“uniform distribution”)
… und viele mehr
siehe docs.scipy.org/doc/scipy/reference/stats.html
Datenanalyse HS16
Monte-Carlo Methode (13)
O. Steinkamp
Beispiel: gaußverteilte Messfehler
Simuliere histogrammierten Messdaten mit statistischer Unsicherheit
●
statistische Unsicherheit auf der Anzahl Einträge ni in einem Intervall des
Histogramms folgt Poissonverteilung mit Erwartungswert  ni
●
ni nicht zu klein  benutze gaußsche Näherung (zentraler Grenzwertsatz)
●
simuliere Unsicherheit auf ni durch addieren gaußverteilter Zufallszahlen
mit Erwartungswert 0 und Standardabweichung √ni
●
Beispiel: Breit-Wigner mit quadratisch fallendem Untergrund
Datenanalyse HS16
#!/usr/bin/env python
bwquad.py
from pylab import *
import scipy.stats as stats
hold(True)
#
# zeichne Breit-Wigner mit quadratisch fallendem Untergrund
#
a = [50,-1.5,0.01,400,19,2.5]
x = frange (0,40,0.1)
y = a[0]+a[1]*x+a[2]*x*x+a[3]*stats.cauchy(a[4],a[5]).pdf(x)
plot(x,y)
#
# simuliere Messpunkte mit gaussverteilten Abweichungen
#
x = frange(1,39,2)
y = a[0]+a[1]*x+a[2]*x*x+a[3]*stats.cauchy(a[4],a[5]).pdf(x)
y = y + stats.norm(0,sqrt(y)).rvs(size(y));
errorbar(x,y,sqrt(y),fmt='ro')
Monte-Carlo Methode (14)
O. Steinkamp
Beispiel: Bestimmung von π
Ansatz analog zur “hit-and-miss” Methode
●
erzeuge N Zufallszahlenpaare (xi,yi)
●
xi und yi jeweils gleichverteilt zwischen 0 und 1
●
xi und yi statistisch unabhängig voneinander
●
●
Paare (xi,yi) sind gleichverteilt über Quadrat
mit Kantenlänge 1 und Fläche = 1
bestimme Anzahl NK der Zahlenpaare mit
2
i
x +y
●
●
2
i
< 1
liegen in ¼-Kreis mit Radius 1 und Fläche = /4
Gesetz grosser Zahlen:
N → ∞
⇒
Datenanalyse HS16
Nk
π /4
→
N
1
⇔
4 Nk
→ π
N
Monte-Carlo Methode (15)
calpi.py
#!/usr/bin/env python
from pylab import *
import scipy.stats as stats
#
# erzeuge n Zufallszahlenpaare
#
n
= 5000
x
= stats.uniform.rvs(size=n)
y
= stats.uniform.rvs(size=n)
#
# zaehle Anzahl Paare in ¼-Kreis
# und berechne pi
#
acc = x*x+y*y<=1
mcpi = 4.0*sum(acc)/n
O. Steinkamp
Unsicherheit auf der Bestimmung von π
Unsicherheit mit Fehlerfortpflanzung
●
viele Experimente mit jeweils N Zahlenpaaren
⇒ Nk binomialverteilt mit p = /4
σ (N k ) = √ N ⋅ p ⋅(1−p) =
●
π
4
)
Fehlerfortpflanzung:
σ (π) =
●
√
N ⋅ π4 ⋅ (1 −
| |
π
4
⋅σ (N K ) =
⋅σ (N K ) =
 NK
N
√
π ⋅(4−π )
N
fur N = 1000 :
calpi2.py
#!/usr/bin/env python
from pylab import *
import scipy.stats as stats
#
# erzeuge nexp mal n Zahlenpaare
#
n
= 1000
nexp = 100
x
= rand(nexp,n)
y
= rand(nexp,n)
#
# zaehle Anzahl Paare in ¼-Kreis
# und berechne pi nexp mal
#
acc = x*x+y*y<=1
mcpi = 4.0*sum(acc,1)/n
#
# Mittelwert std der Resultate
#
mean(mcpi)
std(mcpi)
σ (π) = 0.052
Unsicherheit mit Simulation
●
simuliere 100 Experimente mit jeweils
N = 1000 Zahlenpaaren und berechne
Standardabweichung der Resultate
Datenanalyse HS16
Monte-Carlo Methode (16)
n = 1000, nexp = 100
mean = 3.140, std = 0.054
O. Steinkamp
Herunterladen