undefined

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content
Previous: La méthode des trapèzes Next: La méthode d'Euler

Méthode de Monte Carlo pour le calcul d'aire.

Difficulté : Moyenne

Le but de cette fiche est de présenter la méthode de Monte Carlo pour calculer l'aire sous une courbe représentative d'une fonction. Pour simplifier, on supposera ici que nos fonctions sont toutes positives sur l'intervalle sur lequel on les considère.

Définissons d'abord ce qu'est l'aire sous la courbe représentative d'une fonction sur un intervalle [a,b] : C'est tout simplement l'aire comprise entre la courbe représentative, l'axe des abscisses et les droites x=a et x=b.

Illustration

Décrivons à présent la méthode de Monte Carlo pour calculer l'aire sous la courbe d'une fonction f sur un intervalle [a,b] :

  1. On choisit un rectangle qui contient l'aire qui nous intéresse. Le plus simple est de prendre le rectangle dont un coté est le segment [AB] où A(a,0) et B(b,0) et dont l'autre coté vaut le maximum de f sur [a,b]. courbe et rectangle
  2. On choisit des points au hasard dans le rectangle. Plus le nombre de points est important plus notre résultat sera précis. Courbe et points
  3. On compte le nombre de points qui sont dans la surface que l'on cherche à approximer (ici on compte les points sous la courbe).
  4. L'approximation de l'aire cherchée est alors nombre de points dans la surfacenombre total de points×AireRectangle choisi

Créez un programme qui prend en entrée une fonction f et les deux bornes a et b de l'intervalle et qui affiche (avec return) une approximation de l'aire sous la courbe représentative de f sur l'intervalle [a,b] calculée par la méthode de Monte Carlo en utilisant 1 000 000 points aléatoires. Pour valider le test, il faut trouver une valeur à 0.05 près de la valeur exacte.

Aide
  • Pour chosir un point au hasard, on choisit son abscisse x au hasard entre a et b et son ordonnée y au hasard pour qu'il soit dans le rectangle qu'on a choisi (donc normalement entre 0 et le maximum de f). Pour choisir un nombre au hasard entre a et b, on pourra utiliser la fonction ***uniform(a,b)***.
  • Pour trouver le maximum de la fonction f sur l'intervalle [a,b], on pourra soit se créer une fonction personnelle qui fait le calcule ou bien utiliser directement la fonction maximum(f,a,b) dont vous pouvez voir le code en changeant d'onglet dans la fenetre de programmation ci dessous.

Si vous validez les tests, vous pourrez voir les aires calculées s'afficher.

Calcul d'aire par la méthode de Monte Carlo
from random import uniform
from Trouver_max_fonction import maximum
def mon_programme(f,a,b):
#Ne pas toucher ce qui précède
#Les valeurs pour les variables en entrée seront automatiquement données
#Ecrire ci-dessous en n'oubliant pas d'indenter
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Visualisation

On va tenter de visualiser ce que donne cette méthode. Pour cela, vous devez copier-coller votre code précédent dans la fenêtre qui suit puis le modifier pour qu'il renvoie (avec return) non plus l'aire mais la liste des abscisses et la liste des ordonnées des points que votre programme tire au hasard. Pour renvoyer les deux listes, on écrira sous cette forme (à vous de mettre votre propre nom de liste) : return liste_abscisses,liste_ordonnées

Une fois que votre nouveau programme marche, vous pourrez modifier les paramètres comme le nombre de points affichés (ne montez pas trop haut car afficher beaucoup de point prend du temps) ou bien la fonction (attention de bien l'écrire sous forme de chaine de caractère comme dans l'exemple donné). Vous pouvez aussi réduire le nombre de points tirés au hasard (1 000 000 c'est beaucoup trop pour un affichage) pour gagner un peu en vitesse.

Visualisation de la méthode de Monte Carlo
from random import uniform
from Trouver_max_fonction import maximum
#Les paramètres que vous pouvez modifier pour visualiser
f="sqrt(1-x**2)"
a=0
b=1
nombre_de_points_affichés=500
def mon_programme(f,a,b):
#Copiez collez votre programme précédent ci-dessous pour le modifier
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content