Aiguille de Buffon

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

L'aiguille de Buffon est une expérience de probabilité proposée en 1733[1] par Georges-Louis Leclerc de Buffon, un scientifique français du XVIIIe siècle. Cette expérience fournit une approximation du nombre Pi. Son analyse met en œuvre un cas simple d'espace de probabilités bidimensionnel et continu.

Procédé pratique[modifier | modifier le code]

Il s'agit de lancer un grand nombre de fois une aiguille sur un parquet. Le parquet est composé de planches parallèles de même largeur. On comptabilise le nombre de fois où l'aiguille tombe à cheval sur [au moins] une rainure du parquet (cas "favorable") par rapport au nombre de lancers totaux. Au fur et à mesure que le nombre de lancers augmente, le quotient se rapproche d'un certain nombre permettant de retrouver \pi (par exemple, si la longueur de l'aiguille est égale à la largeur d'une planche, ce nombre sera 2/π).

Conditions, hypothèses[modifier | modifier le code]

Pour que l'expérience fonctionne correctement,

  • Les lancers successifs doivent être nombreux, indépendants, et on doit considérer une situation d'équiprobabilité (la position de l'aiguille est indifférente, en position et en angle, par rapport au parquet).
  • Tous les lancers doivent être reproduits dans des conditions identiques.

Pour que la formule soit simple à calculer,

  • La longueur de l'aiguille doit être inférieure ou égale à la largeur d'une planche du parquet.

Étude mathématique[modifier | modifier le code]

2 aiguilles de Buffon (noires) sur un parquet.

Soient :

  • l le réel positif correspondant à la largeur d'une latte de parquet ;
  • a le réel positif correspondant à la longueur de l'aiguille ;
  • \theta le réel compris entre 0 et \pi/2 correspondant à l'angle géométrique formé avec les rainures du parquet ;
  • r le réel positif correspondant à la distance du centre de l'aiguille à la rainure la plus proche.

D'après les hypothèses, et en utilisant toutes les symétries, on peut considérer que :

Point de vue géométrique simple[modifier | modifier le code]

Considérons n lancers (n assez grand) de cette aiguille. On peut considérer alors que toutes les positions différentes de l'aiguille mises bout à bout forme un polygone à n côtés. Plus n est grand plus ce polygone se rapprochera d'un cercle. Le périmètre P de ce cercle vaut alors P=n \times a. Le diamètre de ce cercle vaudra D = P/\pi = n \times a/\pi. Le problème revient à savoir : Combien de rainures parallèles sont coupées par le polygone, ou encore combien y a-t-il de rainures à l'intérieur du cercle ?

Le nombre d'intersections du cercle avec les rainures R est donné par R = 2 D/l. Finalement la probabilité que l'aiguille coupe une rainure est donnée par p = \frac{R}{n} = 2\times \frac{D}{l}\frac{1}{n} = 2 \times \frac{na}{\pi \times l \times n} et en simplifiant p = \frac{2a}{\pi\times  l}

Cas limite[modifier | modifier le code]

Considérons un lancer isolé. Si l'aiguille touche un point de la rainure avec sa pointe sans la chevaucher, alors on a un triangle rectangle dont l'hypoténuse est la moitié de l'aiguille, un côté est la longueur  r, l'autre côté une portion de la rainure. On a alors :

\sin \theta = \frac r{\frac a2} \Leftrightarrow \frac a2 \sin \theta = r

Cas défavorable[modifier | modifier le code]

Par conséquent, si l'aiguille est pleinement sur une planche, on aura :

\frac a2 \sin \theta < r

Cas favorable[modifier | modifier le code]

Si elle chevauche au moins une rainure (la plus proche), on aura :

\frac a2 \sin \theta > r

Analyse pour "a plus petit que l"[modifier | modifier le code]

On traite ici du cas où l'aiguille est de même longueur ou plus courte que l'écart entre les lames du parquet.

De même que, pour les probabilités discrètes on forme le quotient des cas "favorables" aux cas "totaux",

on aura dans [0;\frac {\pi}2] x [0;\frac l2] la probabilité pour une aiguille de tomber sur une rainure l'expression :

 \frac {Aire_{favorable}}{Aire_{totale}}

Soit (dessiner l'espace (r,\theta) et la limite):

P\left(favorable\right) = \frac {\int_{0}^\frac{\pi}2 \mathrm d \theta \int_{0}^{\frac a2 \sin \theta} \, \mathrm d r}{\frac {\pi}2 \frac l2}


P\left(favorable\right) = \frac {4}{\pi l} \int_{0}^\frac{\pi}2 \frac a2 \sin \theta \, \mathrm d \theta =  \frac {2a}{\pi l}

Après une multitude de lancers, d'après la loi des grands nombres, la valeur pratique tendra à se rapprocher de la valeur théorique \frac {2a}{\pi l}. On peut alors facilement retrouver pi en connaissant les données de l'expérience (l et a).

En effet, soit p la proportion qui estime P : alors on a un estimateur pour \pi=\frac {2a}{lp}

Analyse pour "a plus grand que l"[modifier | modifier le code]

On traite ici du cas où l'aiguille est plus longue que l'écart entre les lames du parquet (penser à des aiguilles à tricoter). Le cas "favorable" est encore : "l'aiguille croise [au moins] une lame de parquet".

Le cas "défavorable" étant plus facile à exprimer mathématiquement, on a (dessiner l'espace (r,\theta) et la limite) :

P=1-\dfrac{\int_0^{\arcsin(\frac la)}d \theta \int_{\frac a2 \sin \theta}^{\frac l2} d x}{\frac {\pi l}{4}}

On passe les étapes intermédiaires pour obtenir :

P=\frac {2a}{\pi l}\left ( 1-\sqrt{1-\frac {l^2}{a^2}}\right )+\left ( 1-\frac {2 \arcsin \frac la}{\pi} \right )

On confirme que pour l=a, on retrouve la formule précédente (établie pour l >= a : une aiguille courte).

La formule permet encore d'estimer \pi en fonction de (1-p)p est la proportion qui estime P puisque (1-P) a  \pi en facteur (le faire).

En posant \frac la = u et en développant au voisinage de u=0, on trouve l'expression de la probabilité pour une très longue aiguille (formule approchée) :

P_{a>>l}=1-\frac l{\pi a}

qui tend vers 1 pour a très grand, comme on l'espérait.

Simulation numérique[modifier | modifier le code]

Erreur en pourcent sur l'estimation de \pi (un million d'essais)
\frac al 0.1 0.2 0.5 1 2 5 10 100
formule exacte 0.4 -0.1 0.1 0.001 -0.1 -0.06 -0.7 1.05
formule approchée - - - - -2 -0.5 -0.3 1.05

Conclusions :

  • la meilleure estimation est obtenue pour l=a
  • la dégradation de l'estimation est rapide, mais se stabilise rapidement
  • l'hypothèse l>=a n'est pas nécessaire pour conduire l'expérience
  • la formule approchée (pour a grand) donne de bons résultats dans son domaine d'application

Programme (python) de simulation[modifier | modifier le code]

# let l=2, we must generate a uniform x in [0,1]
# we must also generate a uniform theta in [0, pi/2]
 
# we have :
#  success if sin(theta) > 2x/a
#  failure otherwise
import random
import math
Max=1000000
for a in [0.2, 0.4, 1, 2, 4, 10, 20, 200]:
    Count=0
    for i in range(Max):
        x=random.uniform(0,1)
        t=random.uniform(0,math.pi/2)
        if math.sin(t)>2*x/float(a):
            Count+=1
    if a <=2:
        print a/2.,100*(a/(float(Count)/float(Max))-math.pi)/math.pi
    else:
        P=float(Count)/float(Max)
        print a/2.,100*(float(a)/(P-1.)*(1.-math.sqrt(1-(2/float(a))**2))-2/(P-1.)*math.asin(2./float(a))-math.pi)/math.pi
        print a/2.,100.*(2/float(a)/(1.-P)-math.pi)/math.pi

Programme en langage R de simulation numérique et graphique[modifier | modifier le code]

# 50000 (par défaut) simulations de jets de baguette.
# Illustration graphique des 10 premiers jets.
# a est la longueur de la baguette. L est la largeur d'une latte.
# Cas a<L. a = 8, L = 10 par défaut. On peut les modifier en lançant
# la fonction par exemple : buffon(a = 4, L = 4)…
buffon <- function(a = 8, L = 10, nbsim = 50000){
  r <- runif(nbsim, 0, L / 2)
  xG <- runif(10, 0, L) ; yG <- rep(a / 2, 10) ; t <- 1:10
  Theta <- runif(nbsim, 0, pi)
  bSinTheta <- a / 2 * sin(Theta)
  xA <- xG - bSinTheta[t] ; yA <- a / 2 + a / 2 * cos(Theta)[t]
  xB <- xG + bSinTheta[t] ; yB <- a / 2 - a / 2 * cos(Theta)[t]
  SerieCoupe <- r < bSinTheta
  freqCoupe <- sum(SerieCoupe) / nbsim
# Affichage du résultat et des graphiques
  cat("Fréquence simulée de l'événement l'aiguille coupe une rainure",
    "\nà partir de", nbsim, "simulations =", freqCoupe, "\n\n")
  plot(t, t, xlim = c(- L / 2, 3 * L / 2), ylim = c(0, a),
     type = "n", asp = 1,
     main = "Simulation avec R de 10 lancers de baguette")
     abline(v = c(0, L), col = "red")
     for(i in t){
       points(xG[i], yG[i], pch = "+")
       points(xA[i], yA[i], pch = "A", cex = .7)
       points(xB[i], yB[i], pch = "B", cex = .7)
       lines(c(xA[i], xB[i]), c(yA[i], yB[i]))
       Sys.sleep(1)
                }
}

Résultat numérique de la fonction R : buffon() :
Fréquence simulée de l'événement "l'aiguille coupe une rainure" à partir de 50000 simulations = 0.5079
Résultat graphique de la fonction R : buffon() :

BuffonR.jpg


Note et référence[modifier | modifier le code]

  1. Mémoire sur le jeu du Franc Carreau, présenté à l’Académie des Sciences (1733)

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Martin Aigner et Günter M. Ziegler (trad. Nicolas Puech), Raisonnements divins : quelques démonstrations mathématiques particulièrement élégantes, Springer Verlag, 2e éd., 2006, 270 p. (ISBN 978-2-287-33845-8)

Liens externes[modifier | modifier le code]