begin process at 2010 09 04 17:42:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

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

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


 Information sur la source

Note :
9 / 10 - par 4 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Math & Algorithmes Classé sous :montecarlo, aléatoire, pi Niveau :Débutant Date de création :08/02/2007 Vu / téléchargé :2 839 / 101

Auteur : Shakan972

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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()


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture SNAKE
Source avec Zip Source avec une capture SPACE INVADERS
Source avec une capture ANALYSE FRÉQUENTIELLE D'UNE PHRASE
Source avec Zip Source avec une capture ATTRACTION ÉLECTROSTATIQUE ENTRE CHARGES ÉLECTRIQUES (LOI DE...
Source avec Zip Source avec une capture RÉSOLUTION D'ÉQUATIONS DU SECOND DEGRÉS

 Sources de la même categorie

PRONOSTIQUES DE POKER PRÉ-FLOP par kawamythe
CALCUL LIST DE NOMBRES PREMIERS par White541
TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip GÉNÉRATION D'UN LABYRINTHE AVEC RECHERCHE DU CHEMIN LE PLUS ... par mehdicherti
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI MULTITHREAD par amaury74
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI par amaury74
Source avec une capture TRADUCTEUR LEET SPEAK par hazkaal
Source avec une capture HISTOGRAMME ALÉATOIRE par bastelmann
Source avec une capture JEU DU CHIFFRE PYTHON par alexei12

Commentaires et avis

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

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. :)

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

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. :)

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!

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


Discussions en rapport avec ce code source dans le forum

Tuto Swinnen : mouvement aléatoire ? [ par nemo43 ] Bonjour à tous,J'étudie le langage python - c'est un loisir - avec le livre de Gérard Swinnen (comme beaucoup de francophones je pense ). Je bloque su intégrale [ par phymed ] Bonjours a tous, je débute en python, et j'ai un petit problème: j'ai une fonction P(x)et je dois calculer et enregistrer dans un tableau chaque vale une commande pour trouver un element de maillage sur Abaqus [ par squallxx ] Bonjour, Ma question est a la limite python/Abaqus mais comme je n'ai trouvé aucun forum sur Abaqus je demande ici. J'ai decouvert la commande finA


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales