Created
March 12, 2019 21:35
-
-
Save halexus/cf7b0317bbddc5b8b4360d9cdef8833c to your computer and use it in GitHub Desktop.
Lösung mit Python von Beispiel 4 Wahrscheinlichkeitstheorie
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Beispiel 4" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"hideCode": false, | |
"hideOutput": false, | |
"hidePrompt": false, | |
"tags": [ | |
"hidecode" | |
] | |
}, | |
"source": [ | |
"Wir betrachten ein Zufallsexperiment, bei dem ein Würfel zweimal hintereinander geworfen wird. $\\Omega$ sei dabei die Ergebnismenge:\n", | |
"\n", | |
"$$\\Omega = \\{(i,j):i,j\\in\\{1,2,3,4,5,6\\}\\}$$\n", | |
"\n", | |
"Die Zufallsvariablen $X_1$, $X_2$ beschreiben die Augenzahl des ersten bzw. zweiten Wurfes. Welchen Wertebereich besitzen die folgenden Zufallsvariablen?\n", | |
"\n", | |
"(a) $X_1 \\cdot X_2$\n", | |
"\n", | |
"(b) $\\frac{X_1}{X_2}$\n", | |
"\n", | |
"(c) $2 \\cdot X_1 - 3 \\cdot X_2$\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Zu Beginn importieren wir die Python eigene Funktion um kartesische Produkte zweier Mengen zu berechnen." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"hideCode": false, | |
"hidePrompt": false | |
}, | |
"outputs": [], | |
"source": [ | |
"from itertools import product" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Danach importieren wir eine Klasse zur Repräsentation von Brüchen in Python. Die benötigen wir für Beispiel (b)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from fractions import Fraction" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Nun erzeugen wir die Ergebnismenge oder Grundraum $\\Omega$ als kartesisches Produkt $\\{1,2,3,4,5,6\\}^2$.\n", | |
"\n", | |
"`product` liefert einen Iterator der durch Aufruf der `list` Funktion in eine Liste konvertiert wird. Dies ist notwendig da ein Iterator nur einmal von Beginn zum Ende durchlaufen werden kann, wir aber $\\Omega$ mehrmals verwenden wollen.\n", | |
"\n", | |
"Die `range(a, b)` Funktion liefert in dieser Form eine Liste aller ganzen Zahlen von $a$ bis $b-1$, also $1,2,3,4,5,6$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"omega = list(product(range(1,7), repeat=2))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Nun wollen wir die beiden Zufallsvariablen definieren. Dies sind jeweils Funktionen welche ein Ergebnis $\\omega$ des Grundraumes $\\Omega$ als Argument erhalten und eine reelle Zahl zurückgeben. In diesem Beispiel ist jedes $\\omega$ ein 2-Tupel mit dem Ergebnis des ersten, bzw. zweiten Würfelwurfes an der entsprechnden Position." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def X1(w): # Augenzahl erster Würfel\n", | |
" return w[0]\n", | |
"\n", | |
"def X2(w): # Augenzahl zweiter Würfel\n", | |
" return w[1]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## (a) $X_1 \\cdot X_2$\n", | |
"\n", | |
"Den Teil `{expression(w) for w in omega}` nennt man eine *set comprehension*. Es durchläuft die ganze Ergebnismenge $\\Omega$, führt die Berechnung `expression` für jedes Element aus und erzeugt aus den berechneten Werten eine mathematische Menge, also ohne Duplikate.\n", | |
"\n", | |
"Diese Menge wird durch die `sorted` Funktion in eine sortierte Liste konvertiert und schließlich mit der `print` Funktion ausgegeben." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 36]\n" | |
] | |
} | |
], | |
"source": [ | |
"print(sorted({X1(w)*X2(w) for w in omega})) # Wertemenge X1*X2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## (b) $\\frac{X_1}{X_2}$\n", | |
"Wir lösen dieses Problem ähnlich wie in der letzten Codezeile. \n", | |
"\n", | |
"Wir verwenden wieder eine *set comprehension*, diesmal besteht unsere erzeugte Menge aber aus Brüchen die wir mithilfe der von Python zur Verfügung gestellten `Fraction` Klasse erzeugen. Die Brüche werden dann sortiert, und daraus eine Liste mit lesbaren Brüchen erstellt. Würden wir den `str(x) for x in ...` Teil weglassen, so würden die Brüche von Python statt in der Form $a/b$ als $Fraction(a,b)$ ausgegeben werden. Die `str` Funktion wandelt die Repräsentation von Python in eine menschlich besser lesbare Form um." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"['1/6', '1/5', '1/4', '1/3', '2/5', '1/2', '3/5', '2/3', '3/4', '4/5', '5/6', '1', '6/5', '5/4', '4/3', '3/2', '5/3', '2', '5/2', '3', '4', '5', '6']\n" | |
] | |
} | |
], | |
"source": [ | |
"print([str(x) for x in sorted({Fraction(X1(w), X2(w)) for w in omega})]) # Wertemenge X1/X2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## (c) $2 \\cdot X_1 - 3 \\cdot X_2$\n", | |
"Die ist nun äquivalent zu den beiden oberen Fällen zu lösen." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[-16, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9]\n" | |
] | |
} | |
], | |
"source": [ | |
"print(sorted({2*X1(w) - 3*X2(w) for w in omega})) # Wertemenge 2*X1 - 3*X2" | |
] | |
} | |
], | |
"metadata": { | |
"hide_code_all_hidden": false, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.1" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment