{ "cells": [ { "cell_type": "markdown", "metadata": { "hideCode": true, "hidePrompt": true }, "source": [ "# À propos du calcul de $\\pi$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## En demandant à la lib maths\n", "Mon ordinateur m’indique que $\\pi$ vaut *approximativement*" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "hideCode": true, "hideOutput": true, "hidePrompt": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.141592653589793\n" ] } ], "source": [ "from math import *\n", "print (pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## En utilisant la méthode des aiguilles de Buffon\n", "Mais calculé avec **la méthode** des [aiguilles de Buffon](https://fr.wikipedia.org/wiki/Aiguille_de_Buffon), on obtiendrait comme **approximation** :" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.128911138923655" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "np.random.seed(seed=42)\n", "N = 10000\n", "x = np.random.uniform(size=N, low=0, high=1)\n", "theta = np.random.uniform(size=N, low=0, high=pi/2)\n", "2/(sum((x+np.sin(theta))>1)/N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Avec un argument \"fréquentiel\" de surface\n", "Sinon, une méthode plus simple à comprendre et ne faisant pas intervenir d’appel à la fonction\n", "sinus se base sur le fait que si $ X \\sim U(0,1) $ et $ P \\sim U(0,1) $ alors $ P[X^2 + X^2 ≤ 1] = \\pi/4 $ (voir\n", "[méthode de Monte Carlo sur Wikipedia](https://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte-Carlo)). Le code suivant illustre ce fait:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "np.random.seed(seed=42)\n", "N = 1000\n", "x = np.random.uniform(size=N, low=0, high=1)\n", "y = np.random.uniform(size=N, low=0, high=1)\n", "accept = (x*x+y*y) <= 1\n", "reject = np.logical_not(accept)\n", "fig, ax = plt.subplots(1)\n", "ax.scatter(x[accept], y[accept], c='b', alpha=0.2, edgecolor=None)\n", "ax.scatter(x[reject], y[reject], c='r', alpha=0.2, edgecolor=None)\n", "ax.set_aspect('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il est alors aisé d’obtenir une approximation (pas terrible) de p en comptant combien de fois,\n", "en moyenne, X2 + Y2 est inférieur à 1 :" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.141864" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "4*np.mean(accept)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "hide_code_all_hidden": true, "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }