Calcul de π avec la méthode de Monte-Carlo
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 :
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int main(int argc, char * argv[]){
- int i, P=0, N=atoi(argv[1]);
- float x, y, g;
- srand(time(0));
- for(i=1;i<=N;i++){
- x=(float)rand()/RAND_MAX;
- y=(float)rand()/RAND_MAX;
- x*=x;
- y*=y;
- printf("%f n",x);
- if((x+y)<=1){
- P=P+1;
- }
- }
- g=(P*4)/N;
- printf("Pi vaut %f n", g);
- return g;
- }