{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pi", "Approximation", "première", "générale", "Monte-Carlo" ] }, "source": [ "# Approximation du nombre $\\pi$ par la méthode de Monte-Carlo" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "première-générale", "spécialité" ] }, "source": [ "## Présentation de l'activité\n", "- **Niveau de classe :** \n", " - Classe de première de la voie générale (spécialité mathématiques)\n", " - Classe de première de la voie technologique (tronc commun).\n", "- **Référence au programme :** \n", " - Spécialité mathématiques de première générale: *Méthode de Monte Carlo : estimation du nombre $\\pi$*.\n", "- **Description :** Activité de découverte d'un méthode probabiliste d'estimation : la méthode de Monte-Carlo. Le but ici est d'estimer l'aire du quart de disque de rayon $1$ afin d'obtenir une approximation du nombre $\\pi$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectifs\n", "Il est courant d'utiliser des nombres aléatoires pour estimer des quantités numériques. Nous allons ici utiliser des variables aléatoires de loi uniforme afin d'estimer le nombre $\\pi$. \n", "Pour cela nous allons:\n", "- générer des points aléatoirement et uniformément dans un carré de coté 1;\n", "- calculer la proportion de points situés en dessous du quart de cercle de rayon 1. Cela nous permettra de donner une estimation de son aire;\n", "- approcher le nombre $\\pi$ sachant que l'aire d'un quart de disque de rayon 1 est $\\frac{\\pi}{4}$. \n", "\n", "![Monte Carlo](img/monteCarlo.png \"Méthode de Monte Carlo\")" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "estimation", "simulation", "random" ] }, "source": [ "## Estimation\n", "La fonction `random` de la librairie `random` permet de générer un nombre aléatoirement et uniformément entre 0 et 1." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.108\n" ] } ], "source": [ "from random import random as rd\n", "\n", "nbPoints = 1000\n", "\n", "s = 0\n", "for i in range(nbPoints):\n", " x,y = rd(),rd()\n", " if x**2+y**2<1:\n", " s=s+1\n", "estimPi = 4*s/nbPoints\n", "\n", "print(estimPi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "