begin process at 2008 08 29 03:56:12
1 233 496 membres
37 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉTERMINATION APPROXIMATIVE DE PI À L'AIDE DE LA MÉTHODE DE MONTE CARLO


Information sur la source

Description

J'ai donné une explication du code en commentaire dans l'entête du programme

Source

  • # -*- coding: cp1252 -*-
  • ##################################
  • # #
  • # Programme : Monte Carlo.py #
  • # Crée par : Shakan972 #
  • # Date de création : 7/02/07 #
  • # #
  • ##################################
  • ###################################################################################
  • #
  • # Ce programme permet à l'aide de la méthode de Monte Carlo
  • # de déterminer de manière approximative pi
  • # Pour cela on trace un carré dans lequel figure un arc de cercle
  • # Puis l'on génère une série de points de coordonnées (x,y) dans ce carré
  • # Et à chaque fois le programme détermine si les points sont dans ou hors
  • # de l'arc de cercle à l'aide du calcul se réferrant à cette méthode puis enfin
  • # on fait le rapport du nombre de points dans le cercle (multiplié par 4)
  • # avec le nombre de points total ce qui au final permet la détermination
  • # approximative de pi.
  • #
  • ###################################################################################
  • #Importation des bibliothèques
  • from Tkinter import *
  • from random import *
  • #Fonction permettant d'effectuer une pause
  • def stop():
  • global flag
  • flag=0
  • #Fonction permettant de démarrer le programme ou bien de le reprendre si il a été stoppé
  • def demarrer():
  • global flag
  • if flag==0:
  • flag=1
  • generateur_nbre_aleat()
  • #Cette fonction permet de différencier les points étant soit dans l'arc de cercle ou bien hors de l'arc de cercle
  • #La couleur du point tracé varie donc en fonction de la position du point dans le carré
  • def points_aleat(x,y):
  • global pts_dans_cercle
  • if (x-100)**2+(y-100)**2<90000:
  • pts_dans_cercle=pts_dans_cercle+1
  • can1.create_oval(x-2,y-2,x,y,fill='green')
  • else:
  • can1.create_oval(x-2,y-2,x,y,fill='red')
  • #Cette fonction permet le tirage de points de coordonnées aléatoires dans le cercle
  • def generateur_nbre_aleat():
  • global x,y,pts_dans_cercle,pts_total,pi,flag
  • x=randint(100,400)
  • y=randint(100,400)
  • points_aleat(x,y)
  • pts_total+=1
  • pi=float((pts_dans_cercle*4.)/(pts_total))
  • result.configure(text = "Estimation de pi = "+str(pi))
  • pts_cercle.configure(text= "Nombre de points dans le cercle = "+str(pts_dans_cercle))
  • pts_tot.configure(text="Nombre de point total déjà placés = "+str(pts_total))
  • if flag<>0:
  • fen1.after(1,generateur_nbre_aleat)
  • #Programme principal
  • x=0
  • y=0
  • pts_dans_cercle=0
  • pts_total=0
  • pi=0
  • flag=0
  • fen1=Tk()
  • fen1.title("Détermination approximative de pi à l'aide de la méthode de Monte Carlo")
  • can1=Canvas(fen1,width=500,height=500)
  • can1.grid(row=0,column=0,columnspan=2)
  • #Création du carré et de l'arc de cercle figurant dans ce dernier
  • carre=can1.create_rectangle(100,100,400,400,width=1)
  • fra1=Frame(fen1)
  • fra1.grid(row=0,column=3,columnspan=2)
  • Button(fra1,text="Démarrer",command=demarrer).grid(row=1,column=0,pady=5)
  • Button(fra1,text="Arrêter",command=stop).grid(row=2,column=0,pady=5)
  • Button(fra1,text="Quitter",command=fen1.destroy).grid(row=3,column=0,pady=5)
  • result=Label(fen1)
  • result.grid(row=1,column=0,sticky=E)
  • pts_cercle=Label(fen1)
  • pts_cercle.grid(row=2,column=0,sticky=E)
  • pts_tot=Label(fen1)
  • pts_tot.grid(row=3,column=0,sticky=E)
  • fen1.mainloop()
# -*- coding: cp1252 -*-

##################################
#                                #
#   Programme : Monte Carlo.py   #
#   Crée par : Shakan972         #
#   Date de création : 7/02/07   #
#                                #
##################################

###################################################################################
#
#   Ce programme permet à l'aide de la méthode de Monte Carlo
#   de déterminer de manière approximative pi
#   Pour cela on trace un carré dans lequel figure un arc de cercle
#   Puis l'on génère une série de points de coordonnées (x,y) dans ce carré
#   Et à chaque fois le programme détermine si les points sont dans ou hors
#   de l'arc de cercle à l'aide du calcul se réferrant à cette méthode puis enfin
#   on fait le rapport du nombre de points dans le cercle (multiplié par 4)
#   avec le nombre de points total ce qui au final permet la détermination
#   approximative de pi.
#
###################################################################################

#Importation des bibliothèques

from Tkinter import *
from random import *

#Fonction permettant d'effectuer une pause

def stop():
    global flag
    flag=0
    
#Fonction permettant de démarrer le programme ou bien de le reprendre si il a été stoppé

def demarrer():
    global flag
    if flag==0:
        flag=1
        generateur_nbre_aleat()

#Cette fonction permet de différencier les points étant soit dans l'arc de cercle ou bien hors de l'arc de cercle
#La couleur du point tracé varie donc en fonction de la position du point dans le carré 

def points_aleat(x,y):
    global pts_dans_cercle
    if (x-100)**2+(y-100)**2<90000:
        pts_dans_cercle=pts_dans_cercle+1
        can1.create_oval(x-2,y-2,x,y,fill='green')
    else:
        can1.create_oval(x-2,y-2,x,y,fill='red')

#Cette fonction permet le tirage de points de coordonnées aléatoires dans le cercle 

def generateur_nbre_aleat():
    global x,y,pts_dans_cercle,pts_total,pi,flag
    x=randint(100,400)
    y=randint(100,400)
    points_aleat(x,y)
    pts_total+=1
    pi=float((pts_dans_cercle*4.)/(pts_total))
    result.configure(text = "Estimation de pi = "+str(pi))
    pts_cercle.configure(text= "Nombre de points dans le cercle = "+str(pts_dans_cercle))
    pts_tot.configure(text="Nombre de point total déjà placés = "+str(pts_total))
    if flag<>0:
        fen1.after(1,generateur_nbre_aleat)


#Programme principal
    
x=0
y=0
pts_dans_cercle=0
pts_total=0
pi=0
flag=0
    
fen1=Tk()
fen1.title("Détermination approximative de pi à l'aide de la méthode de Monte Carlo")
can1=Canvas(fen1,width=500,height=500)

can1.grid(row=0,column=0,columnspan=2)


#Création du carré et de l'arc de cercle figurant dans ce dernier

carre=can1.create_rectangle(100,100,400,400,width=1)

fra1=Frame(fen1)
fra1.grid(row=0,column=3,columnspan=2)

Button(fra1,text="Démarrer",command=demarrer).grid(row=1,column=0,pady=5)
Button(fra1,text="Arrêter",command=stop).grid(row=2,column=0,pady=5)
Button(fra1,text="Quitter",command=fen1.destroy).grid(row=3,column=0,pady=5)
result=Label(fen1)
result.grid(row=1,column=0,sticky=E)
pts_cercle=Label(fen1)
pts_cercle.grid(row=2,column=0,sticky=E)
pts_tot=Label(fen1)
pts_tot.grid(row=3,column=0,sticky=E)

fen1.mainloop()
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de aera group le 08/02/2007 09:05:06

    Le programme est interressant et assez bien constuit ! Mais tu pourrait améliorer ton interface graphique en ajoutant par exemple une barre de menu et en créant une fenêtre dans laquelle tu pourrait mettre l'explication du principe etc ... Tu devrais également essayer de tracer l'arc de cercle !
    Je te met 8/10 !

    ___________
    Aéra group

  • signaler à un administrateur
    Commentaire de Shakan972 le 09/02/2007 15:02:34

    Je prend note de ta critique et tâcherai d'apporter les modifications nécessaires le plus rapidement possible ^^
    En tout cas merçi pour ta note et bon coding. :)

  • signaler à un administrateur
    Commentaire de aera group le 09/02/2007 17:30:42

    En tout cas, la valeur de pi est très aproximative : statistiquement, plus on place de point plus on devrais se raprocher de la valeur réel de pi. Or après avoir placer 103188 points, ton programme estime pi à 3.12935612668 (on est encore loing des 3.14159265359). Néamoins, je trouve la méthode de calcule assez interressante !!!

    Bonne continuation

    ___________
    Aéra group

  • signaler à un administrateur
    Commentaire de Shakan972 le 09/02/2007 19:31:50

    Pour tout te dire il est clair que je ne témoignerai pas en faveur de cette méthode de calcul de pi étant donné l'existence de méthode plus efficace et moins tordu ( je parle là d'une remarque que l'on m'a faite concernant la source que j'ai réalisé en C ^^) mais j'avais besoin de voir la méthode à l'oeuvre visuellement parlant j'ai donc fait ce petit programme très rigolo et tout de même révélateur de la fonction de calcul de pi de cette technique probabiliste qu'est la méthode de Monte Carlo.

    Donc je pense m'être bien expliqué et j'espère réaliser de meilleurs programmes mathématiques celui n'étant qu'une simple surprise parmis les incroyables possibilités qui existent dans cette étrange monde que sont les mathématiques. :)

  • signaler à un administrateur
    Commentaire de vychnou le 15/02/2007 10:26:10

    Très intéressant, voir une méthode probabiliste à l'oeuvre :)
    Tu pourrais renommer ton fichier en .pyw vu que la console ne sert à rien ici.
    Bravo!

  • signaler à un administrateur
    Commentaire de xeolin le 14/04/2007 01:42:13

    Bravo !

    j'aime beaucoup les sources comme celle-ci, les algorithmes, même si le résultat est très aproximatif, la technique est très interessante ! 10/10

    bravo !

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS