Simulation Münzwurf
19.05.2015 14:27:49
Brigitte
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