Aufgaben:Aufgabe 2.7: C-Programme z1 und z2: Unterschied zwischen den Versionen

Aus LNTwww
Wechseln zu:Navigation, Suche
K (Textersetzung - „*Sollte die Eingabe des Zahlenwertes „0” erforderlich sein, so geben Sie bitte „0.” ein.“ durch „ “)
Zeile 3: Zeile 3:
 
}}
 
}}
  
[[Datei:P_ID122__Sto_A_2_7.png|right|C-Programme zur Erzeugung diskreter Zufallsgrößen]]
+
[[Datei:P_ID122__Sto_A_2_7.png|right|frame|C-Programme zur Erzeugung diskreter Zufallsgrößen]]
 
Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgrößen:
 
Die beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgrößen:
  
* Die Funktion &bdquo;<i>z</i>1&rdquo; erzeugt eine $M$&ndash;-stufige Zufallsgr&ouml;&szlig;e mit dem Wertevorrat $\{0, 1$, ... , $M-1\}$, die dazugehörigen Wahrscheinlichkeiten werden im Array <i>p_array</i> mit der Eigenschaft &bdquo;Float&rdquo; &uuml;bergeben. Die Funktion <i>random</i>() liefert gleichverteilte Float&ndash;Zufallsgr&ouml;&szlig;en zwischen $0$ und $1$.
+
* 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</i>()}$ liefert gleichverteilte Float&ndash;Zufallsgr&ouml;&szlig;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.
+
 
 +
*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.
 +
 
 +
 
 +
 
  
 
''Hinweise:''  
 
''Hinweise:''  
Zeile 13: Zeile 17:
 
*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 [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen#Erzeugung_mehrstufiger_Zufallsgr.C3.B6.C3.9Fen|Erzeugung mehrstufiger Zufallsgrößen]] Bezug genommen.
 
   
 
   
 +
  
  
Zeile 18: Zeile 23:
  
 
<quiz display=simple>
 
<quiz display=simple>
{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&uuml;ckgibt?
+
{Es gelte $M=4$ und $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?
 
|type="{}"}
 
|type="{}"}
$z1 \ =$  { 2 }
+
$z1 \ = \ $  { 2 }
 
 
  
 
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z1$ zutreffend?
 
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z1$ zutreffend?
 
|type="[]"}
 
|type="[]"}
- Man könnte auf die Zuweisung &bdquo;'''x = random()'''&rdquo; in Zeile 5 verzichten und in Zeile 8 direkt mit  &bdquo;'''random()'''&rdquo;$ vergleichen.
+
- 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&auml;be es schneller Programmrealisierungen als $z1$.
+
+ Sind alle übergebenen Wahrscheinlichkeiten gleich, so g&auml;be es schnellere Programmrealisierungen als $z1$.
+ Der R&uuml;ckgabewert &bdquo;'''random() = 0.2'''&rdquo; f&uuml;hrt zum Ergebnis $z1= 1$.
+
+ Der R&uuml;ckgabewert $\text{random() = 0.2}$ f&uuml;hrt zum Ergebnis $z1= 1$.
  
  
Zeile 38: Zeile 43:
  
  
{Welcher Wert steht  in $p\_array[2]$ beim Aufruf mit $I = 4$ und $p = 0.25$?
+
{Welcher Wert steht  in &nbsp;$\text{p_array[2]}$&nbsp; beim Aufruf mit $I = 4$ und $p = 0.25$?
 
|type="{}"}
 
|type="{}"}
$I=4,\; p = 0.25\hspace{-0.1cm}:\ \ \ \ p\_array[2] \ = $  { 0.211 3% }
+
$\text{p_array[2]} \ = \ $  { 0.211 3% }
  
  

Version vom 7. August 2018, 17:33 Uhr

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</i>()}$ 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 $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 nachfolgenden 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 nachfolgenden 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 $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$. Somit ist $\underline{z1 = 2}$.

(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[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}.$$