Calcul de π avec la méthode de Monte-Carlo

Publié le par Magnange

Comme je ne trouvais pas de programme en langage C permettant de calculer π, sur internet, et bien maintenant il y est. C'est un programme perfectible mais qui marche très bien. L'explication vient de wikipédia, je ne fournis que le programme.


Explication :


On appelle méthode de Monte-Carlo toute méthode visant à calculer une valeur numérique, et utilisant des procédés aléatoires, c'est-à-dire des techniques probabilistes. Le nom de ces méthodes fait allusion aux jeux de hasard pratiqués à Monte-Carlo.

Les méthodes de Monte-Carlo sont particulièrement utilisées pour calculer des intégrales en dimensions plus grandes que 1 (en particulier, pour calculer des surfaces, des volumes, etc.)

Le véritable développement des méthodes de Monte-Carlo s'est effectué, sous l'impulsion de John von Neumann et Ulam notamment, lors de la Seconde Guerre mondiale et des recherches sur la fabrication de la bombe atomique. Notamment, ils ont utilisé ces méthodes probabilistes pour résoudre des équations aux dérivées partielles.

Cette méthode est proche de celle de Buffon.

Soit un point M de coordonnées (x,y) 0<x<1 et 0<y<1.

On tire aléatoirement les valeurs de x et y.

Si x2 + y2 < 1 alors le point M appartient au disque de centre (0,0) de rayon 1.

La probabilité que le point M appartienne au disque est π/4.

En faisant le rapport du nombre de points dans le disque par rapport au nombre de tirage on obtient une approximation du nombre π/4 si le nombre de tirage est grand.


Le programme :


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int main(int argc, char * argv[]){
  5.     int i, P=0, N=atoi(argv[1]);
  6.     float x, y, g;
  7.     srand(time(0));
  8.     for(i=1;i<=N;i++){
  9.         x=(float)rand()/RAND_MAX;
  10.         y=(float)rand()/RAND_MAX;
  11.         x*=x;
  12.         y*=y;
  13.         printf("%f n",x);
  14.         if((x+y)<=1){
  15.             P=P+1;
  16.         }
  17.     }
  18.     g=(P*4)/N;
  19.     printf("Pi vaut %f n", g);
  20.     return g;
  21. }
Ceci est une aide pas une insitation à la tricherie.


Publié dans Informatique

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
B
HAHA oui Chevalier et Laspallès 2 d'ailleurs le dieu de ce blog avait un faux air de Laspallès quand il avait la barbe... kln
Répondre
A
Buffon c'est le gardien de but italien , c'est ça ?
Répondre
M
Fout à tait !(nous sommes des jumeaux d'humour)