Aufgaben:Aufgabe 2.7: C-Programme z1 und z2: Unterschied zwischen den Versionen
Aus LNTwww
Zeile 3: | Zeile 3: | ||
}} | }} | ||
− | [[Datei:P_ID122__Sto_A_2_7.png|right|]] | + | [[Datei:P_ID122__Sto_A_2_7.png|right|C-Programme zur Erzeugung diskreter Zufallsgrößen]] |
− | + | Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgrößen: | |
− | + | * Die Funktion „<i>z</i>1” erzeugt eine $M$–-stufige Zufallsgröße mit dem Wertevorrat $\{0, 1$, ... , $M-1\}$, die dazugehörigen Wahrscheinlichkeiten werden im Array <i>p_array</i> mit der Eigenschaft „Float” übergeben. Die Funktion <i>random</i>() liefert gleichverteilte Float–Zufallsgrößen zwischen $0$ und $1$. | |
− | + | *Eine zweite Funktion <i>z</i>2 (Quelltext siehe unten) liefert eine spezielle Wahrscheinlichkeitsverteilung, die durch die beiden Parameter $I$ und $p$ festgelegt ist. Dieses geschieht unter Verwendung der Funktion <i>z</i>1. | |
− | |||
''Hinweise:'' | ''Hinweise:'' | ||
*Die Aufgabe gehört zum Kapitel [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen|Erzeugung von diskreten Zufallsgrößen]]. | *Die Aufgabe gehört zum Kapitel [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen|Erzeugung von diskreten Zufallsgrößen]]. | ||
+ | *Insbesondere wird auf die Seite [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen#Erzeugung_mehrstufiger_Zufallsgr.C3.B6.C3.9Fen|Erzeugung mehrstufiger Zufallsgrößen]] Bezug genommen. | ||
*Sollte die Eingabe des Zahlenwertes „0” erforderlich sein, so geben Sie bitte „0.” ein. | *Sollte die Eingabe des Zahlenwertes „0” erforderlich sein, so geben Sie bitte „0.” ein. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Fragebogen=== | ===Fragebogen=== | ||
<quiz display=simple> | <quiz display=simple> | ||
− | {Es gelte | + | {Es gelte $M=4$ und $p\_array = \{0.2, \ 0.3, \ 0.4, \ 0.1\}$. Welches Ergebnis liefert die Funktion $z1$, wenn die Randomfunktion den Wert $x = 0.75$ zurückgibt? |
|type="{}"} | |type="{}"} | ||
− | $z1$ | + | $z1 \ =$ { 2 } |
− | {Welche der nachfolgenden Aussagen sind bezüglich | + | {Welche der nachfolgenden Aussagen sind bezüglich $z1$ zutreffend? |
|type="[]"} | |type="[]"} | ||
− | - Man könnte auf die Zuweisung | + | - Man könnte auf die Zuweisung „'''x = random()'''” in Zeile 5 verzichten und in Zeile 8 direkt mit „'''random()'''”$ vergleichen. |
− | + Sind alle übergebenen Wahrscheinlichkeiten gleich, so gäbe es schneller Programmrealisierungen als | + | + Sind alle übergebenen Wahrscheinlichkeiten gleich, so gäbe es schneller Programmrealisierungen als $z1$. |
− | + Der Rückgabewert | + | + Der Rückgabewert „'''random() = 0.2'''” führt zum Ergebnis $z1= 1$. |
− | {Welche der nachfolgenden Aussagen sind bezüglich | + | {Welche der nachfolgenden Aussagen sind bezüglich $z2$ zutreffend? |
|type="[]"} | |type="[]"} | ||
+ 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 | + | + Mit $I = 4$ sind für $z2$ die Werte 0, 1, 2, 3 und 4 möglich. |
− | + Das Einbinden der mathematischen Bibliothek | + | + Das Einbinden der mathematischen Bibliothek „'''math.h'''” ist erforderlich, da in $z2$ die Funktion „'''pow'''” (Potenzieren) verwendet wird. |
− | {Welcher Wert steht in | + | {Welcher Wert steht in $p\_array[2]$ beim Aufruf mit $I = 4$ und $p = 0.25$? |
|type="{}"} | |type="{}"} | ||
− | $I | + | $I=4,\; p = 0.25:\ \ \ \ p\_array[2] \ = $ { 0.211 3% } |
Version vom 6. März 2017, 14:11 Uhr
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
- 1. Nach dem ersten Schleifendurchlauf (m = 0) hat summe den Wert 0.2, beim nächsten (m = 1) gilt summe = 0.5. In beiden Fällen ist somit die Variable summe kleiner als x = 0.75. Erst bei m = 2 ist die Rücksprungbedingung erfüllt: 0.9 > x. Somit ist z1 = 2.
- 2. 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 die Rücksprungbedingung aufgrund der Kleiner/Gleich-Abfrage nicht erfüllt; der Ausgabewert ist tatsächlich z1 = 1.
- Richtig sind somit die Vorschläge 2 und 3.
- 3. Es ergibt sich eine binomialverteilte Zufallsgröße, und zwar mit Wertevorrat {0, 1, 2, 3, 4}. Für die Berechnung der Wahrscheinlichkeit 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. Richtig sind somit die Lösungsvorschläge 1, 3 und 4.
- 4. Aufgrund der Zeile 6 beinhaltet das Feldelement p_array[0] vor der Programmschleife den Wert (1 – p)I. Im zweiten Schleifendurchlauf (i = 1) wird folgender Wert eingetragen:
- $${\rm p\_array[1]}=\frac{ p\cdot I}{ 1-\it p}\cdot{\rm p\_array[0]}= \it I\cdot p\cdot(\rm 1-\it p)^{\it I-\rm 1}=\rm Pr(\it z \rm2= \rm 1) .$$
- Im zweiten Schleifendurchlauf (i = 2) wird die Wahrscheinlichkeit für „2” berechnet:
- $${\rm p\_array[2]}=\frac{\it p\cdot (I-\rm 1)}{\rm 2\cdot (\rm 1-\it p)}\cdot{\rm p\_array[1]}= \left({\it I \atop {\rm 2}}\right)\cdot \it p^{\rm 2}\cdot(\rm 1-\it p)^{\rm 2}=\rm Pr(\it z \rm2= \rm 2) .$$
- Für I = 4 und p = 1/4 erhält man folgenden Zahlenwert („4 über 2” ergibt 6):
- $${\rm p\_array[2]}=\rm Pr(\it z \rm 2=2)=\rm 6\cdot\frac{1}{16}\cdot\frac{9}{16} \hspace{0.15cm}\underline{=0.211}.$$