Accueil

ESTIMATION DU NOMBRE PI A L'AIDE DE TIRAGES ALÉATOIRES

cible et fléchettes


Il existe de multiples techniques pour approximer le nombre pi, les unes plus exotiques que les autres.
Voici détaillée ici une méthode assez originale dite "méthode des fléchettes" mettant à profit la fonction RAND qui génère un nombre pseudo-aléatoire.

Considérons tout d'abord un carré de coté 2 et le cercle inscrit dans ce carré -voir la photo plus bas.
Ce cercle aura pour rayon 1, et constituera notre cible.
On lance maintenant  de manière totalement aléatoire un grand nombre de fléchettes sur la cible-imaginons un dispositif qui balaie le carré en tous sens et lâche une fléchette au hasard de temps en temps.

Notons N le nombre total de fléchettes lancées, et n celui des fléchettes qui atteignent la cible.

(Dans toute la suite, on rappelle que les fléchettes qui ratent la cible restent malgré tout dans le carré)

Il semble assez évident que n sera d'autant plus grand que la surface s de la cible sera grande.
n est donc directement proportionnel à s, ce qui se traduit en termes mathématiques par l'égalité:
s = k. n

Par ailleurs, nous avons aussi proportionnalité entre N et S, surface du carré, ce qui conduit à:
S = k. N

En constatant de plus que S = 4 (surface du carré de côté 2) et que s = pi (surface du cercle de rayon 1), on tire:

s / S = n / N = pi / 4 d'où: pi = 4 * n/N

La simple connaissance de n et N, fruits du hasard, conduit donc à pi, c'est rigolo non ?

Rigolo peut-être, mais il serait impossible de réaliser simplement l'expérience car les fléchettes se gêneraient vite sur la cible.
En revanche, on peut facilement simuler informatiquement une telle situation à l'aide d'un petit programme écrit en langage PhP:

Pour faire tourner le programme, c'est par ici...
Pour analyser ce programme, c'est par là...

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<p>
<form action="<?php echo $_SERVER[’PHP_SELF’]; ?>" method="post">
Nombre de fléchettes: <input type="number" size="7" name="N"/><input type="submit" value="Ok" /></form>
</p>

<?php

if(  $_POST['N']  !=  0 )
{

$N = $_POST['N'];

function rnd()
    {
    return rand (-1000,1000) / 1000;
    }

for ( $n = 1 ; $n <= $N ; $n++ )

    {

    $x = rnd();
    $y = rnd();
    $r = sqrt ( pow($x,2) + pow($y,2) );

        if ( $r  < 1)
            {
            $in++;
            }
    }

$pi = round ( 4 * $in / $N , 4 );
$pourcent = round ( abs( (($pi - pi()) / pi()) * 100 ) , 1 );

echo "Avec $N fléchettes, on obtient PI~ <font color=red>$pi</font><br /> Ecart avec pi : $pourcent %";

}
?>


Les lignes 1 à 4 proposent à l'utilisateur de saisir son nombre de fléchettes qui est alors stocké dans la variable $N
Lignes 13 à 16: on définit une fonction qui génère un nombre aléatoire compris entre -1 et 1.
La fonction précédente est appelée à deux reprises aux lignes 22 et 23 afin de définir 2 variables $x et $y, coordonnées de notre fléchette.
Ligne 24: La variable $r contient la racine carrée de la somme des carrés de $x et $y. Selon le théorème de Pythagore, cela correspond à la distance entre le centre O de la cible et la fléchette.
Lignes 26 à 29: si $r < 1 c'est à dire si la fléchette est bien dans la cible, on incrémente de 1 la variable $in qui fait office de compteur de fléchettes dans la cible tandis que $N fait office de compteur de fléchettes lancées au total.
Ligne 18: On renouvelle l'attribution de $x, $y, le calcul de $r puis le test sur ce dernier, $N fois.
Ligne 32: On calcule enfin la variable $pi selon la formule pi = 4 * n/N évoquée plus haut, ce qui donne ici $pi = 4 * $in / $N
Ligne 35: Affichage du résultat.