diff --git a/Exercise sheet 2/exercise_sheet_02.ipynb b/Exercise sheet 2/exercise_sheet_02.ipynb index 2dc4de8..4303896 100644 --- a/Exercise sheet 2/exercise_sheet_02.ipynb +++ b/Exercise sheet 2/exercise_sheet_02.ipynb @@ -20,12 +20,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "026433a4", "metadata": {}, "outputs": [], "source": [ - "NAME = \"\"\n", + "NAME = \"Kees van Kempen\"\n", "NAMES_OF_COLLABORATORS = \"\"" ] }, @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "cb41d2a1", "metadata": { "deletable": false, @@ -158,12 +158,34 @@ } }, "source": [ - "YOUR ANSWER HERE" + "Reasoning from the PDF, we can find the CDF and invert that as follows.\n", + "\n", + "$$\n", + "f_X(x) = \\lambda{}e^{-\\lambda{}x}\n", + "$$\n", + "$$\n", + "\\implies F_X(x)\n", + " = \\int_{-\\infty}^x f_X(t)dt\n", + " = \\int_0^x \\lambda{}e^{-\\lambda{}t}dt\n", + " = \\left[ -e^{\\lambda{}t} \\right]_{t = 0}^x\n", + " = 1 - e^{\\lambda{}x}\n", + " = \\mathbb{P}(X \\leq x) = p\n", + "$$\n", + "for $x \\in [0, \\infty)$, otherwise zero.\n", + "\n", + "Now we seek $x$ as a function of $p$.\n", + "\n", + "$$\n", + "1 - e^{\\lambda{}x} = p\n", + "\\iff -\\lambda{}x = \\ln{(1-p)}\n", + "\\iff x = \\frac{\\ln{(1-p)}}{-\\lambda} = F^{-1}_X(p)\n", + "$$\n", + "which works, as $1 - p \\geq 0$ as $p \\in [0, 1]$, allowing $\\ln{0} = -\\infty$." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "e6b6428c", "metadata": { "deletable": false, @@ -178,20 +200,35 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "def f_inv_exponential(lam,p):\n", - " # YOUR CODE HERE\n", - " raise NotImplementedError()\n", - " \n", - "# plotting\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + " return -np.log(1 - p)/lam\n", + "\n", + "f_X = lambda x, lam: lam*np.exp(-lam*x) if x >= 0 else 0\n", + "\n", + "for lam in [1.5]:\n", + " pdf = lambda x: f_X(x, lam)\n", + " samples = [inversion_sample(lambda p: f_inv_exponential(lam, p)) for _ in range(100000)]\n", + " compare_plot(samples, pdf, -1, 4, 30)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "804aedbf", "metadata": { "deletable": false, @@ -695,7 +732,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" },