Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner...

54
| | Dr. Hermann Lehner Departement Informatik, ETH Zürich 20.11.2017 Dr. Hermann Lehner 1 Matlab Zufall / Programmieren mit Matlab

Transcript of Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner...

Page 1: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Dr. Hermann LehnerDepartement Informatik, ETH Zürich

20.11.2017Dr. Hermann Lehner 1

MatlabZufall / Programmieren mit Matlab

Page 2: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 2

Zufall ist ein Wort ohne Sinn;nichts kann ohne Ursache existieren

-- Voltaire

?

Page 3: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

§ Zufällige Ereignisse sind unabhängig voneinander§ Zufällige Ereignisse sind gleichmässig verteilt§ Zufällige Ereignisse haben keine Ursache

20.11.2017Dr. Hermann Lehner 3

Was ist Zufall?

Page 4: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 4

Quellen zufälliger Ereignisse

Chaotische Systeme Quantenmechanische Effekte

Page 5: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 5

Chaotische Systeme

Lotto-Ziehung Globales Wetter

Page 6: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017 6

Quantenmechanische Effekte

Teilchen-Welle Dualismus

Alpha-Zerfall von Atomkernen

Dr. Hermann Lehner

Page 7: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Simulationen komplexer Vorgänge§ Physik (z.B. Molekulardynamik)§ Biochemie (z.B. Falten von Proteinen)§ Meteorologie (z.B. Wettervorhersage)§ Ökonomie (z.B. Aktienkurs-Vorhersagen)§ Politik (Wahl-Prognose Modelle)

Verschlüsselungsverfahren§ Erstellung sicherer Schlüssel§ Sichere Kommunikationsprotokolle

Mathematik§ Integration sehr komplexer Funktionen

Software-Engineering§ Random testing§ Image rendering

20.11.2017Dr. Hermann Lehner 7

Verwendung von Zufallsereignissen

Page 8: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Simulationen komplexer Vorgänge§ Physik (z.B. Molekulardynamik)§ Biochemie (z.B. Falten von Proteinen)§ Meteorologie (z.B. Wettervorhersage)§ Ökonomie (z.B. Aktienkurs-Vorhersagen)§ Politik (Wahl-Prognose Modelle)

Verschlüsselungsverfahren§ Erstellung sicherer Schlüssel§ Sichere Kommunikationsprotokolle

Mathematik§ Integration sehr komplexer Funktionen

Software-Engineering§ Random testing§ Image rendering

20.11.2017Dr. Hermann Lehner 8

Verwendung von Zufallsereignissen

Page 9: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Simulationen komplexer Vorgänge§ Physik (z.B. Molekulardynamik)§ Biochemie (z.B. Falten von Proteinen)§ Meteorologie (z.B. Wettervorhersage)§ Ökonomie (z.B. Aktienkurs-Vorhersagen)§ Politik (Wahl-Prognose Modelle)

Verschlüsselungsverfahren§ Erstellung sicherer Schlüssel§ Sichere Kommunikationsprotokolle

Mathematik§ Integration sehr komplexer Funktionen

Software-Engineering§ Random testing§ Image rendering

20.11.2017Dr. Hermann Lehner 9

Verwendung von Zufallsereignissen

Page 10: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Simulationen komplexer Vorgänge§ Physik (z.B. Molekulardynamik)§ Biochemie (z.B. Falten von Proteinen)§ Meteorologie (z.B. Wettervorhersage)§ Ökonomie (z.B. Aktienkurs-Vorhersagen)§ Politik (Wahl-Prognose Modelle)

Verschlüsselungsverfahren§ Erstellung sicherer Schlüssel§ Sichere Kommunikationsprotokolle

Mathematik§ Integration sehr komplexer Funktionen

Software-Engineering§ Random testing§ Image rendering

20.11.2017Dr. Hermann Lehner 10

Verwendung von Zufallsereignissen

nicht das:

Page 11: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 11

Simulation komplexer Vorgänge:Beispiel: Energy Balance Model

Page 12: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

§ Nicht analytisch zu lösen§ Simulation mit Hilfe von

mathematischen Modellen§ Verbesserung der Modelle aufgrund

der Simulation

Methode: Monte Carlo Simulation

20.11.2017Dr. Hermann Lehner 12

Simulation komplexer Vorgänge:Beispiel: Energy Balance Model

Page 13: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

§ Was ist die Wahrscheinlichkeit dass ein lösbares Deck gespielt wird?à Zähle Anzahl erfolgreiche/nicht-erfolgreiche Spiele

§ Je mehr Experimente desto genauer das Resultatà Das Gesetz der grossen Zahlen

20.11.2017Dr. Hermann Lehner 13

Monte Carlo Simulation

Stanislaw Ulam

Page 14: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 14

Beispiel einer Monte Carlo SimulationDas Galton-Brett

Page 15: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 15

Galton Brett und das Gesetz der grossen Zahlen10 Kugeln 100 Kugeln

1’000 Kugeln 100’000 Kugeln

Page 16: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 16

Normalverteilung

𝜑",$%(𝑥) =12𝜎.𝜋� 𝑒2

(32")%.$%

𝜇 Mittelwert𝜎2 Varianz𝜎 Standardabweichung

Page 17: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 17

Normalverteilung

𝜑",$%(𝑥) =12𝜎.𝜋� 𝑒2

(32")%.$%

𝜇 Mittelwert𝜎2 Varianz𝜎 Standardabweichung

Page 18: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 18

Galton Brett und das Gesetz der grossen Zahlen

Normalverteilung

Relative Häufigkeit der Messwerte

Relative Häufigkeit:

Page 19: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 19

Galton Brett und das Gesetz der grossen Zahlen

Gesetz der grossen Zahlen:

Normalverteilung

Relative Häufigkeit der Messwerte

Mit zunehmender Anzahl unabhängigerExperimente unter gleichbleibendenBedingungen stabilisiert sich die relative Häufigkeit der Messwerte um die theoretischenWahrscheinlichkeit.

𝑋6 =1𝑛8(𝑋9 − 𝜑",$%)6

9;<

𝑋9 − 𝜑",$%

lim6→A

𝑃 𝑋6 > 𝜀 = 0 𝜀 > 0

Page 20: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Generiert aufgrund Beobachtung echtzufälliger Ereignisse:

§ Zeitabstände des Alpha-Zerfalls von Atomen§ Varianz im atmosphärisches Rauschen

§ Rauschen von verpolten Dioden§ Zeitabstände zwischen Maus-Klicks§ Unregelmässigkeiten beim Tippen§ Zeitliche Abfolge ankommender Datenpackete

aus dem Internet§ …

Vorteile:§ Unabhängige Zahlenreihen§ Keine Periodizität§ Selbst mit beliebigem

Aufwand nicht vorhersehbar

20.11.2017Dr. Hermann Lehner 20

Echte Zufallszahlen

Nachteile§ Langsam§ Teuer (je nachdem)§ Nicht reproduzierbar

Page 21: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Berechnet mittels einemdeterministischen Algorithmus:

§ Initialisiert mit einem Anfangswert (Seed)§ Jede Zufallszahl in der Reihe wird aufgrund

der davor generierten Zufallszahl(en)berechnet

Vorteile:§ Schnell§ Erfordert kein Zugang zu

externen Systemen§ Reproduzierbar

20.11.2017Dr. Hermann Lehner 21

Pseudo Zufallszahlen

Nachteile§ Mit genügend Aufwand

vorhersehbar (ungeeignetzum Verschlüsseln)

§ Nicht immer genuegendUnabhaengig

Page 22: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

Echte Zufallszahlen Pseudo-Zufallszahlen

Simulationen ✔ ✔

Mathematische Applikationen ✔ ✔

Software Engineering ✘ ✔

Verschlüsselung ✔ ✘

20.11.2017Dr. Hermann Lehner 22

Anwendungsbereiche von Zufallszahlen

(zu langsam)

(zu langsam)

(nicht reproduzierbar)

(vorhersehbar)

Page 23: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 23

Echt zufällig oder generiert?

8, 1, 7, 5, 15 ,15 ,10 ,6 ,12 ,11 ,12 ,2 ,14 ,14 ,4 , …

Page 24: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 24

Ja, echte Zufallszahlen

Page 25: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 25

Echt zufällig oder generiert?

1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, …

Page 26: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 26

Der Lineare Kongruenzgenerator

𝑟9 = (𝑎 ∗ 𝑟92< + 𝑐)𝑚𝑜𝑑𝑚

Page 27: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 27

Der Lineare Kongruenzgenerator

𝑟9 = (𝟓 ∗ 𝑟92< + 𝟏)𝑚𝑜𝑑𝟏𝟔

1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, 1, 6, 15, ...

1 = (𝟓 ∗ 0 + 𝟏)𝑚𝑜𝑑𝟏𝟔6 = (𝟓 ∗ 1 + 𝟏)𝑚𝑜𝑑𝟏𝟔15 = (𝟓 ∗ 6 + 𝟏)𝑚𝑜𝑑𝟏𝟔12 = (𝟓 ∗ 15 + 𝟏)𝑚𝑜𝑑𝟏𝟔

Page 28: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 28

Der Lineare Kongruenzgenerator

𝑟9 = 65539 ∗ 𝑟92< + 𝟎 𝑚𝑜𝑑𝟐𝟑𝟐

“RANDU”

- Extrem schnell- Früher sehr verbreitet

- Problem:- Korrelation zwischen drei aufeinanderfolgenden Punkten

Page 29: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 29

Implementierung eines LCG in Matlab

Erst mal: Wie funktioniert denn der ‘interne’ Random Generator?

Page 30: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 30

Implementierung eines LCG in Matlab

Page 31: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 31

Implementierung eines LCG in Matlab

r = mod(seed, m);

r = mod(a*r + c, m);

disp(r/m)

r = mod(a*r + c, m);

disp(r/m)

...

𝑟9 = (𝑎 ∗ 𝑟92< + 𝑐)𝑚𝑜𝑑𝑚

Page 32: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 32

Implementierung eines LCG in Matlab𝑟9 = (𝑎 ∗ 𝑟92< + 𝑐)𝑚𝑜𝑑𝑚

r = mod(seed, m);

for row = 1:rowsfor col = 1:columns

r = mod(a*r + c, m);Result(row, col) = r/m;

endend

Page 33: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 33

Implementierung eines LCG in Matlab𝑟9 = (𝑎 ∗ 𝑟92< + 𝑐)𝑚𝑜𝑑𝑚

r = mod(seed, m);

Result = zeros(rows, columns);

for row = 1:rowsfor col = 1:columns

r = mod(a*r + c, m);Result(row, col) = r/m;

endend

Page 34: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 34

Implementierung eines LCG in Matlab

function Result = lcg(rows, columns, seed, a, c, m)

r = mod(seed, m);

Result = zeros(rows, columns);

for row = 1:rowsfor col = 1:columns

r = mod(a*r + c, m);Result(row, col) = r/m;

endend

end

Page 35: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 35

Implementierung eines LCG in Matlab

function Result = lcg(rows, columns, seed, a, c, m)

r = mod(seed, m);

Result = zeros(rows, columns);

for row = 1:rowsfor col = 1:columns

r = mod(a*r + c, m);Result(row, col) = r/m;

endend

end

Page 36: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 36

Implementierung eines LCG in Matlabfunction Result = lcg(rows, columns, seed, a, c, m)

if ~exist('seed', 'var')seed = now;

end

r = mod(seed, m);

Result = zeros(rows, columns);

for row = 1:rowsfor col = 1:columns

r = mod(a*r + c, m);Result(row, col) = r/m;

endend

end

Page 37: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 37

Implementierung eines LCG in Matlabfunction Result = lcg(rows, columns, seed, config)

if ~exist('seed', 'var')seed = now;

end

if exist('config','var')a = config(1);c = config(2);m = config(3);

else% Default: RANDUa = 65539;c = 0;m = 2^32;

end

...

Page 38: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 38

Implementierung eines LCG in Matlab

Wie sieht’s aus bei fehlerhaften Eingaben?

Page 39: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 39

Implementierung eines LCG in Matlab...

if exist('config','var')dim = size(config);if (dim(2) ~= 3)

error('Die Konfiguration muss eine Matrix der Form [ a c m ] sein.') end

a = config(1);c = config(2);m = config(3);

else...

Page 40: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 40

Implementierung eines LCG in Matlab

Hilfe für den Anwender?

Page 41: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 41

Implementierung eines LCG in Matlabfunction Result = lcg(rows, columns, seed, config)% Erstellt eine Matrix mit Zufallszahlen mittels dem LCG Algorithmus.% Wenn kein seed angegeben wird, wird die aktuelle Uhrzeit benuetzt.% % Erforderliche Parameter% - rows: Anzahl Reihen in der Matrix% - columns: Anzahl Kolonnen in der Matrix% % Optionale Parameter% - seed: Startwert fuer die Zufallszahlen-Reihe.% Default: now% - config: Konfiguration des LCG in der Form [ a c m ]% Default: [ 65339, 0, 2^32 ]

if ~exist('seed', 'var')seed = now;

end

...

Page 42: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 42

Implementierung eines LCG in Matlab

Dok

umen

tatio

n u

nd

Para

met

er P

rüfe

nFu

nktio

nalit

ät

Page 43: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 43

Echt zufällig oder generiert?

1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, …

Page 44: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 44

Das Geburtstags-ProblemDie Klasse meiner Tochter hat 23 Kinder (und zwei Lehrpersonen)Wie gross ist die Wahrscheinlichkeit, dass zwei oder mehr Kinder am gleichen Tag Geburtstag haben?

0-2%2-5%

5-10%10-20%20-40%40-60%

> 60%

Page 45: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 45

Ein kurzer Ausflug in die Statistik

365365

Viel einfacher zu berechnen:

Wie gross ist die Wahrscheinlichkeit, dass jedes Kind einen unterschiedlichen Tag Geburtstag hat.

Page 46: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 46

Ein kurzer Ausflug in die Statistik

365365

X 364365

Viel einfacher zu berechnen:

Wie gross ist die Wahrscheinlichkeit, dass jedes Kind einen unterschiedlichen Tag Geburtstag hat.

Page 47: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 47

Ein kurzer Ausflug in die Statistik

365365

X 364365

X363365

X ⋯ X343365

.[\]^_]

Viel einfacher zu berechnen:

Wie gross ist die Wahrscheinlichkeit, dass jedes Kind einen unterschiedlichen Tag Geburtstag hat.

Page 48: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 48

Ein kurzer Ausflug in die StatistikDaraus folgt...

Die Wahrscheinlichkeit für zwei oder mehr Kinder mit dem gleichen Geburtstag ist also 100% minus die berechnete Wahrscheinlichkeit:

1 −365365

X 364365

X363365

X ⋯ X343365

= 50.7%

Page 49: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

||

§ Wir wollen diese Berechnung in Matlab machen§ Nicht nur für 23 Kinder, sondern für alle Gruppen-Grössen

von 1 bis n (z.B. 70)§ Die Wahrscheinlichkeit grafisch darstellen

20.11.2017Dr. Hermann Lehner 49

Berechnung der Wahrscheinlichkeit in Matlab

Page 50: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 50

Berechnung der Wahrscheinlichkeit in Matlab% Anzahl Tage im Jahrd = 365;

% Was soll die groesste Gruppe sein, welche betrachtet wirdmax_people = 70;

N = 1 : max_people;

% Initialisierung aller Wahrscheinlichkeiten auf 1 (neutrales Element der% Multiplikation)P = ones(1, max_people);

% Klein n geht also von 1 .. max_people.% Fuer jedes n berechnen wir die gesuchte Wahrscheinlichkeit.for n = N

% Berechnung der Reihe 365/365 * 364/365 * ... * (365 - n + 1)/365for i = 1 : n

P(n) = P(n) * (d – i + 1) / d;end% Das Resultat ist die inverse WahrscheinlichkeitP(n) = 1 - P(n);

end

plot(P)grid onxlabel('Anzahl Personen', 'FontSize', 20)ylabel('Wahrscheinlichkeit', 'FontSize', 20)

Page 51: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 51

Berechnung der Wahrscheinlichkeit in Matlab

Page 52: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 52

Kontrolle ist besser als Vertrauen

Wie können wir kontrollieren, ob das wirklich stimmt?

à Sehr sehr viele Klassen besuchen und die Resultate auswerten

Page 53: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 53

Kontrolle ist besser als Vertrauen

Wie können wir kontrollieren, ob das wirklich stimmt?

à Monte Carlo Simulation!

Page 54: Matlab · 2018-08-24 · Dr. Hermann Lehner Departement Informatik, ETH Zürich Dr. Hermann Lehner 20.11.2017 1 Matlab Zufall / Programmieren mit Matlab

|| 20.11.2017Dr. Hermann Lehner 54

Monte Carlo Simulation in Matlabd = 365;max_people = 70;at_least = 2;experiments = 100;

% Simuliere Gruppen mit zufaelligen Geburtstagen und zaehle Haeufigkeit pro TagN = 1 : max_people;P_sim = zeros(1,max_people);for n = N

successful = 0;for i = 1:experiments

BirthdayCount = zeros(1, d);Birthdays = randi([1, 365],1,n);for birthday = Birthdays

BirthdayCount(birthday) = BirthdayCount(birthday) + 1;endmaximum = max(BirthdayCount);if maximum >= at_least

successful = successful + 1;end

endP_sim(n) = successful/experiments;

end

% Zeichne die einzelnen Messpunkte in die Grafik mit der theoretischen Wahrscheinlichkeitplot(P_sim, ':.','MarkerSize',10)axis([0 max_people 0 1])grid onxlabel('Anzahl Personen','FontSize',20)ylabel('Wahrscheinlichkeit','FontSize',20)