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

Aus LNTwww
Wechseln zu:Navigation, Suche
 
(12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
 
}}
 
}}
  
[[Datei:P_ID122__Sto_A_2_7.png|right|]]
+
[[Datei: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:
  
:&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&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$.
 +
 
 +
 
 +
 
 +
 
 +
 
 +
Hinweise:
 +
*Die Aufgabe gehört zum  Kapitel&nbsp; [[Stochastische_Signaltheorie/Erzeugung_von_diskreten_Zufallsgrößen|Erzeugung von diskreten Zufallsgrößen]].
 +
*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.
 +
  
: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.
 
  
:<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&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&nbsp; $z1$,&nbsp; wenn die Randomfunktion den&nbsp; Wert $x = 0.75$&nbsp; zur&uuml;ckgibt?
 
|type="{}"}
 
|type="{}"}
$z1$ = { 2 3% }
+
$z1 \ = \ $ { 2 }
  
 
+
{Welche der folgenden Aussagen sind bez&uuml;glich&nbsp; $z1$&nbsp; zutreffend?
{Welche der nachfolgenden Aussagen sind bez&uuml;glich <i>z</i>1 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&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 schneller Programmrealisierungen als <i>z</i>1.
+
+ Sind alle übergebenen Wahrscheinlichkeiten gleich,&nbsp; so g&auml;be es schnellere Programmrealisierungen als&nbsp; $z1$.
+ Der R&uuml;ckgabewert <i>random</i>() = 0.2 f&uuml;hrt zu <i>z</i>1 = 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 <i>z</i>2 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 binomialverteilte Zufallsgr&ouml;&szlig;e.
-  Das Programm erzeugt eine <i>poissonverteilte</i> Zufallsgr&ouml;&szlig;e.
+
-  Das Programm erzeugt eine poissonverteilte 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&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 <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&nbsp; $z2$&nbsp; die Funktion&nbsp; '''pow''' &nbsp; (Potenzieren)&nbsp; 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 &nbsp;$\text{p_array[2]}$&nbsp; beim Aufruf mit&nbsp; $I = 4$&nbsp; und&nbsp; $p = 0.25$?
 
|type="{}"}
 
|type="{}"}
$I\ =\ 4,\ p\ =\ 0.25:\ \ \ \ p\_array[2]$ = { 0.211 3% }
+
$\text{p_array[2]} \ = \ $ { 0.211 3% }
  
  
Zeile 46: Zeile 54:
 
===Musterlösung===
 
===Musterlösung===
 
{{ML-Kopf}}
 
{{ML-Kopf}}
:<b>1.</b>&nbsp;&nbsp;Nach dem ersten Schleifendurchlauf (<i>m</i> = 0) hat <i>summe</i> den Wert 0.2, beim n&auml;chsten (<i>m</i> = 1) gilt <i>summe</i> = 0.5. In beiden F&auml;llen ist somit die Variable <i>summe</i> kleiner als <i>x</i> = 0.75. Erst bei <i>m</i> = 2 ist die R&uuml;cksprungbedingung erf&uuml;llt: 0.9 > <i>x</i>. Somit ist <u><i>z</i>1 = 2</u>.
+
'''(1)'''&nbsp; Nach dem ersten Schleifendurchlauf&nbsp; $(m = 0)$&nbsp; ist die Variable&nbsp; $\text{summe = 0.2}$,&nbsp; beim n&auml;chsten&nbsp; $(m = 1)$&nbsp; gilt &nbsp; $\text{summe = 0.2 + 0.3 = 0.5}$.  
 +
*In beiden F&auml;llen ist somit die Variable &nbsp; $\text{summe}$&nbsp; kleiner als&nbsp;  $x = 0.75$.&nbsp;
 +
*Erst bei&nbsp; $m = 2$&nbsp; ist die R&uuml;cksprungbedingung erf&uuml;llt: &nbsp; $0.9 > x$.&nbsp; Somit ist&nbsp; $\underline{z1 = 2}$.
 +
 
 +
 
 +
 
 +
'''(2)'''&nbsp; Richtig sind die&nbsp; <u>Lösungsvorschläge 2 und 3</u>:
 +
*W&uuml;rde man auf die Hilfsvariable&nbsp; $x$&nbsp; verzichten und in Zeile 8 dafür &nbsp; $\text{summe > random()}$ &nbsp; schreiben,&nbsp; so w&uuml;rde bei jedem Schleifendurchgang ein neuer Zufallswert erzeugt und&nbsp; $z1$&nbsp; h&auml;tte dann nicht die gew&uuml;nschten Eigenschaften.
 +
*$z1$&nbsp; arbeitet gemäß dem Schaubild auf der Seite „Erzeugung mehrstufiger Zufallsgrößen“ im Theorieteil.&nbsp; Dort findet man eine deutlich schnellere Implementierung f&uuml;r den Fall gleicher Wahrscheinlichkeiten&nbsp; $(1/M)$.
 +
*Im ersten Durchlauf&nbsp; $(m = 0)$&nbsp; ist in diesem Fall die R&uuml;cksprungbedingung aufgrund der Kleiner/Gleich&ndash;Abfrage nicht erf&uuml;llt;&nbsp; der Ausgabewert ist tatsächlich&nbsp; $z1 = 1$.
 +
 
  
:<b>2.</b>&nbsp;&nbsp;W&uuml;rde man auf die Hilfsvariable <i>x</i> verzichten und in Zeile 8 &bdquo;summe > random()&rdquo; schreiben, so w&uuml;rde bei jedem Schleifendurchgang ein neuer Zufallswert erzeugt und <i>z</i>1 h&auml;tte dann nicht die gew&uuml;nschten Eigenschaften.
 
  
:<i>z</i>1 arbeitet gemäß dem Schaubild auf der Seite „Erzeugung mehrstufiger Zufallsgrößen“ im Theorieteil. Dort findet man eine deutlich schnellere Implementierung f&uuml;r den Fall gleicher Wahrscheinlichkeiten (1/<i>M</i>).
+
'''(3)'''&nbsp; Richtig sind die&nbsp; <u>Lösungsvorschläge 1, 3 und 4</u>:
 +
*Es ergibt sich eine binomialverteilte Zufallsgr&ouml;&szlig;e,&nbsp; und zwar mit dem Wertevorrat&nbsp; $\{0, 1, 2, 3, 4\}$.  
 +
*F&uuml;r die Berechnung der Wahrscheinlichkeit&nbsp; ${\rm Pr}(z2 = 0) = (1 -p)^{I}$&nbsp; ben&ouml;tigt man hier die mathematische Bibliothek.
 +
*Das Potenzieren k&ouml;nnte aber auch durch&nbsp; $I$&ndash;fache Multiplikation realisiert werden.  
  
: Im ersten Durchlauf (<i>m</i> = 0) ist die R&uuml;cksprungbedingung aufgrund der Kleiner/Gleich-Abfrage nicht erf&uuml;llt; der Ausgabewert ist tatsächlich <i>z</i>1 = 1.
 
:Richtig sind somit die <u>Vorschläge 2 und 3</u>.
 
  
:<b>3.</b>&nbsp;&nbsp;Es ergibt sich eine binomialverteilte Zufallsgr&ouml;&szlig;e, und zwar mit Wertevorrat {0, 1, 2, 3, 4}. F&uuml;r die Berechnung der Wahrscheinlichkeit Pr(<i>z</i>2 = 0) = (1 &ndash; <i>p</i>)<sup><i>I</i></sup> ben&ouml;tigt man hier die mathematische Bibliothek. Das Potenzieren k&ouml;nnte aber auch durch <i>I</i>-fache Multiplikation realisiert werden. Richtig sind somit die <u>Lösungsvorschläge 1, 3 und 4</u>.
 
  
:<b>4.</b>&nbsp;&nbsp;Aufgrund der Zeile 6 beinhaltet das Feldelement <i>p_array</i>[0] vor der Programmschleife den Wert (1 &ndash; <i>p</i>)<sup><i>I</i></sup>. Im zweiten Schleifendurchlauf (<i>i</i> = 1) wird folgender Wert eingetragen:
+
'''(4)'''&nbsp; Aufgrund der Zeile 6 beinhaltet das Feldelement&nbsp; $\text{p_array[0]}$&nbsp; vor der Programmschleife&nbsp;  $(i = 0)$&nbsp; den Wert&nbsp; $(1 -p)^{I}$.&nbsp;
:$${\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 ersten Schleifendurchlauf&nbsp; $(i = 1)$&nbsp; 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>i</i> = 2) wird die Wahrscheinlichkeit für &bdquo;2&rdquo; berechnet:
+
*Im zweiten Schleifendurchlauf&nbsp;  $(i = 2)$&nbsp; wird die Wahrscheinlichkeit für das Ergebnis  &bdquo;$z2=2$&rdquo; 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) .$$
+
:$$\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>I</i> = 4 und <i>p</i> = 1/4 erhält man folgenden Zahlenwert (&bdquo;4 über 2&rdquo; ergibt 6):
+
*Für&nbsp; $I= 4$&nbsp; und&nbsp; $p = 0.25$&nbsp; erhält man folgenden Zahlenwert &nbsp; &rArr; &nbsp; &bdquo;$4$&nbsp; über &nbsp;$2$&rdquo; &nbsp; $=6$:
:$${\rm p\_array[2]}=\rm Pr(\it z \rm 2=2)=\rm 6\cdot\frac{1}{16}\cdot\frac{9}{16}
+
:$$\text{p_array[2]}={\rm Pr}( z 2=2)=6\cdot\frac{1}{16}\cdot\frac{9}{16}
 
\hspace{0.15cm}\underline{=0.211}.$$
 
\hspace{0.15cm}\underline{=0.211}.$$
 
{{ML-Fuß}}
 
{{ML-Fuß}}

Aktuelle Version vom 29. Dezember 2021, 14:49 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()}$  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}$  kleiner als  $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}.$$