Difference between revisions of "Aufgaben:Exercise 2.7: C Programs "z1" and "z2""
Line 34: | Line 34: | ||
+ Das Programm erzeugt eine <i>binomialverteilte</i> Zufallsgröße. | + Das Programm erzeugt eine <i>binomialverteilte</i> Zufallsgröße. | ||
- Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgröße. | - Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgröße. | ||
− | + Mit $I = 4$ sind für $z2$ die Werte 0, 1, 2, 3 | + | + Mit $I = 4$ sind für $z2$ die Werte $0, 1, 2, 3, 4$ möglich. |
+ Das Einbinden der mathematischen Bibliothek „'''math.h'''” ist erforderlich, da in $z2$ die Funktion „'''pow'''” (Potenzieren) verwendet wird. | + Das Einbinden der mathematischen Bibliothek „'''math.h'''” ist erforderlich, da in $z2$ die Funktion „'''pow'''” (Potenzieren) verwendet wird. | ||
Line 40: | Line 40: | ||
{Welcher Wert steht in $p\_array[2]$ beim Aufruf mit $I = 4$ und $p = 0.25$? | {Welcher Wert steht in $p\_array[2]$ beim Aufruf mit $I = 4$ und $p = 0.25$? | ||
|type="{}"} | |type="{}"} | ||
− | $I=4,\; p = 0.25:\ \ \ \ p\_array[2] \ = $ { 0.211 3% } | + | $I=4,\; p = 0.25\hspace{-0.1cm}:\ \ \ \ p\_array[2] \ = $ { 0.211 3% } |
Line 48: | Line 48: | ||
===Musterlösung=== | ===Musterlösung=== | ||
{{ML-Kopf}} | {{ML-Kopf}} | ||
− | + | '''(1)''' Nach dem ersten Schleifendurchlauf ($m = 0$) ist die Variable $summe = 0.2$, beim nächsten ($m = 1$) gilt $summe = 0.2 + 0.3 =0.5$. In beiden Fällen ist somit die Variable $summe < x = 0.75$. Erst bei $m = 2$ ist die Rücksprungbedingung erfüllt: $0.9 > x$</i>. Somit ist $\underline{z1 = 2}$. | |
− | + | '''(2)''' Richtig sind die <u>Vorschläge 2 und 3</u>: | |
+ | *Würde man auf die Hilfsvariable $x$ verzichten und in Zeile 8 „'''summe > random()'''” schreiben, so würde bei jedem Schleifendurchgang ein neuer Zufallswert erzeugt und $z1$ hätte dann nicht die gewünschten Eigenschaften. | ||
+ | *$z1$ arbeitet gemäß dem Schaubild auf der Seite „Erzeugung mehrstufiger Zufallsgrößen“ im Theorieteil. Dort findet man eine deutlich schnellere Implementierung für den Fall gleicher Wahrscheinlichkeiten ($1/M$). | ||
+ | *Im ersten Durchlauf ($m = 0$) ist in diesem Fall die Rücksprungbedingung aufgrund der Kleiner/Gleich-Abfrage nicht erfüllt; der Ausgabewert ist tatsächlich $z1 = 1$. | ||
− | |||
− | + | '''(3)''' Richtig sind die <u>Lösungsvorschläge 1, 3 und 4</u>: | |
− | + | *Es ergibt sich eine binomialverteilte Zufallsgröße, und zwar mit Wertevorrat $\{0, 1, 2, 3, 4\}$. | |
+ | *Für die Berechnung der Wahrscheinlichkeit ${\rm Pr}(z2 = 0) = (1 -p)^{I}$ benötigt man hier die mathematische Bibliothek. | ||
+ | *Das Potenzieren könnte aber auch durch $I$–fache Multiplikation realisiert werden. | ||
− | |||
− | + | '''(4)''' Aufgrund der Zeile 6 beinhaltet das Feldelement $p\_array</i>[0]$ vor der Programmschleife ($i = 0$) den Wert $(1 -p)^{I}$. Im ersten Schleifendurchlauf ($i = 1$) wird folgender Wert eingetragen: | |
− | + | $${p\_array[1]}=\frac{ p\cdot I}{ 1- p}\cdot{p\_array[0]}= I\cdot p\cdot(1- p)^{ I- 1}={\rm Pr}(z2= 1) .$$ | |
− | + | Im zweiten Schleifendurchlauf ($i = 2$) wird die Wahrscheinlichkeit für das Ergebnis „2” berechnet: | |
− | + | $${p\_array[2]}=\frac{p\cdot (I- 1)}{ 2\cdot ( 1- p)}\cdot{ p\_array[1]}= \left({ I \atop { 2}}\right)\cdot p^{\rm 2}\cdot( 1- p)^{\rm 2}={\rm Pr}( z = 2) .$$ | |
− | + | Für $I= 4$ und $p = 0.25$ erhält man folgenden Zahlenwert („4 über 2” ergibt 6): | |
− | + | $${p\_array[2]}={\rm Pr}( z 2=2)=6\cdot\frac{1}{16}\cdot\frac{9}{16} | |
\hspace{0.15cm}\underline{=0.211}.$$ | \hspace{0.15cm}\underline{=0.211}.$$ | ||
{{ML-Fuß}} | {{ML-Fuß}} |
Revision as of 14:42, 6 March 2017
Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgrößen:
- Die Funktion „z1” erzeugt eine $M$–-stufige Zufallsgröße mit dem Wertevorrat $\{0, 1$, ... , $M-1\}$, die dazugehörigen Wahrscheinlichkeiten werden im Array p_array mit der Eigenschaft „Float” übergeben. Die Funktion random() liefert gleichverteilte Float–Zufallsgrößen zwischen $0$ und $1$.
- Eine zweite Funktion z2 (Quelltext siehe unten) liefert eine spezielle Wahrscheinlichkeitsverteilung, die durch die beiden Parameter $I$ und $p$ festgelegt ist. Dieses geschieht unter Verwendung der Funktion z1.
Hinweise:
- Die Aufgabe gehört zum Kapitel Erzeugung von diskreten Zufallsgrößen.
- Insbesondere wird auf die Seite Erzeugung mehrstufiger Zufallsgrößen Bezug genommen.
- Sollte die Eingabe des Zahlenwertes „0” erforderlich sein, so geben Sie bitte „0.” ein.
Fragebogen
Musterlösung
(2) Richtig sind die Vorschläge 2 und 3:
- Würde man auf die Hilfsvariable $x$ verzichten und in Zeile 8 „summe > random()” schreiben, so würde bei jedem Schleifendurchgang ein neuer Zufallswert erzeugt und $z1$ hätte dann nicht die gewünschten Eigenschaften.
- $z1$ arbeitet gemäß dem Schaubild auf der Seite „Erzeugung mehrstufiger Zufallsgrößen“ im Theorieteil. Dort findet man eine deutlich schnellere Implementierung für den Fall gleicher Wahrscheinlichkeiten ($1/M$).
- Im ersten Durchlauf ($m = 0$) ist in diesem Fall die Rücksprungbedingung aufgrund der Kleiner/Gleich-Abfrage nicht erfüllt; der Ausgabewert ist tatsächlich $z1 = 1$.
(3) Richtig sind die Lösungsvorschläge 1, 3 und 4:
- Es ergibt sich eine binomialverteilte Zufallsgröße, und zwar mit Wertevorrat $\{0, 1, 2, 3, 4\}$.
- Für die Berechnung der Wahrscheinlichkeit ${\rm Pr}(z2 = 0) = (1 -p)^{I}$ benötigt man hier die mathematische Bibliothek.
- Das Potenzieren könnte aber auch durch $I$–fache Multiplikation realisiert werden.
(4) Aufgrund der Zeile 6 beinhaltet das Feldelement $p\_array</i>[0]$ vor der Programmschleife ($i = 0$) den Wert $(1 -p)^{I}$. Im ersten Schleifendurchlauf ($i = 1$) wird folgender Wert eingetragen:
$${p\_array[1]}=\frac{ p\cdot I}{ 1- p}\cdot{p\_array[0]}= I\cdot p\cdot(1- p)^{ I- 1}={\rm Pr}(z2= 1) .$$
Im zweiten Schleifendurchlauf ($i = 2$) wird die Wahrscheinlichkeit für das Ergebnis „2” berechnet: $${p\_array[2]}=\frac{p\cdot (I- 1)}{ 2\cdot ( 1- p)}\cdot{ p\_array[1]}= \left({ I \atop { 2}}\right)\cdot p^{\rm 2}\cdot( 1- p)^{\rm 2}={\rm Pr}( z = 2) .$$
Für $I= 4$ und $p = 0.25$ erhält man folgenden Zahlenwert („4 über 2” ergibt 6): $${p\_array[2]}={\rm Pr}( z 2=2)=6\cdot\frac{1}{16}\cdot\frac{9}{16} \hspace{0.15cm}\underline{=0.211}.$$