Exercise 2.7: C Programs "z1" and "z2"
From LNTwww
The two C programs given here are suitable for generating discrete random variables:
- The function $z1$ generates an $M$–stepped random variable with the value set $\{0, 1$, ... , $M-1\}$. The associated probabilities are passed in the array $\text{p_array}$ with property "Float" The function $\text{random()}$ returns equally distributed float–random variables between $0$ and $1$.
- A second function $z2$ (source code see below) returns a special probability distribution specified by the two parameters $I$ and $p$. This is done using the function $z1$.
Hints:
- The exercise belongs to the chapter Generation of Discrete Random Variables.
- In particular, reference is made to the page Generation of multistage random variables .
Questions
Musterlösung
(1) Nach dem ersten Schleifendurchlauf $(m = 0)$ ist die Variable $\text{summe = 0.2}$, beim nächsten $(m = 1)$ gilt $\text{summe = 0.2 + 0.3 = 0.5}$.
- In beiden Fällen ist somit die Variable $\text{summe} < x = 0.75$.
- Erst bei $m = 2$ ist die Rücksprungbedingung erfüllt: $0.9 > x$. Somit ist $\underline{z1 = 2}$.
(2) Richtig sind die Lösungsvorschläge 2 und 3:
- Würde man auf die Hilfsvariable $x$ verzichten und in Zeile 8 dafür $\text{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 dem 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 $\text{p_array[0]}$ vor der Programmschleife $(i = 0)$ den Wert $(1 -p)^{I}$.
- Im ersten Schleifendurchlauf $(i = 1)$ wird folgender Wert eingetragen:
- $$\text{p_array[1]}=\frac{ p\cdot I}{ 1- p}\cdot\text{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 "$z2=2$" berechnet:
- $$\text{p_array[2]}=\frac{p\cdot (I- 1)}{ 2\cdot ( 1- p)}\cdot\text{p_array[1]}= \left({ I \atop { 2}}\right)\cdot p^{\rm 2}\cdot( 1- p)^{\rm 2}={\rm Pr}( z2 = 2) .$$
- Für $I= 4$ und $p = 0.25$ erhält man folgenden Zahlenwert ⇒ "$4$ über $2$" $=6$:
- $$\text{p_array[2]}={\rm Pr}( z 2=2)=6\cdot\frac{1}{16}\cdot\frac{9}{16} \hspace{0.15cm}\underline{=0.211}.$$