Skip to content

Instantly share code, notes, and snippets.

@halexus
Created March 12, 2019 21:35
Show Gist options
  • Save halexus/cf7b0317bbddc5b8b4360d9cdef8833c to your computer and use it in GitHub Desktop.
Save halexus/cf7b0317bbddc5b8b4360d9cdef8833c to your computer and use it in GitHub Desktop.
Lösung mit Python von Beispiel 4 Wahrscheinlichkeitstheorie
Display the source blob
Display the rendered blob
Raw
{
"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