________________________________________________________________________________
Inhalt....: Analyse von Wuerfelexperimenten
Kategorie.: Handwerkskasten
Mathematik: Stochastik, Statistik
MuPAD.....: 3.0.0
Datum.....: 2002-07-11
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: random, plot, plot::Point2d, plot::PointList2d, plot::Rectangle
Funktionen: GridVisible, AxesOrigin, plot::Line2d, PointSize, Color
Funktionen: plot::Polygon2d
________________________________________________________________________________
Elementare MuPAD-Funktionen:
Analyse von Würfelexperimenten
Dieses Notebook bietet eine Erweiterung zu dem Notebook
Experimente_idealer_Wuerfel
welches ebenfalls im Handwerkskasten verfügbar ist. Hier werden wir eine recht umfangreiche
Prozedur zur mathematischen und grafischen Analyse von Zufallsexperimenten mit einem
idealen Würfel kennen lernen.
Wie oben beschrieben, bietet dieses Notebook eine Funktion zur Analyse
eines Zufallsexperiments mit einem idealen Würfel. Wie schon in dem Notebook
Experimente_idealer_Wuerfel
betrachten wir eine Prozedur mit der wir das Werfen mit einem idealen Würfel
simulieren können.
Hier definieren wir eine neue Prozedur namens Wuerfel_Analyse sowie
vier verschiedene Prozeduren zur grafischen Visualisierung des betrachteten
Zufallsexperiments.
Zunächst die Prozedur Wuerfel_Analyse:
Wuerfel_Analyse:= proc(n /* All */)
local Summen, i, Ergebnis, Wuerfeln;
begin
Wuerfeln:= random(1..6);
TEXTWIDTH:= 58;
Summen:= [0 $ 6];
for i from 1 to n do
Ergebnis:= Wuerfeln();
Summen[Ergebnis]:= Summen[Ergebnis] + 1;
end_for;
if args(0) = 2 and args(2) = hold(All) then
print(Unquoted, "---------------------");
print(Unquoted, "Haeufigkeitsanalyse");
print(Unquoted, "---------------------");
print(Unquoted, "-----------------------------------------------------");
for i from 1 to 6 do
print(Unquoted, "Es wurde ".Summen[i]."-mal ".i.
" geworfen.");
print(Unquoted, "Die relative Haeufigkeit der ".i.
" ist damit "
.expr2text(Summen[i]/n));
print(Unquoted, "Abweichung von der Wahrscheinlichkeit: "
.expr2text(abs(1/6-Summen[i]/n)));
print(Unquoted, "-----------------------------------------------------");
end_for;
return(Summen);
else
return(Summen);
end_if;
end_proc:
Die Funktion Wuerfel_Analyse erhält ein oder zwei Argumente:
1. Argument: Eine natürliche Zahl n, die Anzahl der Würfe mit einem idealen
Würfel
2. Argument: Die Option All, mit der man zusätzliche Funktionalität der Prozedur
ausnutzt (siehe unten)
Rückgabewert ist bei Aufruf der Prozedur mit einem Argument n eine Liste L,
so dass L[ i ], i = 1,...,6, die Anzahl angibt, wie oft die Augenzahl i geworfen
wurde. Wird die Prozedur mit dem Zusatzargument All aufgerufen, so liefert
sie zusätzlich eine Häufigkeitsanalyse der unten beschriebenen Art.
Häufigkeitsanalyse:
1. Ausgabe der absoluten Zahlen, d.h. wie oft eine Augenzahl geworfen
wurde.
2. Ausgabe der entsprechenden relativen Häufigkeiten
3. Ausgabe der Abweichung der relativen Häufigkeit von der tatsächlichen
Wahrscheinlichkeit
Ein Aufruf der Prozedur Wuerfel_Analyse ist also von der Form
Wuerfel_Analyse( n ), falls eine Analyse der oben beschriebenen Form
nicht erwünscht ist, und von der Form Wuerfel_Analyse( n, All ) falls eine
solche gewünscht ist.
Wir betrachten zwei Beispiele für den Fall n = 100.
Wuerfel_Analyse(100)
![]()
Eine zusätzliche Analyse erhalten wir übern den Aufruf:
Wuerfel_Analyse(100, All)
---------------------
Haeufigkeitsanalyse
---------------------
-----------------------------------------------------
Es wurde 15-mal 1 geworfen.
Die relative Haeufigkeit der 1 ist damit 3/20
Abweichung von der Wahrscheinlichkeit: 1/60
-----------------------------------------------------
Es wurde 12-mal 2 geworfen.
Die relative Haeufigkeit der 2 ist damit 3/25
Abweichung von der Wahrscheinlichkeit: 7/150
-----------------------------------------------------
Es wurde 18-mal 3 geworfen.
Die relative Haeufigkeit der 3 ist damit 9/50
Abweichung von der Wahrscheinlichkeit: 1/75
-----------------------------------------------------
Es wurde 23-mal 4 geworfen.
Die relative Haeufigkeit der 4 ist damit 23/100
Abweichung von der Wahrscheinlichkeit: 19/300
-----------------------------------------------------
Es wurde 17-mal 5 geworfen.
Die relative Haeufigkeit der 5 ist damit 17/100
Abweichung von der Wahrscheinlichkeit: 1/300
-----------------------------------------------------
Es wurde 15-mal 6 geworfen.
Die relative Haeufigkeit der 6 ist damit 3/20
Abweichung von der Wahrscheinlichkeit: 1/60
-----------------------------------------------------
![]()
Nun wollen wir vier kleine Routinen vorstellen, die es ermöglichen, neben
der mathematischen Analyse von oben auch eine grafische Analyse mit den
verschiedensten Möglichkeiten der plot-Bibliothek durchzuführen.
Funktionen zur grafischen Analyse
Darstellung der relativen Häufigkeiten (in Schwarz) und der tatsächlichen
Wahrscheinlichkeiten (in Grau) als Punkte
Darstellung der relativen Häufigkeiten (in Schwarz) und der tatsächlichen
Wahrscheinlichkeiten (in Grau) als Polygonzüge
Darstellung der relativen Häufigkeiten (in Schwarz) und der tatsächlichen
Wahrscheinlichkeiten (in Grau) als Stabdiagramme
Darstellung der relativen Häufigkeiten (in Schwarz) und der tatsächlichen
Wahrscheinlichkeiten (in Grau) als Säulendiagramme
Der Beschreibung und Definition dieser Funktionen wollen wir uns jetzt widmen.
Die erste Funktion visualisiert die relativen Häufigkeiten mit Hilfe von Punkten.
Zeichne_Punkte:= proc(Summen)
local Punkte1, Punkte2, n, i;
begin
n:= _plus(Summen[i] $ i = 1..6);
Punkte1:= plot::PointList2d([[i, Summen[i]/n] $ i = 1..6],
PointSize = 3 * unit::mm,
Color = RGB::Black);
Punkte2:= plot::PointList2d([[i, 1/6] $ i = 1..6],
PointSize = 3 * unit::mm,
Color = RGB::Grey);
plot(Punkte1, Punkte2, GridVisible = TRUE, AxesOrigin = [0,0]);
end_proc:
Die Prozedur Zeichne_Punkte erwartet stets ein Argument:
1. Argument: Eine Liste mit 6 Elementen, den relativen Häufigkeiten der
jeweils gewürfelten Augenzahl.
Als Ausgabe liefert sie eine Grafik, in der die relativen Häufigkeiten sowie
die tatsächlichen Wahrscheinlichkeiten als Punkte eingezeichnet sind.
Ein Aufruf der Funktion ist also typischerweise von der Form
Zeichne_Punkte( [ h1, h2, h3, h4, h5, h6 ] ). Dabei sind h1 bis h6 die
absoluten Häufigkeiten der erzielten Augenzahlen 1 bis 6, die auch
mittels der Prozedur Wuerfel_Analyse zuvor berechnet werden können.
Wir erproben die Funktion an zwei Beispielen:
L:= Wuerfel_Analyse(10);
Zeichne_Punkte(L)
![]()

L:= Wuerfel_Analyse(100):
Zeichne_Punkte(L)

Die zweite Funktion visualisiert die relativen Häufigkeiten mit Hilfe von
Polygonzügen:
Zeichne_Polygonzug:= proc(Summen)
local Polygon1, Polygon2, n, i;
begin
n:= _plus(Summen[i] $ i = 1..6);
Polygon1:= plot::Polygon2d([[i, Summen[i]/n] $ i = 1..6],
Color = RGB::Black,
PointSize = 3 * unit::mm,
PointsVisible = TRUE);
Polygon2:= plot::Polygon2d([[i, 1/6] $ i = 1..6],
Color = RGB::Blue,
PointSize = 3 * unit::mm,
PointsVisible = TRUE);
plot(Polygon1, Polygon2, GridVisible = TRUE, AxesOrigin = [0,0]);
end_proc:
Auch die Prozedur Zeichne_Polygonzug erwartet stets ein Argument:
1. Argument: Eine Liste mit 6 Elementen, den relativen Häufigkeiten der
jeweils gewürfelten Augenzahl.
Als Ausgabe liefert sie eine Grafik, in der die relativen Häufigkeiten sowie
die tatsächlichen Wahrscheinlichkeiten als Punkte, die durch Graden miteinander
verbunden werden, eingezeichnet sind.
Ein Aufruf der Funktion ist also typischerweise von der Form
Zeichne_Polygonzug( [ h1, h2, h3, h4, h5, h6 ] ). Dabei sind h1 bis h6 die
absoluten Häufigkeiten der erzielten Augenzahlen 1 bis 6, die auch
mittels der Prozedur Wuerfel_Analyse zuvor berechnet werden können.
Wir erproben die Funktion wieder an unseren zwei Beispielen:
L:= Wuerfel_Analyse(10):
Zeichne_Polygonzug(L)

L:= Wuerfel_Analyse(100):
Zeichne_Polygonzug(L)

Die dritte Funktion visualisiert die relativen Häufigkeiten mit Hilfe von
Stabdiagrammen:
Zeichne_Stabdiagramm:= proc(Summen)
local Punkte, Staebe, n, i;
begin
n:= _plus(Summen[i] $ i = 1..6);
Punkte:= [plot::Point2d(i, Summen[i]/n,
Color = RGB::Black,
PointSize = 4 * unit::mm)
$ i = 1..6];
Staebe:= [plot::Line2d([i, 0], [i, Summen[i]/n],
Color = RGB::Black,
LineWidth = 1 * unit::mm) $ i = 1..6];
plot(op(Punkte), op(Staebe), GridVisible = TRUE, AxesOrigin = [0,0])
end_proc:
Auch die Prozedur Zeichne_Stabdiagramm erwartet stets ein Argument:
1. Argument: Eine Liste mit 6 Elementen, den relativen Häufigkeiten der
jeweils gewürfelten Augenzahl.
Als Ausgabe liefert sie eine Grafik, in der die relativen Häufigkeiten sowie
die tatsächlichen Wahrscheinlichkeiten als Stabdiagramme eingezeichnet
sind.
Ein Aufruf der Funktion ist also typischerweise von der Form
Zeichne_Stabdiagramm( [ h1, h2, h3, h4, h5, h6 ] ). Dabei sind h1 bis h6 die
absoluten Häufigkeiten der erzielten Augenzahlen 1 bis 6, die auch
mittels der Prozedur Wuerfel_Analyse zuvor berechnet werden können.
Wieder erproben wir die Funktion in zwei Beispielen:
L:= Wuerfel_Analyse(10):
Zeichne_Stabdiagramm(L)

L:= Wuerfel_Analyse(100):
Zeichne_Stabdiagramm(L)

Nun zu der vierten und letzten Funktion. Sie visualisiert die relativen
Häufigkeiten mit Hilfe von Säulendiagrammen:
Zeichne_Saeulendiagramm:= proc(Summen)
local i;
begin
plot(plot::Histogram2d([i $ Summen[i] $ i=1..6],
Cells=[i-0.5..i+0.5 $ i = 1..6],
Area = 1))
end_proc:
Auch die Prozedur Zeichne_Säulendiagramm erwartet stets ein Argument:
1. Argument: Eine Liste mit 6 Elementen, den relativen Häufigkeiten der
jeweils gewürfelten Augenzahl.
Als Ausgabe liefert sie eine Grafik, in der die relativen Häufigkeiten sowie
die tatsächlichen Wahrscheinlichkeiten als Stabdiagramme eingezeichnet
sind.
Ein Aufruf der Funktion ist also typischerweise von der Form
Zeichne_Säulendiagramm( [ h1, h2, h3, h4, h5, h6 ] ). Dabei sind h1 bis h6 die
absoluten Häufigkeiten der erzielten Augenzahlen 1 bis 6, die auch
mittels der Prozedur Wuerfel_Analyse zuvor berechnet werden können.
In unseren zwei Beispielen ergibt sich:
L:= Wuerfel_Analyse(10):
Zeichne_Saeulendiagramm(L)

L:= Wuerfel_Analyse(100):
Zeichne_Saeulendiagramm(L)

Jede der vorgestellten Funktionen bietet nun individuell für sich eine schöne
Möglichkeit, wie man auch optisch den Übergang der Wahrscheinlichkeit in
die relative Häufigkeit veranschaulichen kann.
Alternativ kann natürlich auch die Funktion plot::Histogram2d direkt mit
den statistischen Daten verwendet werden (ohne dass diese zuerst zu einer
Liste zusammengefasst werden müssen und die absoluten Häufigkeiten der
geworfenen Augenzahlen berechnet werden müssen):
Wuerfel:= random(1..6):
plot(plot::Histogram2d([Wuerfel() $ i = 1..100],
Cells=[i-0.5..i+0.5 $ i = 1..6],
Area = 1))

_______________________________________________________________________________
Aufgaben:
1. Experimentieren Sie mit den oben aufgeführten Prozeduren. Ändern Sie zunächst die Farben der grafischen
Objekte von Schwarz und Grau in Blau und Grün. Experimentieren Sie dann mit den verschiedenen
Szene Optionen wie z.B. 'GridLines = Automatic' oder 'AxesOrigin = [0,0]'. Wie verändern sich die
Darstellungen, wenn man diese entfernt.
2. Ändern Sie die obige Prozedur 'Wuerfel_Analyse' so um, dass bei Berechnung der Abweichung der relativen
Häufigkeiten von den entsprechenden Wahrscheinlichkeiten nicht die genauen Ergebnisse, sondern nur
Gleitkommadarstellungen (auf 10 Stellen genau) ausgegeben werden.
TIPP: float
3. Ändern Sie die obigen Prozeduren so ab, dass mit einem "allgemeinen Würfel" mit k Ecken gewürfelt werden
kann.
TIPP: Führen Sie k als zweiten Parameter in die obige Prozedur ein. Ersetzen Sie jede 6 durch k.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
_______________________________________________________________________________