L'aiguille de Buffon Grand Oral · mathématiques, sciences de la vie et de la Terre, histoire-géographie-géopolitique, numérique Un support de connaissances pour construire sa propre question

← Tous les textes du Grand Oral

MathsSVTHGGSPNSI

On jette une aiguille sur un parquet. Elle tombe à cheval sur deux lames, ou bien sur une seule. Cette question de salon, posée par un jeune homme de vingt-cinq ans devant l'Académie des sciences en 1733, a fait entrer le calcul intégral dans les probabilités. Elle cache le nombre $\pi$, que Laplace proposera de retrouver en jetant des aiguilles, et elle a donné lieu à l'une des fraudes les plus célèbres de l'histoire des statistiques.

Ce texte suit Buffon, le naturaliste qui fut d'abord géomètre, puis démontre son résultat de deux façons, avec une intégrale puis avec l'espérance. Il étudie ensuite la fiabilité de la méthode et ce qu'elle permet de mesurer aujourd'hui. Il rassemble des connaissances ; à chacun d'y choisir une direction et d'y construire sa question.

Sommaire
  1. Buffon, naturaliste et géomètre
  2. Le jeu du franc-carreau
  3. Le problème de l'aiguille
  4. La démonstration par une intégrale
  5. Une autre démonstration, par l'espérance
  6. Laplace : retrouver π en jetant des aiguilles
  7. Quelle confiance accorder au résultat ?
  8. Lazzarini : un résultat trop beau
  9. Mesurer des longueurs par le hasard
  10. Des directions pour construire sa question
Buffon, naturaliste et géomètre Portrait peint d'un homme d'une quarantaine d'années, perruque poudrée blanche, en habit rouge brodé d'or, la main sur la poitrine. Buffon peint par François-Hubert Drouais en 1753. Image : Wikimedia Commons, domaine public.

Georges-Louis Leclerc naît en 1707 à Montbard, en Bourgogne. Son père le destine au droit, qu'il étudie à Dijon, mais il s'intéresse surtout aux mathématiques, à la médecine et à la botanique. Vers 1732, il commence à signer « Buffon », du nom d'une terre familiale, et cherche à faire carrière dans les sciences à Paris, où il fréquente le géomètre Alexis Clairaut.

En 1733, il présente à l'Académie des sciences un mémoire sur le jeu du franc-carreau. Les rapporteurs, Clairaut et Maupertuis, saluent son savoir en géométrie et son invention. Le sujet est neuf : jusque-là, on calculait des probabilités en comptant des cas (les faces d'un dé, les cartes d'un jeu). Buffon calcule des probabilités en mesurant des aires, avec le calcul intégral, encore récent. En janvier 1734, il entre à l'Académie comme adjoint dans la section de mécanique. Il traduit ensuite un ouvrage de Newton sur le calcul des fluxions, l'ancêtre de notre calcul différentiel.

Sa carrière change de direction en 1739, quand il est nommé intendant du Jardin du roi, l'actuel Jardin des plantes. Il en fait l'un des grands centres scientifiques d'Europe et consacre le reste de sa vie à l'Histoire naturelle, une description de la Terre, des minéraux et des animaux en trente-six volumes, publiée de 1749 à sa mort en 1788. On y trouve des idées hardies pour l'époque : une Terre bien plus ancienne que ne le disaient les lectures de la Bible, et des espèces qui se transforment, ce qui fait de lui un précurseur, discuté, de Lamarck et de Darwin.

Pour estimer l'âge de la Terre, Buffon chauffe au rouge des boulets de fer de différentes tailles dans ses forges de Montbard et mesure leur temps de refroidissement. Il imagine la Terre comme un boulet qui refroidit depuis sa formation et, dans Les Époques de la nature (1778), annonce environ $75\,000$ ans, un chiffre scandaleux à l'époque. Le refroidissement d'un corps se modélise aujourd'hui par une équation différentielle du type $y' = a y + b$ : voir le texte sur la méthode d'Euler.

Statue de bronze verdi d'un homme assis dans un fauteuil, une plume à la main, posée sur un socle de pierre portant l'inscription BUFFON 1707-1788, dans un jardin. La statue de Buffon par Jean Carlus (1909), au Jardin des plantes de Paris. Photo : Jastrow, Wikimedia Commons, domaine public.

Le mémoire de 1733 est perdu. Buffon en reprend le contenu, sans doute en partie, en 1777 dans son Essai d'arithmétique morale, publié dans un supplément à l'Histoire naturelle. C'est là qu'on lit le problème de l'aiguille. L'Essai contient aussi une idée qui intéresse encore les statisticiens : Buffon propose de considérer comme « moralement nulle » une probabilité inférieure à $\dfrac{1}{10\,000}$, qu'il estime à partir du risque, lu dans les tables de mortalité, qu'un homme de cinquante-six ans en bonne santé meure dans la journée. Où placer le seuil à partir duquel un événement possible est traité comme impossible ? La question se pose toujours, par exemple pour les risques industriels ou les tests statistiques.

Le jeu du franc-carreau

On jette une pièce ronde sur un sol carrelé de carreaux carrés. Un joueur parie que la pièce tombera « franc-carreau », c'est-à-dire entièrement à l'intérieur d'un carreau, sans toucher de joint ; l'autre parie qu'elle touchera un joint. Quelle taille de pièce rend le jeu équitable ?

Un exemple à la main

Les carreaux ont un côté de $c = 20$ cm et la pièce un diamètre de $d = 4$ cm. La pièce est franc-carreau quand son centre est à plus de $2$ cm (son rayon) de chaque bord du carreau où il tombe : le centre doit tomber dans un petit carré de côté $20 - 4 = 16$ cm, au milieu du carreau.

Le centre tombe « au hasard » dans le carreau : la probabilité d'une région est son aire divisée par l'aire du carreau. Donc

$$P(\text{franc-carreau}) = \frac{16^2}{20^2} = \frac{256}{400} = 0{,}64.$$

Le joueur qui parie sur le franc-carreau gagne environ deux fois sur trois : la pièce est trop petite pour que le jeu soit équitable.

Le cas général Avec des carreaux de côté $c$ et une pièce de diamètre $d < c$, la probabilité du franc-carreau vaut $\left(\dfrac{c-d}{c}\right)^2$

Étape 1 : se ramener à un carreau. Tous les carreaux sont identiques. On peut donc regarder seulement celui où tombe le centre de la pièce, et supposer que ce centre est uniformément réparti dans ce carreau, un carré d'aire $c^2$.

Étape 2 : la région favorable. La pièce ne touche aucun joint si et seulement si son centre est à une distance au moins égale à $\dfrac{d}{2}$ de chacun des quatre côtés. Ces points forment un carré de côté $c - 2 \times \dfrac{d}{2} = c - d$, d'aire $(c-d)^2$.

Étape 3 : le quotient des aires. $P = \dfrac{(c-d)^2}{c^2} = \left(\dfrac{c-d}{c}\right)^2$.

Le jeu est équitable quand cette probabilité vaut $\dfrac12$ :

$$\left(\frac{c-d}{c}\right)^2 = \frac12 \iff \frac{c-d}{c} = \frac{1}{\sqrt2},$$

c'est-à-dire

$$d = c\left(1 - \frac{\sqrt2}{2}\right).$$

On a choisi la racine positive car $c - d > 0$. On trouve $d \approx 0{,}293\,c$, autrement dit un carreau dont le côté vaut environ $3{,}4$ fois le diamètre de la pièce. Avec des carreaux de $20$ cm, il faut une pièce d'environ $5{,}9$ cm de diamètre. Buffon traite aussi des carreaux triangulaires, en losange ou hexagonaux : la méthode est la même, seule la région favorable change.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; board.create('polygon', [[0, 0], [1, 0], [1, 1], [0, 1]], {fillColor: '#efebe9', fillOpacity: 1, borders: {strokeColor: '#5d4037', strokeWidth: 3, fixed: true, highlight: false}, vertices: {visible: false}, fixed: true, highlight: false}); var sd = board.create('slider', [[0.05, -0.15], [0.6, -0.15], [0.05, 0.2, 0.6]], {withLabel: false, snapWidth: 0.01}); var zone = board.create('polygon', [[function () { return sd.Value() / 2; }, function () { return sd.Value() / 2; }], [function () { return 1 - sd.Value() / 2; }, function () { return sd.Value() / 2; }], [function () { return 1 - sd.Value() / 2; }, function () { return 1 - sd.Value() / 2; }], [function () { return sd.Value() / 2; }, function () { return 1 - sd.Value() / 2; }]], {fillColor: '#2e7d32', fillOpacity: 0.18, borders: {strokeColor: '#2e7d32', strokeWidth: 1, dash: 2, fixed: true, highlight: false}, vertices: {visible: false}, fixed: true, highlight: false}); var M = board.create('point', [0.62, 0.7], {name: '', size: 3, color: '#263238', showInfobox: false}); M.on('drag', function () { var x = Math.min(1, Math.max(0, M.X())), y = Math.min(1, Math.max(0, M.Y())); M.moveTo([x, y]); }); function franc() { var r = sd.Value() / 2; return M.X() >= r && M.X() <= 1 - r && M.Y() >= r && M.Y() <= 1 - r; } board.create('circle', [M, function () { return sd.Value() / 2; }], {strokeColor: function () { return franc() ? '#2e7d32' : '#c62828'; }, strokeWidth: 2, fillColor: function () { return franc() ? '#2e7d32' : '#c62828'; }, fillOpacity: 0.25, fixed: true, highlight: false}); function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('text', [0.66, -0.15, function () { return 'd/c = ' + nombre(sd.Value(), 2); }], opt); board.create('text', [0.05, -0.3, function () { var q = 1 - sd.Value(); return 'P(franc-carreau) = ' + nombre(q * q, 3); }], opt); board.create('text', [0.02, 1.07, function () { return franc() ? 'franc-carreau' : 'la pièce touche un joint'; }], opt); Un carreau de côté $1$ et une pièce qu'on peut déplacer. Le curseur règle le diamètre de la pièce. Le carré vert contient les positions du centre pour lesquelles la pièce est franc-carreau ; la probabilité est le quotient de son aire par celle du carreau. Le jeu est équitable pour $\dfrac{d}{c} \approx 0{,}29$.
Le problème de l'aiguille

Dans l'Essai d'arithmétique morale, Buffon passe de la pièce à une baguette :

« Je suppose que dans une chambre, dont le parquet est simplement divisé par des joints parallèles, on jette en l'air une baguette, et que l'un des joueurs parie que la baguette ne croisera aucune des parallèles du parquet, et que l'autre au contraire parie que la baguette croisera quelques-unes de ces parallèles ; on demande le sort de ces deux joueurs. On peut jouer ce jeu sur un damier avec une aiguille à coudre ou une épingle sans tête. »

Page imprimée du XVIIIe siècle, en caractères anciens, avec le texte du problème de la baguette, et en bas une figure : deux bandes parallèles AB et CD, des segments et des arcs de cercle. La page de l'Essai d'arithmétique morale où Buffon pose le problème. La figure montre deux joints $AB$ et $CD$ et les arcs de cercle qu'il utilise pour raisonner sur l'angle de la baguette. Image : Wikimedia Commons, domaine public.

Buffon cherche la longueur de baguette qui rend le jeu équitable, et trouve qu'elle doit valoir « à peu près les trois quarts » de la largeur d'une lame. Son raisonnement compare des aires, mais il affirme sans le justifier la valeur d'une aire liée à une cycloïde, résultat connu à l'époque. On présente ici la démonstration moderne, au niveau de la terminale.

Décrire une position de l'aiguille

Dans tout le texte, les lames du parquet ont une largeur $\ell$ et l'aiguille une longueur $a$, avec d'abord $a \leqslant \ell$ : l'aiguille ne peut alors couper qu'un seul joint à la fois. On note $r = \dfrac{a}{\ell}$ le rapport des deux longueurs. (Le texte sur le nombre π fait le même calcul avec d'autres lettres.)

Une fois l'aiguille tombée, deux nombres suffisent à savoir si elle coupe un joint :

  • $y$, la distance de son milieu $I$ au joint le plus proche : $0 \leqslant y \leqslant \dfrac{\ell}{2}$ ;
  • $\theta$, l'angle aigu entre l'aiguille et la direction des joints : $0 \leqslant \theta \leqslant \dfrac{\pi}{2}$.

La position le long des joints ne compte pas, et par symétrie on peut toujours se ramener à un angle aigu et au joint le plus proche.

Quand l'aiguille coupe-t-elle le joint ? Chaque moitié de l'aiguille a pour longueur $\dfrac{a}{2}$. Dans le triangle rectangle formé par une moitié d'aiguille, la perpendiculaire aux joints et la parallèle aux joints, le côté opposé à l'angle $\theta$ mesure $\dfrac{a}{2}\sin\theta$ : c'est de combien l'extrémité de l'aiguille s'écarte de $I$ perpendiculairement aux joints. L'aiguille coupe le joint le plus proche si et seulement si cette extrémité l'atteint :

$$y \leqslant \frac{a}{2}\sin\theta.$$

Exemple. Avec $\ell = 10$ cm, $a = 6$ cm, un milieu à $y = 2$ cm d'un joint et un angle de $30°$ : $\dfrac{a}{2}\sin 30° = 3 \times 0{,}5 = 1{,}5$ cm, plus petit que $2$ cm : l'aiguille ne coupe pas. Avec un angle de $60°$, on obtient $3 \times \dfrac{\sqrt3}{2} \approx 2{,}6$ cm et l'aiguille coupe le joint.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var petit = {fontSize: 11, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var bois = {strokeColor: '#8d6e63', strokeWidth: 2, fixed: true, highlight: false}; board.create('polygon', [[0, 2], [3, 2], [3, 3], [0, 3]], {fillColor: '#efebe9', fillOpacity: 1, borders: {strokeColor: 'none', fixed: true, highlight: false}, vertices: {visible: false}, fixed: true, highlight: false}); board.create('segment', [[0, 2], [3, 2]], bois); board.create('segment', [[0, 3], [3, 3]], bois); var sy = board.create('slider', [[0.3, -0.3], [1.8, -0.3], [0, 0.15, 0.5]], {withLabel: false, snapWidth: 0.01}); var st = board.create('slider', [[0.3, -0.6], [1.8, -0.6], [0, 50, 90]], {withLabel: false, snapWidth: 1}); var sr = board.create('slider', [[0.3, -0.9], [1.8, -0.9], [0.1, 0.8, 1]], {withLabel: false, snapWidth: 0.05}); function th() { return st.Value() * Math.PI / 180; } function coupe() { return sy.Value() <= sr.Value() / 2 * Math.sin(th()) + 1e-9; } function coul() { return coupe() ? '#c62828' : '#1565c0'; } board.create('segment', [[function () { return 1.5 - sr.Value() / 2 * Math.cos(th()); }, function () { return 2 + sy.Value() - sr.Value() / 2 * Math.sin(th()); }], [function () { return 1.5 + sr.Value() / 2 * Math.cos(th()); }, function () { return 2 + sy.Value() + sr.Value() / 2 * Math.sin(th()); }]], {strokeColor: coul, strokeWidth: 4, fixed: true, highlight: false}); board.create('point', [1.5, function () { return 2 + sy.Value(); }], {name: '', size: 2, color: '#263238', fixed: true, showInfobox: false}); board.create('segment', [[2.3, 2], [2.3, function () { return 2 + sy.Value(); }]], {strokeColor: '#455a64', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); board.create('text', [2.38, function () { return 2 + sy.Value() / 2; }, 'y'], opt); // rectangle des positions (θ ; y) : X = 0.4 + 1.5279 θ, Y = 0.15 + 2.4 y function X(t) { return 0.4 + 1.5279 * t; } function Y(y) { return 0.15 + 2.4 * y; } board.create('polygon', [[X(0), Y(0)], [X(Math.PI / 2), Y(0)], [X(Math.PI / 2), Y(0.5)], [X(0), Y(0.5)]], {fillColor: '#eceff1', fillOpacity: 0.7, borders: {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false}, vertices: {visible: false}, fixed: true, highlight: false}); var zone = board.create('curve', [[0], [0]], {strokeColor: '#c62828', strokeWidth: 1.5, fillColor: '#c62828', fillOpacity: 0.22, highlight: false}); zone.updateDataArray = function () { var A = [X(0)], B = [Y(0)], i, t; for (i = 0; i <= 40; i++) { t = Math.PI / 2 * i / 40; A.push(X(t)); B.push(Y(sr.Value() / 2 * Math.sin(t))); } A.push(X(Math.PI / 2)); B.push(Y(0)); this.dataX = A; this.dataY = B; }; board.create('point', [function () { return X(th()); }, function () { return Y(sy.Value()); }], {name: '', size: 3, fillColor: coul, strokeColor: '#263238', fixed: true, showInfobox: false}); board.create('text', [X(Math.PI / 2) - 0.12, 0.03, 'π/2'], petit); board.create('text', [X(Math.PI / 2) + 0.08, Y(0) + 0.05, 'θ'], opt); board.create('text', [0.02, Y(0.5), 'ℓ/2'], petit); board.create('text', [0.2, Y(0) - 0.0, '0'], petit); function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('text', [1.98, -0.3, function () { return 'y/ℓ = ' + nombre(sy.Value(), 2); }], petit); board.create('text', [1.98, -0.6, function () { return 'θ = ' + Math.round(st.Value()) + '°'; }], petit); board.create('text', [1.98, -0.9, function () { return 'a/ℓ = ' + nombre(sr.Value(), 2); }], petit); board.create('text', [0.02, 3.18, function () { return coupe() ? 'l\'aiguille coupe le joint' : 'l\'aiguille ne coupe pas'; }], opt); board.create('text', [0.02, -1.2, function () { return 'p = 2a/(πℓ) ≈ ' + nombre(2 * sr.Value() / Math.PI, 3); }], opt); En haut, une lame de parquet (largeur $\ell = 1$) et l'aiguille, dont le milieu est à la distance $y$ du joint du bas. En bas, le rectangle de toutes les positions $(\theta\,;y)$ : le point est rouge quand l'aiguille coupe le joint, c'est-à-dire quand il est dans la région sous la courbe $y = \dfrac{a}{2}\sin\theta$. Les curseurs règlent $y$, $\theta$ et la longueur de l'aiguille.
Que veut dire « au hasard » ?

Pour calculer une probabilité, il faut dire comment le hasard choisit $y$ et $\theta$. On suppose que le milieu de l'aiguille n'a aucune raison de tomber plus près d'un joint que d'un autre, et que toutes les directions se valent : $y$ suit la loi uniforme sur $\left[0\,;\dfrac{\ell}{2}\right]$, $\theta$ suit la loi uniforme sur $\left[0\,;\dfrac{\pi}{2}\right]$, et les deux sont indépendants. Le point $(\theta\,;y)$ est alors uniformément réparti dans le rectangle : la probabilité d'une région est son aire divisée par l'aire du rectangle.

Ce choix est naturel pour un vrai lancer, mais c'est un choix. Le paradoxe de Bertrand montre qu'une même question, « choisir une corde au hasard dans un cercle », donne trois réponses différentes selon la façon de tirer au hasard : voir le paradoxe de Bertrand.

La démonstration par une intégrale Si $a \leqslant \ell$, la probabilité que l'aiguille coupe un joint vaut $p = \dfrac{2a}{\pi\ell}$

Étape 1 : l'aire du rectangle des positions.

$$\mathcal{A}_{\text{total}} = \frac{\pi}{2} \times \frac{\ell}{2} = \frac{\pi\ell}{4}.$$

Étape 2 : la région favorable. C'est l'ensemble des points $(\theta\,;y)$ du rectangle tels que $y \leqslant \dfrac{a}{2}\sin\theta$, c'est-à-dire la région sous la courbe de la fonction $f : \theta \mapsto \dfrac{a}{2}\sin\theta$. Sur $\left[0\,;\dfrac{\pi}{2}\right]$, $f$ est positive et $f(\theta) \leqslant \dfrac{a}{2} \leqslant \dfrac{\ell}{2}$, donc la courbe reste dans le rectangle. L'aire sous la courbe d'une fonction continue et positive est son intégrale :

$$\mathcal{A}_{\text{favorable}} = \int_0^{\pi/2} \frac{a}{2}\sin\theta \,\mathrm{d}\theta.$$

Étape 3 : le calcul de l'intégrale. Une primitive de $\sin$ est $-\cos$, donc

$$\mathcal{A}_{\text{favorable}} = \frac{a}{2}\Big[-\cos\theta\Big]_0^{\pi/2},$$

donc

$$\mathcal{A}_{\text{favorable}} = \frac{a}{2}\left(-\cos\frac{\pi}{2} + \cos 0\right),$$

soit

$$\mathcal{A}_{\text{favorable}} = \frac{a}{2}\,(0 + 1) = \frac{a}{2}.$$

Étape 4 : le quotient des aires.

$$p = \frac{\mathcal{A}_{\text{favorable}}}{\mathcal{A}_{\text{total}}} = \frac{a}{2} \times \frac{4}{\pi\ell} = \frac{2a}{\pi\ell}.$$

Exemples.

Le nombre $\pi$ apparaît alors qu'il n'y a aucun cercle sur le parquet. Il vient des directions de l'aiguille : tous les angles entre $0$ et $\dfrac{\pi}{2}$ sont également possibles, et c'est la longueur de cet intervalle qui se retrouve au dénominateur.

Une autre démonstration, par l'espérance

En 1860, le Français Joseph-Émile Barbier publie une démonstration qui n'utilise aucune intégrale. Elle repose sur une propriété du programme : la linéarité de l'espérance. Au lieu de la probabilité de couper un joint, on regarde le nombre $N$ de points où l'aiguille rencontre les joints.

Probabilité et espérance

Si $a < \ell$, l'aiguille rencontre au plus un joint (le cas où elle tombe pile sur deux joints a une probabilité nulle). Donc $N$ ne prend que les valeurs $0$ et $1$ : c'est une variable de Bernoulli, et son espérance est $E(N) = 0 \times P(N=0) + 1 \times P(N=1)$ $= p$. Calculer l'espérance de $N$ revient donc à calculer $p$.

La démonstration L'espérance du nombre de points de rencontre est proportionnelle à la longueur de l'aiguille

Étape 1 : une fonction de la longueur. Pour une aiguille droite de longueur $x$, on note $g(x)$ l'espérance du nombre de points où elle rencontre les joints. Elle ne dépend que de $x$ (et du parquet), pas de l'endroit où l'on tient l'aiguille.

Étape 2 : couper l'aiguille en deux. On peint en deux couleurs une aiguille de longueur $x + x'$ : une partie bleue de longueur $x$ et une partie verte de longueur $x'$. À chaque lancer, le nombre total de points de rencontre est la somme $N = N_{\text{bleu}} + N_{\text{vert}}$. Chaque partie, prise seule, est une aiguille jetée au hasard : $E(N_{\text{bleu}}) = g(x)$ et $E(N_{\text{vert}}) = g(x')$. Par linéarité de l'espérance, même si les deux nombres ne sont pas indépendants,

$$g(x + x') = g(x) + g(x').$$

Étape 3 : les multiples et les fractions. En coupant une aiguille en $k$ morceaux égaux, on obtient $g(kx) = k\,g(x)$ pour tout entier $k$. En l'appliquant à $\dfrac{x}{q}$, $g(x) = q\,g\!\left(\dfrac{x}{q}\right)$, donc $g\!\left(\dfrac{p'}{q}\,x\right) = \dfrac{p'}{q}\,g(x)$ pour tous entiers $p'$ et $q$.

Étape 4 : toutes les longueurs. Une aiguille plus longue rencontre en moyenne au moins autant de joints : $g$ est croissante. Une fonction croissante qui vérifie $g(t) = t\,g(1)$ pour tous les rationnels $t$ le vérifie pour tous les réels (on encadre un réel par des rationnels aussi proches qu'on veut). Il existe donc une constante $K$ telle que, pour toute longueur $x$,

$$g(x) = K x.$$

Il reste à trouver $K$. Barbier remarque que le résultat s'étend aux aiguilles courbes : une ligne brisée est une somme de petits segments, et la linéarité s'applique encore ; une courbe est la limite de lignes brisées (ce passage à la limite est admis ici). Il prend alors une aiguille très particulière : un cercle de diamètre $\ell$. Où qu'il tombe, ce cercle rencontre les joints en exactement deux points (il touche les deux bords d'une lame, ou coupe un joint deux fois). Donc $E(N) = 2$, alors que sa longueur vaut $\pi\ell$ :

$$K \times \pi\ell = 2, \qquad \text{donc} \qquad K = \frac{2}{\pi\ell}.$$

Pour l'aiguille droite de longueur $a < \ell$, on retrouve $p = E(N) = K a = \dfrac{2a}{\pi\ell}$. Le nombre $\pi$ vient cette fois de la longueur du cercle.

Les aiguilles plus longues que les lames

La démonstration de Barbier donne aussi le cas $a > \ell$, que Buffon n'avait pas traité : une longue aiguille peut couper plusieurs joints, mais l'espérance du nombre de points de rencontre reste $\dfrac{2a}{\pi\ell}$, qui peut dépasser $1$. La probabilité de couper au moins un joint est plus compliquée. Avec $r = \dfrac{a}{\ell} > 1$, on peut montrer, avec la même méthode d'aire mais un calcul plus long, que

$$p = \frac{2}{\pi}\left(r - \sqrt{r^2-1} + \arccos\frac{1}{r}\right).$$
$r = \dfrac{a}{\ell}$$1$$1{,}5$$2$$5$
$P(\text{au moins un joint})$$0{,}637$$0{,}779$$0{,}837$$0{,}936$
$E(N) = \dfrac{2r}{\pi}$$0{,}637$$0{,}955$$1{,}273$$3{,}183$

Ces valeurs ont été vérifiées par une simulation de $200\,000$ lancers pour chaque longueur. Pour $r = 1$, les deux lignes coïncident : c'est la limite entre les deux situations.

Laplace : retrouver π en jetant des aiguilles Portrait peint d'un homme âgé aux cheveux blancs, en habit officiel bleu brodé d'or et manteau orange, debout près d'un buste antique et d'un globe. Pierre-Simon de Laplace, portrait par Jean-Baptiste Paulin Guérin. Image : Wikimedia Commons, domaine public.

On lit souvent que Buffon a calculé $\pi$ avec ses aiguilles. C'est faux : il cherchait une longueur d'aiguille pour un jeu équitable. L'idée de retourner la formule vient de Laplace, en 1812, dans sa Théorie analytique des probabilités, avec une pointe d'ironie :

« Enfin, on pourrait faire usage du calcul des probabilités, pour rectifier les courbes ou carrer leurs surfaces. Sans doute, les géomètres n'emploieront pas ce moyen ; mais comme il me donne lieu de parler d'un genre particulier de combinaisons du hasard, je vais l'exposer en peu de mots. »

De $p = \dfrac{2a}{\pi\ell}$, on tire $\pi = \dfrac{2a}{p\,\ell} = \dfrac{2r}{p}$. On jette $n$ aiguilles et on compte les $c$ qui coupent un joint. La fréquence $f = \dfrac{c}{n}$ sert d'estimation de $p$, et

$$\hat\pi = \frac{2r}{f} = \frac{2rn}{c}$$

sert d'estimation de $\pi$. D'après la loi des grands nombres, plus $n$ est grand, plus il est probable que la fréquence $f$ soit proche de $p$, donc que $\hat\pi$ soit proche de $\pi$.

Exemple à la main. Avec une aiguille de la moitié d'une lame ($r = 0{,}5$), $1\,000$ lancers et $319$ aiguilles qui coupent un joint, on obtient $\hat\pi = \dfrac{2 \times 0{,}5 \times 1\,000}{319} = \dfrac{1\,000}{319} \approx 3{,}135$. Avec $318$ aiguilles, on obtiendrait $3{,}145$ : une seule aiguille change la deuxième décimale.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var petit = {fontSize: 11, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var j; for (j = 0; j <= 4; j++) { board.create('segment', [[0, j], [6, j]], {strokeColor: '#8d6e63', strokeWidth: 1.5, fixed: true, highlight: false}); } var sn = board.create('slider', [[0.3, -0.7], [3.6, -0.7], [10, 1000, 5000]], {withLabel: false, snapWidth: 10}); var sr = board.create('slider', [[0.3, -1.3], [3.6, -1.3], [0.1, 0.5, 1]], {withLabel: false, snapWidth: 0.05}); var sg = board.create('slider', [[0.3, -1.9], [3.6, -1.9], [1, 1, 20]], {withLabel: false, snapWidth: 1}); var res = {n: 0, c: 0, A: [], B: []}; function tirages() { var n = Math.round(sn.Value()), r = sr.Value(), g = 7919 * Math.round(sg.Value()) + 4242, i, u, v, q, x, y, s, c = 0, A = [], B = []; function alea() { g = (g * 16807) % 2147483647; return g / 2147483647; } for (i = 0; i < 20; i++) { alea(); } for (i = 0; i < n; i++) { do { u = alea(); v = alea(); q = u * u + v * v; } while (q > 1 || q === 0); q = Math.sqrt(q); u = u / q; v = v / q; if (alea() < 0.5) { u = -u; } x = 0.5 + 5 * alea(); y = 0.5 + 3 * alea(); s = r / 2 * v; var coupe = Math.floor(y - s) !== Math.floor(y + s); if (coupe) { c++; } if (i < 150) { var L = coupe ? A : B; L.push([x - r / 2 * u, y - s], [x + r / 2 * u, y + s], [NaN, NaN]); } } res.n = n; res.c = c; res.A = A; res.B = B; } function trace(nom, couleur) { var cv = board.create('curve', [[0], [0]], {strokeColor: couleur, strokeWidth: 1.5, highlight: false}); cv.updateDataArray = function () { if (nom === 'A') { tirages(); } var L = res[nom], X = [], Y = []; for (var k = 0; k < L.length; k++) { X.push(L[k][0]); Y.push(L[k][1]); } this.dataX = X; this.dataY = Y; }; } trace('A', '#c62828'); trace('B', '#1565c0'); function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('text', [3.95, -0.7, function () { return 'n = ' + res.n; }], opt); board.create('text', [3.95, -1.3, function () { return 'a/ℓ = ' + nombre(sr.Value(), 2); }], opt); board.create('text', [3.95, -1.9, function () { return 'série ' + Math.round(sg.Value()); }], opt); board.create('text', [0.1, -0.25, function () { return 'coupent : ' + res.c + ' π ≈ 2rn/c ≈ ' + (res.c ? nombre(2 * sr.Value() * res.n / res.c, 4) : '—'); }], opt); Simulation de $n$ lancers sur un parquet dont les lames ont pour largeur $1$. Les $150$ premières aiguilles sont dessinées : en rouge celles qui coupent un joint, en bleu les autres. Les curseurs règlent le nombre de lancers, la longueur des aiguilles et la série de lancers. Le programme tire la direction de l'aiguille sans utiliser $\pi$ (voir le programme Python plus bas).
Quelle confiance accorder au résultat ? La fréquence : l'inégalité de Bienaymé-Tchebychev

Les lancers sont indépendants et chacun a deux issues : le nombre $X$ d'aiguilles qui coupent un joint suit la loi binomiale $\mathcal{B}(n\,;p)$. La fréquence $F = \dfrac{X}{n}$ a pour espérance $p$ et pour variance $\dfrac{p(1-p)}{n}$. L'inégalité de Bienaymé-Tchebychev donne, pour tout $\delta > 0$,

$$P\big(|F - p| \geqslant \delta\big) \leqslant \frac{p(1-p)}{n\delta^2}.$$

La fréquence s'écarte de $p$ d'environ $\dfrac{1}{\sqrt n}$ : pour diviser l'écart par $10$, il faut cent fois plus de lancers.

De la fréquence à π : le nombre dérivé

L'estimation vaut $\hat\pi = g(F)$ avec $g(x) = \dfrac{2r}{x}$, et $g(p) = \pi$. Quand $F$ est proche de $p$, on remplace la courbe de $g$ par sa tangente en $p$ (approximation affine) :

$$\hat\pi - \pi = g(F) - g(p) \approx g'(p)\,(F - p).$$

Or $g'(x) = -\dfrac{2r}{x^2}$, donc $g'(p) = -\dfrac{2r}{p^2} = -\dfrac{2r\pi^2}{4r^2} = -\dfrac{\pi^2}{2r}$. L'erreur sur $\pi$ vaut environ $\dfrac{\pi^2}{2r}$ fois l'erreur sur la fréquence. Pour $r = 1$, ce facteur vaut $\dfrac{\pi^2}{2} \approx 4{,}9$ : une erreur de $0{,}01$ sur la fréquence devient une erreur d'environ $0{,}05$ sur $\pi$.

Quelle longueur d'aiguille choisir ?

La variance de $\hat\pi$ vaut environ $\left(\dfrac{\pi^2}{2r}\right)^2 \times \dfrac{p(1-p)}{n}$. En remplaçant $p$ par $\dfrac{2r}{\pi}$ et en simplifiant, on obtient

$$V(\hat\pi) \approx \frac{h(r)}{n},$$

avec

$$h(r) = \frac{\pi^3}{2r} - \pi^2.$$

Sur $]0\,;1]$, $h'(r) = -\dfrac{\pi^3}{2r^2} < 0$ : $h$ est strictement décroissante. Plus l'aiguille est longue (tant que $a \leqslant \ell$), plus l'estimation est précise, et le meilleur choix est $a = \ell$.

$r = \dfrac{a}{\ell}$$0{,}1$$0{,}5$$1$
$h(r)$$145{,}2$$21{,}1$$5{,}6$
lancers pour la même précision qu'avec $1\,000$ lancers et $r=1$$25\,800$$3\,750$$1\,000$

Une aiguille dix fois plus courte que les lames demande environ $26$ fois plus de lancers. Jeter $50\,000$ aiguilles de longueur $\dfrac{\ell}{10}$ donne à peu près la même précision que $1\,940$ aiguilles de longueur $\ell$ : plus de lancers ne veut pas dire plus de précision, si l'expérience est mal réglée.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var petit = {fontSize: 11, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var ax = {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false, lastArrow: true}; board.create('segment', [[0, 0], [1.1, 0]], ax); board.create('segment', [[0, 0], [0, 13.2]], ax); var k; for (k = 2; k <= 12; k += 2) { board.create('segment', [[-0.015, k], [0.015, k]], {strokeColor: '#455a64', fixed: true, highlight: false}); board.create('text', [-0.14, k, '' + k], petit); } for (k = 1; k <= 5; k++) { board.create('segment', [[k / 5, -0.25], [k / 5, 0.25]], {strokeColor: '#455a64', fixed: true, highlight: false}); board.create('text', [k / 5 - 0.03, -0.9, ('' + (k / 5)).replace('.', ',')], petit); } board.create('text', [1.05, 0.9, 'r'], opt); function sig(r) { return Math.sqrt(Math.pow(Math.PI, 3) / (2 * r) - Math.PI * Math.PI); } board.create('functiongraph', [sig, 0.1, 1], {strokeColor: '#c62828', strokeWidth: 2, highlight: false}); var sr = board.create('slider', [[0.1, -2.2], [0.6, -2.2], [0.1, 0.5, 1]], {withLabel: false, snapWidth: 0.05}); board.create('point', [function () { return sr.Value(); }, function () { return sig(sr.Value()); }], {name: '', size: 3, color: '#263238', fixed: true, showInfobox: false}); function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('text', [0.65, -2.2, function () { return 'r = ' + nombre(sr.Value(), 2); }], opt); board.create('text', [0.32, 12.6, function () { return 'écart type ≈ ' + nombre(sig(sr.Value()), 2) + ' / √n'; }], opt); L'écart type approximatif de l'estimation de $\pi$ multiplié par $\sqrt n$, c'est-à-dire $\sqrt{h(r)}$, en fonction du rapport $r = \dfrac{a}{\ell}$. Il décroît : les aiguilles longues sont plus efficaces.
Combien de lancers pour deux décimales ?

On veut $\pi$ à $0{,}01$ près avec un risque d'erreur d'au plus $5\,\%$, avec $r = 1$. D'après le nombre dérivé, il faut que la fréquence soit à moins de $\delta = 0{,}01 \times \dfrac{2}{\pi^2} \approx 0{,}002\,03$ de $p$. Par l'inégalité de Bienaymé-Tchebychev, il suffit que

$$\frac{p(1-p)}{n\delta^2} \leqslant 0{,}05,$$

c'est-à-dire

$$n \geqslant \frac{p(1-p)}{0{,}05\,\delta^2}.$$

Avec $p = \dfrac{2}{\pi} \approx 0{,}637$, on trouve $n \geqslant 1\,130\,000$ environ. L'inégalité de Bienaymé-Tchebychev est prudente ; un calcul plus fin, avec la loi normale (hors programme), ramène ce nombre à environ $216\,000$. Dans les deux cas, il faut des centaines de milliers d'aiguilles pour deux décimales : la méthode est belle, pas efficace. Les intervalles de confiance sont expliqués en détail dans le texte sur la méthode de Monte-Carlo.

Le vérifier en Python

Le programme compare deux longueurs d'aiguille sur $20$ séries de $2\,000$ lancers chacune, et affiche l'estimation la plus petite et la plus grande. Pour tirer une direction au hasard sans connaître $\pi$, il choisit un point au hasard dans un quart de disque et prend la direction de ce point : son sinus s'obtient avec une racine carrée.

from random import random, seed from math import sqrt def sinus_au_hasard(): # point au hasard dans le quart de disque de rayon 1 : sa direction est uniforme while True: u = random() v = random() d = sqrt(u*u + v*v) if 0 < d <= 1: return v / d def estimation(r, n): # lames de largeur 1, aiguille de longueur r (r <= 1) c = 0 for i in range(n): y = random() / 2 # distance du milieu au joint le plus proche if y <= r / 2 * sinus_au_hasard(): c = c + 1 return 2 * r * n / c seed(2026) for r in [0.5, 1]: valeurs = [estimation(r, 2000) for k in range(20)] print("r =", r, ": de", round(min(valeurs), 3), "à", round(max(valeurs), 3))

Les estimations obtenues avec $r = 0{,}5$ sont plus dispersées qu'avec $r = 1$, comme le prévoit l'étude de la fonction $h$.

Lazzarini : un résultat trop beau

En 1901, l'Italien Mario Lazzarini publie le compte rendu d'une expérience : avec une aiguille dont la longueur vaut les $\dfrac56$ de la largeur des lames, il aurait lancé $3\,408$ aiguilles et obtenu $1\,808$ intersections. Son estimation :

$$\hat\pi = \frac{2rn}{c} = \frac{2 \times \frac56 \times 3\,408}{1\,808} = \frac{5}{3} \times \frac{3\,408}{1\,808},$$

c'est-à-dire

$$\hat\pi = \frac{355}{113} \approx 3{,}141\,592\,9.$$

Six décimales exactes avec $3\,408$ lancers ! D'après la partie précédente, un tel nombre de lancers ne garantit même pas la première décimale. Plusieurs indices rendent ce résultat suspect.

Les indices
  • La fraction. $\dfrac{355}{113}$ est une approximation de $\pi$ connue depuis le Ve siècle (Zu Chongzhi, en Chine). Or $3\,408 = 16 \times 213$ et $1\,808 = 16 \times 113$ : avec $r = \dfrac56$, obtenir $\hat\pi = \dfrac{355}{113}$ revient à avoir exactement $113$ intersections pour $213$ lancers, ou un multiple. Le réglage $\dfrac56$ et le nombre de lancers semblent choisis pour tomber sur cette fraction.
  • Un résultat exactement égal à l'espérance. Avec $p = \dfrac{2r}{\pi} = \dfrac{5}{3\pi} \approx 0{,}5305$, l'espérance du nombre d'intersections vaut $3\,408 \times p \approx 1\,808{,}0$. La probabilité d'obtenir exactement $1\,808$ est d'environ $1{,}4\,\%$ : possible, mais peu probable.
  • S'arrêter au bon moment. Supposons qu'on lance les aiguilles par paquets de $213$ et qu'on s'arrête dès que le total d'intersections vaut exactement $113$ fois le nombre de paquets. Un calcul exact sur la loi du nombre d'intersections montre que cette stratégie a environ $29\,\%$ de chances de « réussir » en au plus $16$ paquets, donc en au plus $3\,408$ lancers. Une expérience honnête en apparence peut ainsi produire un résultat parfait, simplement en choisissant quand s'arrêter.

En 1994, Lee Badger a analysé en détail le compte rendu de Lazzarini et conclu qu'il était très probablement arrangé, d'une manière ou d'une autre. La leçon dépasse les aiguilles : une estimation trop précise compte tenu du nombre d'essais est aussi suspecte qu'une estimation trop éloignée. C'est le même raisonnement qu'on utilise aujourd'hui pour repérer des données fabriquées, par exemple avec la loi de Benford.

Simuler la stratégie de l'arrêt

Le programme ci-dessous simule $200$ expérimentateurs qui lancent par paquets de $213$ aiguilles ($r = \dfrac56$) et s'arrêtent dès qu'ils tombent sur $355/113$, avec au plus $16$ paquets. La proportion de « succès » est proche de $29\,\%$, mais varie d'une exécution à l'autre.

from random import random from math import pi p = 5 / (3 * pi) # probabilité de couper un joint avec r = 5/6 reussites = 0 for essai in range(200): x = 0 # nombre total d'intersections for paquet in range(1, 17): for i in range(213): if random() < p: x = x + 1 if x == 113 * paquet: reussites = reussites + 1 break print("proportion de résultats égaux à 355/113 :", reussites / 200)
Mesurer des longueurs par le hasard

La démonstration de Barbier a une conséquence étonnante : pour n'importe quelle courbe de longueur $L$ jetée au hasard sur un réseau de droites parallèles espacées de $\ell$, l'espérance du nombre de points de rencontre vaut $\dfrac{2L}{\pi\ell}$. En comptant les intersections, on peut donc estimer une longueur :

$$L \approx \frac{\pi\ell}{2} \times m,$$

où $m$ est le nombre moyen d'intersections.

C'est la formule de Cauchy-Crofton. Elle permet par exemple d'estimer la longueur d'une rivière sur une carte : on pose sur la carte un calque quadrillé de lignes parallèles, dans plusieurs directions, et on compte les croisements. Le texte sur la longueur d'une courbe calcule des longueurs avec des intégrales ; ici, on les obtient en comptant.

En biologie et en médecine, la stéréologie applique ces idées : sur des coupes de tissu observées au microscope, on superpose une grille de lignes et on compte les intersections avec les vaisseaux sanguins, les fibres nerveuses ou les membranes, pour estimer des longueurs ou des surfaces totales qu'on ne pourrait pas mesurer directement. Les formules utilisées sont des cousines de celle de Buffon.

Enfin, l'idée de Laplace, « calculer une grandeur certaine en provoquant le hasard », est devenue la méthode de Monte-Carlo, utilisée dès les années 1940 pour la physique nucléaire et aujourd'hui partout où l'on doit estimer des volumes ou des moyennes en grande dimension : voir la méthode de Monte-Carlo.

Des directions pour construire sa question

Ce texte n'est pas un Grand Oral. Il rassemble des connaissances dans lesquelles chacun peut choisir une direction, la creuser et formuler sa propre question. Quelques directions possibles :

Pour l'échange avec le jury : les notions du cours à maîtriser

Le jury peut interroger sur les chapitres de spécialité mobilisés. Avec ce thème, il est utile de connaître parfaitement : les primitives et l'intégrale, l'aire sous la courbe d'une fonction positive ; le cosinus et le sinus, la trigonométrie dans le triangle rectangle ; la loi uniforme, la variable de Bernoulli et la loi binomiale ; l'espérance, sa linéarité, la variance ; l'inégalité de Bienaymé-Tchebychev et la loi des grands nombres ; le nombre dérivé, la tangente et l'approximation affine ; la dérivation et le sens de variation d'une fonction ; les boucles en Python.

Pour réviser ces chapitres, l'application Maths FlashBac reprend tout le cours de spécialité en cartes.

Pour aller plus loin