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

Aus LNTwww
Wechseln zu:Navigation, Suche
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 beiden hier angegebenen C-Programme eignen sich zur Erzeugung diskreter Zufallsgrößen:
  
:&bdquo;<i>z</i>1&rdquo; erzeugt eine <i>M</i>-stufige Zufallsgr&ouml;&szlig;e mit dem Wertevorrat {0, 1, ... , <i>M</i>&ndash;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 &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$.
 
+
*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 <i>z</i>2 (Quelltext siehe unten) liefert eine spezielle Wahrscheinlichkeitsverteilung, die durch die beiden Parameter <i>I</i> und <i>p</i> 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 &bdquo;0&rdquo; erforderlich sein, so geben Sie bitte &bdquo;0.&rdquo; ein.
 
*Sollte die Eingabe des Zahlenwertes &bdquo;0&rdquo; erforderlich sein, so geben Sie bitte &bdquo;0.&rdquo; ein.
*Wir möchten Sie gerne auch auf das folgende Lernvideo hinweisen:
 
 
:[[Verdeutlichung der PN-Generatoren am Beispiel ''L'' = 4]] 
 
 
  
:<br><br><br><br><br><br><br>
 
<b>Hinweis</b>: Die Aufgabe nimmt Bezug auf die Seite Generierung mehrstufiger Zufallsgrößen im Kapitel 2.5 des vorliegenden Buches.
 
  
 
===Fragebogen===
 
===Fragebogen===
  
 
<quiz display=simple>
 
<quiz display=simple>
{Es gelte <i>M</i> = 4 und <i>p_array</i> = {0.2, 0.3, 0.4, 0.1}. Welches Ergebnis liefert die Funktion <i>z</i>1, wenn die Randomfunktion den Wert <i>x</i> = 0.75 zur&uuml;ckgibt?
+
{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?
 
|type="{}"}
 
|type="{}"}
$z1$ = { 2 3% }
+
$z1 \ =$ { 2 }
  
  
{Welche der nachfolgenden Aussagen sind bez&uuml;glich <i>z</i>1 zutreffend?
+
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z1$ zutreffend?
 
|type="[]"}
 
|type="[]"}
- Man könnte auf die Zuweisung <i>x = random</i>() in Zeile 5 verzichten und in Zeile 8 direkt mit <i>random</i>() vergleichen.
+
- Man könnte auf die Zuweisung &bdquo;'''x = random()'''&rdquo;  in Zeile 5 verzichten und in Zeile 8 direkt mit &bdquo;'''random()'''&rdquo;$ vergleichen.
+ Sind alle übergebenen Wahrscheinlichkeiten gleich, so g&auml;be es schneller Programmrealisierungen als <i>z</i>1.
+
+ Sind alle übergebenen Wahrscheinlichkeiten gleich, so g&auml;be es schneller Programmrealisierungen als $z1$.
+ Der R&uuml;ckgabewert <i>random</i>() = 0.2 f&uuml;hrt zu <i>z</i>1 = 1.
+
+ Der R&uuml;ckgabewert &bdquo;'''random() = 0.2'''&rdquo; f&uuml;hrt zum Ergebnis $z1= 1$.
  
  
{Welche der nachfolgenden Aussagen sind bez&uuml;glich <i>z</i>2 zutreffend?
+
{Welche der nachfolgenden Aussagen sind bez&uuml;glich $z2$ zutreffend?
 
|type="[]"}
 
|type="[]"}
 
+ Das Programm erzeugt eine <i>binomialverteilte</i> Zufallsgr&ouml;&szlig;e.
 
+ Das Programm erzeugt eine <i>binomialverteilte</i> Zufallsgr&ouml;&szlig;e.
 
-  Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgr&ouml;&szlig;e.
 
-  Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgr&ouml;&szlig;e.
+ Mit <i>I</i> = 4 sind f&uuml;r <i>z</i>2 die Werte 0, 1, 2, 3 und 4 m&ouml;glich.
+
+ Mit $I = 4$ sind f&uuml;r $z2$ die Werte 0, 1, 2, 3 und 4 m&ouml;glich.
+ Das Einbinden der mathematischen Bibliothek <math.h> ist erforderlich, da in <i>z</i>2 die Funktion <i>pow</i>&nbsp;(Potenzieren) verwendet wird.
+
+ Das Einbinden der mathematischen Bibliothek &bdquo;'''math.h'''&rdquo; ist erforderlich, da in $z2$ die Funktion &bdquo;'''pow'''&rdquo; (Potenzieren) verwendet wird.
  
  
{Welcher Wert steht  in <i>p_array</i>[2] beim Aufruf mit <i>I</i> = 4 und <i>p</i> = 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:\ \ \ \ p\_array[2] \ = $ { 0.211 3% }
  
  

Version vom 6. März 2017, 15:11 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 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:


Fragebogen

1

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?

$z1 \ =$

2

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

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 $z1$.
Der Rückgabewert „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 und 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 $p\_array[2]$ beim Aufruf mit $I = 4$ und $p = 0.25$?

$I=4,\; p = 0.25:\ \ \ \ p\_array[2] \ = $


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