Lucas Willems

LUCAS WILLEMS

Un étudiant de 27 ans passionné par les maths et la programmation

English

Calcul d'aires avec la méthode de Monte Carlo

Article

Le hasard est quelque chose d'intriguant car il est insaisissable, et pourtant, ses applications sont nombreuses notamment dans le domaine des probabilités, statistiques... Mais aujourd'hui, nous allons voir que le hasard peut aussi permettre de calculer de manière approchée n'importe quel type de surface, et ce grâce à la méthode de Monte Carlo. La vidéo suivante (désolé d'avance pour le très mauvais son) a alors pour but de vous faire découvrir cet aspect étonnant du hasard.

Explication de la méthode de Monte Carlo


Lien et code source

Lien de téléchargement : Geogebra 5 avec le plugin Jython

Code Python utilisé :

import math
import random
import time
def f(x):
    return a*x*x+b*x+c
$compteur.text = "Compteur : 0"
$aire.text = "Aire : 0"
delta = 0
a = 0
while delta <= 0:
    while a == 0:
        a = int(input("A (different de 0) : "))
    b = int(input("B : "))
    c = int(input("C : "))
    delta = b*b - 4*a*c
    if delta <= 0:
        dialog("Delta n'etant pas superieur a 0, vous devez ressaisir a, b et c.")
        a = 0
XA = (-b - math.sqrt(delta)) / (2*a)
XB = (-b + math.sqrt(delta)) / (2*a)
XM = (-b)/(2*a)
f = Function(f);
L = math.fabs(XA - XB)
H = a*XM*XM + b*XM + c
A = Point(XA,0)
A.visible = False
B = Point(XA,H)
B.visible = False
C = Point(XB,H)
C.visible = False
D = Point(XB,0)
D.visible = False
Polygon(A, B, C, D)
compte = 0
N = int(input("Nombre de point aleatoire : "))
for i in range(N):
    temps = $temps.value
    time.sleep(temps)
    XR = random.uniform(XA, XB)
    YR = random.uniform(0, H)
    p = Point(XR, YR)
    # SetPointType(p,"cross");
    YN = a*XR*XR + b*XR + c
    if (a > 0 and YR >= YN) or (a < 0 and YR <= YN):
        compte += 1
        p.color = Color.RED
    aireTrouvee = (compte/N)*L*H
    $compteur.text = "Compteur : " + str(compte)
    $aire.text = "Aire : " + str(aireTrouvee)
aireATrouver = math.pow(delta, 1.5)/(6*a*a)
text = "Aire trouvee : " + str(aireTrouvee) + "; Aire a trouver : " + str(aireATrouver) + "; Difference d'aire : " + str(math.fabs(aireATrouver - aireTrouvee))
dialog(text)

Recherche

Voici les recherches relatives à cette page :

Commentaires

Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.