Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1424to1428
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Simulation Münzwurf

Simulation Münzwurf
19.05.2015 14:27:49
Brigitte
Hallo,
gegeben eine ideale Münze (p=1/2), Kodierung: 0 = Kopf, 1 = Zahl
Beim dreimaligen Werfen einer Münze besteht die Ergebnismenge aus
insgesamt 8 3-Tupeln mit den Elementarereignissen
Omega = { (000), (001), (010), (100), (110), (101), (011), (111) }
Jedes Tripel ist mit p = 1/8 gleichwahrscheinlich.
Wenn ich das unter Excel (per VBA) simuliere, erhalte ich ein
signifikant abweichendes Ergebnis von der Erwartung. Die Tripel
(000) und (111) erscheinen rund in 1/5 der Fälle und nicht - wie erwartet -
mit einer relativen Häufigkeit von rund 1/8.
Ich habe das Programm viele Male laufen lassen und ausgezählt.
Die verwendete Funktion "Randbetween" arbeitet korrekt.
Das Ergebnis ist dennoch abweichend von der Erwartung.
Ich versteh's nicht.
Sieht jemand wo das Problem liegt?
Oder hab ich einen fundamentalen Denkfehler?
Danke und Grüße
Brigitte
- -
Hier das kurze Simulationsprogramm in VBA.
Private Sub Simulation()
Randomize                       ' Zufallsgenerator starten
Const N As Long = 10000         ' Anzahl 3-Würfe
Dim bin000 As Long, bin100 As Long, bin010 As Long
Dim bin001 As Long, bin110 As Long, bin101 As Long
Dim bin011 As Long, bin111 As Long
Dim i As Long
Dim A(1 To N, 1 To 3) As Long   ' Array. Speichert die Tripel
For i = 1 To N
A(i, 1) = Application.WorksheetFunction.RandBetween(0, 1)
A(i, 2) = Application.WorksheetFunction.RandBetween(0, 1)
A(i, 3) = Application.WorksheetFunction.RandBetween(0, 1)
Next i
For i = 1 To N                  ' Auszählen der geworfenen Tripel
If (A(i, 1) = 0) And (A(i, 2) = 0) And (A(i, 3) = 0) Then bin000 = bin000 + 1
If (A(i, 1) = 0) And (A(i, 2) = 0) And (A(i, 3) = 1) Then bin001 = bin001 + 1
If (A(i, 1) = 0) And (A(i, 2) = 1) And (A(i, 3) = 0) Then bin010 = bin010 + 1
If (A(i, 1) = 0) And (A(i, 2) = 1) And (A(i, 3) = 1) Then bin011 = bin011 + 1
If (A(i, 1) = 1) And (A(i, 2) = 0) And (A(i, 3) = 0) Then bin100 = bin100 + 1
If (A(i, 1) = 1) And (A(i, 2) = 0) And (A(i, 3) = 1) Then bin101 = bin101 + 1
If (A(i, 1) = 1) And (A(i, 2) = 1) And (A(i, 3) = 0) Then bin110 = bin110 + 1
If (A(i, 1) = 1) And (A(i, 2) = 1) And (A(i, 3) = 1) Then bin111 = bin111 + 1
Next i
Debug.Print "000: ", bin000, bin000 / N
Debug.Print "001: ", bin001, bin001 / N
Debug.Print "010: ", bin010, bin010 / N
Debug.Print "011: ", bin011, bin011 / N
Debug.Print "100: ", bin100, bin100 / N
Debug.Print "101: ", bin101, bin101 / N
Debug.Print "110: ", bin110, bin110 / N
Debug.Print "111: ", bin111, bin111 / N
Debug.Print "--------------------------------------"
Debug.Print "Gesamt: ", bin000 + bin100 + bin010 + bin001 + bin110 + bin101 + bin011 + bin111, _
_
1
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Simulation Münzwurf
19.05.2015 14:55:21
Matthias5
Hallo Brigitte,
ich habe es gerade getestet und keine Ungewöhnlichkeiten festgestellt.
Bei 1000 Versuchen gibt es noch etwas größere Schwankungen, bei 10000 ist die Verteilung schon sehr eng und bei 100000:
0,12475
0,12526
0,12584
0,12356
0,12427
0,12576
0,12427
0,12629
Sieht doch gut aus, oder?
Viele Grüße,
Matthias

AW: Simulation Münzwurf
19.05.2015 15:22:36
UweD
Hallo
bei mir war die Verteilung bei 000 und 111 ungewöhnlich hier 2 Beispiele mit je 100.000 Läufen
000 	0,06391	0,07362
001 	0,15874	0,15963
010 	0,12137	0,10979
011 	0,14986	0,15568
100 	0,15658	0,15585
101 	0,1189	0,10642
110 	0,16802	0,16686
111 	0,06262	0,07215

Ich hab die Zufallermittlung mal so abgeändert.
Dann passt es besser
0,12525
0,12471
0,12677
0,1235
0,12273
0,12666
0,12507
0,12531
  For i = 1 To N
A(i, 1) = Round((Rnd), 0)
A(i, 2) = Round((Rnd), 0)
A(i, 3) = Round((Rnd), 0)

Anzeige
AW: Simulation Münzwurf
19.05.2015 16:07:28
Brigitte
Ganz herzlichen Dank für die Antworten.
Ich dachte schon, ich spinne ...
Es liegt offensichtlich doch an der Funktion "RandBetween".
Wenn ich diese verwende, sind die relativen häufigkeiten für die
Tripel (000) und (111) durchgängig extrem abweichend (immer über 25% auf meinem Rechner).
Wenn ich stattdessen über Round((Rnd), 0) gehe, stimmt alles sehr gut.
Warum die extremen Abweichungen bei "RandBetween" auftreten (reproduzierbar auf meinem Rechner),
ist mir unklar.
Danke und Grüße
Brigitte

Kann deine Meinung nicht nachvollziehen, ...
19.05.2015 16:08:11
Luc:-?
…Brigitte,
dein Pgm ist nur etwas umständlich. Ich erhalte folgd Ergebnisse:
 GHIJ
1000:15920,1592 
2001:13100,131 
3010:10490,1049 
4011:10930,1093 
5100:11400,114 
6101:11010,1101 
7110:12890,1289 
8111:14260,1426 
9------------------------------------------------------------
10Gesamt:100001 
11    
12000:13330,1333 
13001:12650,1265 
14010:11890,1189 
15011:12260,1226 
16100:12590,1259 
17101:11880,1188 
18110:11800,118 
19111:13600,136 
20------------------------------------------------------------
21Gesamt:100001 
22    
23000:16840,1684 
24001:12120,1212 
25010:8960,0896 
26011:12680,1268 
27100:11430,1143 
28101:9470,0947 
29110:11980,1198 
30111:16520,1652 
31------------------------------------------------------------
32Gesamt:100001 
33    
34000:12810,1281 
35001:11470,1147 
36010:14090,1409 
37011:11630,1163 
38100:12870,1287 
39101:13020,1302 
40110:11780,1178 
41111:12330,1233 
42------------------------------------------------------------
43Gesamt:100001 
44    
45000:17190,17190,0469
46001:12290,1229-0,0021
47010:8630,0863-0,0387
48011:12500,1250
49100:12030,1203-0,0047
50101:8320,0832-0,0418
51110:12080,1208-0,0042
52111:16960,16960,0446
53------------------------------------------------------------
54Gesamt:100001 
55    
56000:13550,13550,0105
57001:12920,12920,0042
58010:11580,1158-0,0092
59011:11810,1181-0,0069
60100:12100,121-0,004
61101:11370,1137-0,0113
62110:13000,130,005
63111:13670,13670,0117
64------------------------------------------------------------
65Gesamt:100001 
66    
67000:13200,1320,007
68001:12300,123-0,002
69010:11730,1173-0,0077
70011:11700,117-0,008
71100:12860,12860,0036
72101:11660,1166-0,0084
73110:12340,1234-0,0016
74111:14210,14210,0171
75------------------------------------------------------------
76Gesamt:100001 
77    
78000:138470,138470,01347
79001:124650,12465-0,00035
80010:114140,11414-0,01086
81011:120630,12063-0,00437
82100:123630,12363-0,00137
83101:119080,11908-0,00592
84110:124840,12484-0,00016
85111:134560,134560,00956
86------------------------------------------------------------
87Gesamt:1000001 
88    
89000:142510,142510,01751
90001:123340,12334-0,00166
91010:112510,11251-0,01249
92011:123450,12345-0,00155
93100:121870,12187-0,00313
94101:112770,11277-0,01223
95110:123590,12359-0,00141
96111:139960,139960,01496
97------------------------------------------------------------
98Gesamt:1000001 
99    
100000:120990,12099-0,00401
101001:133630,133630,00863
102010:121780,12178-0,00322
103011:124570,12457-0,00043
104100:121370,12137-0,00363
105101:122810,12281-0,00219
106110:130540,130540,00554
107111:124310,12431-0,00069
108------------------------------------------------------------
109Gesamt:1000001 
110    
111000:1374170,1374170,012417
112001:1240550,124055-0,000945
113010:1188900,11889-0,00611
114011:1206990,120699-0,004301
115100:1224880,122488-0,002512
116101:1189260,118926-0,006074
117110:1233170,123317-0,001683
118111:1342080,1342080,009208
119------------------------------------------------------------
120Gesamt:10000001 
121    
122001:12660,12660,0016
123010:11460,1146-0,0104
124011:12390,1239-0,0011
125100:12110,1211-0,0039
126101:10860,1086-0,0164
127110:12270,1227-0,0023
128111:14300,1430,018
129------------------------------------------------------------
130Gesamt:100001 

Wie die später hinzugefügte Spalte zeigt, sind die Abweichungen von 1/8 normal und nirgendwo entsprächen sie 1/5.
Der 1.Test lief mit deinem unveränderten Pgm, danach habe ich es schrittweise rationalisiert:
Private Sub Simulation()
Const N As Long = 10000, t As Long = 3, W As Double = 0.125 ' Anzahl 3-Würfe
Dim binV(7) As Long, i As Long, j As Long, _
A(1 To N, 1 To t) As Long                   ' Array. Speichert die Tripel
Randomize                                       ' Zufallsgenerator starten
With WorksheetFunction
For i = 1 To N
For j = 1 To t
A(i, j) = .RandBetween(0, 1)
Next j
Next i
For i = 1 To N                  ' Auszählen der geworfenen Tripel
j = A(i, 1) * 4 + A(i, 2) * 2 + A(i, 3)
binV(j) = binV(j) + 1
Next i
Debug.Print "000: ", binV(0), binV(0) / N, binV(0) / N - W & vbLf & _
"001: ", binV(1), binV(1) / N, binV(1) / N - W & vbLf & _
"010: ", binV(2), binV(2) / N, binV(2) / N - W & vbLf & _
"011: ", binV(3), binV(3) / N, binV(3) / N - W & vbLf & _
"100: ", binV(4), binV(4) / N, binV(4) / N - W & vbLf & _
"101: ", binV(5), binV(5) / N, binV(5) / N - W & vbLf & _
"110: ", binV(6), binV(6) / N, binV(6) / N - W & vbLf & _
"111: ", binV(7), binV(7) / N, binV(7) / N - W & vbLf & _
"--------------------------------------------------" & vbLf & _
"Gesamt: ", .Sum(binV), 1 & vbLf
End With
End Sub
Gruß, Luc :-?
Besser informiert mit …
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige