Difference between revisions of "Aufgaben:Exercise 2.7: C Programs "z1" and "z2""

From LNTwww
Line 3: Line 3:
 
}}
 
}}
  
[[File:P_ID122__Sto_A_2_7.png|right|frame|C-Programme zur Erzeugung diskreter Zufallsgrößen]]
+
[[File:P_ID122__Sto_A_2_7.png|right|frame|C-Programme zur Erzeugung <br>diskreter Zufallsgrößen]]
 
Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgr&ouml;&szlig;en:
 
Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgr&ouml;&szlig;en:
  
* Die Funktion $z1$ erzeugt eine $M$&ndash;-stufige Zufallsgr&ouml;&szlig;e mit dem Wertevorrat $\{0, 1$, ... , $M-1\}$, die dazugehörigen Wahrscheinlichkeiten werden im Array $\text{p_array}$ mit der Eigenschaft &bdquo;Float&rdquo; &uuml;bergeben. Die Funktion $\text{random()}$ liefert gleichverteilte Float&ndash;Zufallsgr&ouml;&szlig;en zwischen $0$ und $1$.
+
* Die Funktion&nbsp; $z1$&nbsp; erzeugt eine&nbsp; $M$&ndash;stufige Zufallsgr&ouml;&szlig;e mit dem Wertevorrat&nbsp; $\{0, 1$, ... , $M-1\}$.&nbsp; Die dazugehörigen Wahrscheinlichkeiten werden im Array&nbsp; $\text{p_array}$&nbsp; mit der Eigenschaft &bdquo;Float&rdquo; &uuml;bergeben.&nbsp; Die Funktion&nbsp; $\text{random()}$&nbsp; liefert gleichverteilte Float&ndash;Zufallsgr&ouml;&szlig;en zwischen&nbsp; $0$&nbsp; und&nbsp; $1$.
 +
 
 +
*Eine zweite Funktion&nbsp; $z2$&nbsp; (Quelltext siehe unten)&nbsp; liefert eine spezielle Wahrscheinlichkeitsverteilung, die durch die beiden Parameter&nbsp; $I$&nbsp; und&nbsp; $p$&nbsp; festgelegt ist.&nbsp; Dieses geschieht unter Verwendung der Funktion&nbsp; $z1$.
 +
 
 +
 
  
*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 <i>z</i>1.
 
  
  
Line 14: Line 17:
  
 
''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&nbsp; [[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.
+
*Insbesondere wird auf die Seite&nbsp;  [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen#Erzeugung_mehrstufiger_Zufallsgr.C3.B6.C3.9Fen|Erzeugung mehrstufiger Zufallsgrößen]] Bezug&nbsp; genommen.
 
   
 
   
  
Line 23: Line 26:
  
 
<quiz display=simple>
 
<quiz display=simple>
{Es gelte $M=4$ und $\text{p_array} = \big[0.2, \ 0.3, \ 0.4, \ 0.1 \big]$.  
+
{Es gelte&nbsp; $M=4$&nbsp; und&nbsp; $\text{p_array} = \big[0.2, \ 0.3, \ 0.4, \ 0.1 \big]$.  
<br>Welches Ergebnis liefert die Funktion $z1$, wenn die Randomfunktion den Wert $x = 0.75$ zur&uuml;ckgibt?
+
<br>Welches Ergebnis liefert die Funktion&nbsp; $z1$, wenn die Randomfunktion den&nbsp; Wert $x = 0.75$&nbsp; zur&uuml;ckgibt?
 
|type="{}"}
 
|type="{}"}
 
$z1 \ = \ $  { 2 }
 
$z1 \ = \ $  { 2 }
  
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z1$ zutreffend?
+
{Welche der folgenden Aussagen sind bez&uuml;glich&nbsp; $z1$&nbsp; zutreffend?
 
|type="[]"}
 
|type="[]"}
- Man könnte auf die Zuweisung $\text{x = random()}$  in Zeile 5 verzichten und in Zeile 8 direkt mit  $\text{random()}$ vergleichen.
+
- Man könnte auf die Zuweisung&nbsp; $\text{x = random()}$&nbsp; in Zeile 5 verzichten und in Zeile 8 direkt mit&nbsp; $\text{random()}$&nbsp; vergleichen.
+ Sind alle übergebenen Wahrscheinlichkeiten gleich, so g&auml;be es schnellere Programmrealisierungen als $z1$.
+
+ Sind alle übergebenen Wahrscheinlichkeiten gleich, so g&auml;be es schnellere Programmrealisierungen als&nbsp; $z1$.
+ Der R&uuml;ckgabewert $\text{random() = 0.2}$ f&uuml;hrt zum Ergebnis $z1= 1$.
+
+ Der R&uuml;ckgabewert&nbsp; $\text{random() = 0.2}$&nbsp; f&uuml;hrt zum Ergebnis&nbsp; $z1= 1$.
  
  
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z2$ zutreffend?
+
{Welche der folgenden Aussagen sind bez&uuml;glich&nbsp; $z2$&nbsp; zutreffend?
 
|type="[]"}
 
|type="[]"}
+ Das Programm erzeugt eine <i>binomialverteilte</i> Zufallsgr&ouml;&szlig;e.
+
+ Das Programm erzeugt eine <i>binomialverteilte</i>&nbsp; Zufallsgr&ouml;&szlig;e.
-  Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgr&ouml;&szlig;e.
+
-  Das Programm erzeugt eine <i>poissonverteilte</i>&nbsp; Zufallsgr&ouml;&szlig;e.
+ Mit $I = 4$ sind f&uuml;r $z2$ die Werte $0, 1, 2, 3, 4$ m&ouml;glich.
+
+ Mit&nbsp; $I = 4$&nbsp; sind f&uuml;r&nbsp; $z2$&nbsp; die Werte&nbsp; $0, \ 1, \ 2, \ 3, \ 4$&nbsp; m&ouml;glich.
+ Das Einbinden der mathematischen Bibliothek &bdquo;'''math.h'''&rdquo; ist erforderlich, da in $z2$ die Funktion &bdquo;'''pow'''&rdquo;  (Potenzieren) verwendet wird.
+
+ Das Einbinden der mathematischen Bibliothek &bdquo;'''math.h'''&rdquo; ist erforderlich, da in&nbsp; $z2$&nbsp; die Funktion &bdquo;'''pow'''&rdquo;  (Potenzieren) verwendet wird.
  
  
{Welcher Wert steht  in &nbsp;$\text{p_array[2]}$&nbsp; beim Aufruf mit $I = 4$ und $p = 0.25$?
+
{Welcher Wert steht  in &nbsp;$\text{p_array[2]}$&nbsp; beim Aufruf mit&nbsp; $I = 4$&nbsp; und&nbsp; $p = 0.25$?
 
|type="{}"}
 
|type="{}"}
 
$\text{p_array[2]} \ =  \ $  { 0.211 3% }
 
$\text{p_array[2]} \ =  \ $  { 0.211 3% }

Revision as of 12:58, 14 November 2019

C-Programme zur Erzeugung
diskreter Zufallsgrößen

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  $\text{p_array}$  mit der Eigenschaft „Float” übergeben.  Die Funktion  $\text{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:



Fragebogen

1

Es gelte  $M=4$  und  $\text{p_array} = \big[0.2, \ 0.3, \ 0.4, \ 0.1 \big]$.
Welches Ergebnis liefert die Funktion  $z1$, wenn die Randomfunktion den  Wert $x = 0.75$  zurückgibt?

$z1 \ = \ $

2

Welche der folgenden Aussagen sind bezüglich  $z1$  zutreffend?

Man könnte auf die Zuweisung  $\text{x = random()}$  in Zeile 5 verzichten und in Zeile 8 direkt mit  $\text{random()}$  vergleichen.
Sind alle übergebenen Wahrscheinlichkeiten gleich, so gäbe es schnellere Programmrealisierungen als  $z1$.
Der Rückgabewert  $\text{random() = 0.2}$  führt zum Ergebnis  $z1= 1$.

3

Welche der folgenden Aussagen sind bezüglich  $z2$  zutreffend?

Das Programm erzeugt eine binomialverteilte  Zufallsgröße.
Das Programm erzeugt eine poissonverteilte  Zufallsgröße.
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.

4

Welcher Wert steht in  $\text{p_array[2]}$  beim Aufruf mit  $I = 4$  und  $p = 0.25$?

$\text{p_array[2]} \ = \ $


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 $\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 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$” ergibt $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}.$$