--> Les aiguilles de Buffon L'aiguille de Buffon est une expérience de probabilité proposée en 1733 par Georges-Louis Leclerc de Buffon.
Il s'agit de lancer un grand nombre de fois, de manière identitique et indépendante, une aiguille sur un parquet.
Le parquet est composé de planches parallèles de même largeur et la longueur de l'aiguille est inférieure à la largeur des lattes du parquet.
On comptabilise le nombre de fois où l'aiguille tombe à cheval sur une rainure du parquet par rapport au nombre total de lancers. Xmin = 0 Xmax = 10 Ymin = -0.1 Ymax = 10.1 peinture = "rgb(125,30,20)" transparence = 0.5 rectangle([-2,12],20,20) couleur = "rgb(125,30,20)" for(var i = 0; i < 11; i++){ droite([0,i],[10,i]) } var nb = 0 for(var i = 0; i < 100; i++){ nb = nb+aiguille(0.25) } document.getElementById("buffon").innerHTML = nb+" parmi "+100; var pia = 100/nb; document.getElementById("buffon2").innerHTML = "π ≈ "+pia+"."; function aiguille(r){ xa = 10*rand() ya = 10*rand() var res = 0; alpha = 2*%PI*rand() xa1 = r*cos(alpha)+xa ya1 = r*sin(alpha)+ya xa2 = r*cos(alpha+%PI)+xa ya2 = r*sin(alpha+%PI)+ya couleur = noir if( Math.abs(Math.floor(ya2)-Math.floor(ya1))>=1){ res = 1 couleur = blanc } segment([xa1,ya1],[xa2,ya2]) return res }
En notant $a$ la longueur de l'aiguille et $\ell$ la largeur des lattes du parquet, la probabilité $p$ qu'une aiguille soit à cheval sur deux lattes est de : $$p=\dfrac{2a}{\pi\times\ell}.$$ On a ainsi $$\pi=\dfrac{2a}{p\times\ell}.$$ Lorsqu'on effectue un grand nombre de lancers on peut estimer que la fréquence des cas favorables est proche de la probabilité théorique. Notre première simulation, où $\ell=1$ et $a=0,5$, nous fournit donc l'approximation suivante pour $\pi$ :


Pour obtenir une meilleure approximation on peut augmenter le nombre d'aiguilles lancées ($1\,000$, puis $10\,000$) : $1\,000$ lancers, $\ell=1$, $a=0,5$ Xmin = 0 Xmax = 10 Ymin = -0.1 Ymax = 10.1 peinture = "rgb(125,30,20)" transparence = 0.5 rectangle([-2,12],20,20) couleur = "rgb(125,30,20)" for(var i = 0; i < 11; i++){ droite([0,i],[10,i]) } var nb = 0 for(var i = 0; i < 1000; i++){ nb = nb+aiguille(0.25) } document.getElementById("buffon3").innerHTML = nb+" parmi "+1000; var pia = 1000/nb; document.getElementById("buffon4").innerHTML = "π ≈ "+pia+"."; function aiguille(r){ xa = 10*rand() ya = 10*rand() var res = 0; alpha = 2*%PI*rand() xa1 = r*cos(alpha)+xa ya1 = r*sin(alpha)+ya xa2 = r*cos(alpha+%PI)+xa ya2 = r*sin(alpha+%PI)+ya couleur = noir if( Math.abs(Math.floor(ya2)-Math.floor(ya1))>=1){ res = 1 couleur = blanc } segment([xa1,ya1],[xa2,ya2]) return res }
$10\,000$ lancers, $\ell=1$, $a=0,5$ Xmin = 0 Xmax = 10 Ymin = -0.1 Ymax = 10.1 peinture = "rgb(125,30,20)" transparence = 0.5 rectangle([-2,12],20,20) couleur = "rgb(125,30,20)" for(var i = 0; i < 11; i++){ droite([0,i],[10,i]) } var nb = 0 for(var i = 0; i < 10000; i++){ nb = nb+aiguille(0.25) } document.getElementById("buffon5").innerHTML = nb+" parmi "+10000; var pia = 10000/nb; document.getElementById("buffon6").innerHTML = "π ≈ "+pia+"."; function aiguille(r){ xa = 10*rand() ya = 10*rand() var res = 0; alpha = 2*%PI*rand() xa1 = r*cos(alpha)+xa ya1 = r*sin(alpha)+ya xa2 = r*cos(alpha+%PI)+xa ya2 = r*sin(alpha+%PI)+ya couleur = noir if( Math.abs(Math.floor(ya2)-Math.floor(ya1))>=1){ res = 1 couleur = blanc } segment([xa1,ya1],[xa2,ya2]) return res }
$50\,000$ lancers, $\ell=1$, $a=0,01$ Xmin = 0 Xmax = 10 Ymin = -0.1 Ymax = 10.1 peinture = "rgb(125,30,20)" transparence = 0.5 rectangle([-2,12],20,20) couleur = "rgb(125,30,20)" for(var i = 0; i < 11; i++){ droite([0,i],[10,i]) } var nb = 0 var N = 50000 var a = 0.1 for(var i = 0; i < N; i++){ nb = nb+aiguille(a/2) } document.getElementById("buffon7").innerHTML = nb+" parmi "+N; var pia = 2*a*N/nb; document.getElementById("buffon8").innerHTML = "π ≈ "+pia+"."; function aiguille(r){ xa = 10*rand() ya = 10*rand() var res = 0; alpha = 2*%PI*rand() xa1 = r*cos(alpha)+xa ya1 = r*sin(alpha)+ya xa2 = r*cos(alpha+%PI)+xa ya2 = r*sin(alpha+%PI)+ya couleur = noir if( Math.abs(Math.floor(ya2)-Math.floor(ya1))>=1){ res = 1 couleur = blanc } segment([xa1,ya1],[xa2,ya2]) return res }
Code source l'animation Xmin = 0 Xmax = 10 Ymin = -0.1 Ymax = 10.1 peinture = "rgb(125,30,20)" transparence = 0.5 rectangle([-2,12],20,20) couleur = "rgb(125,30,20)" for(var i = 0; i < 11; i++){ droite([0,i],[10,i]) } var nb = 0 var N = 500 var a = 0.4 for(var i = 0; i < N; i++){ nb = nb+aiguille(a/2) } function aiguille(r){ xa = 10*rand() ya = 10*rand() var res = 0; alpha = 2*%PI*rand() xa1 = r*cos(alpha)+xa ya1 = r*sin(alpha)+ya xa2 = r*cos(alpha+%PI)+xa ya2 = r*sin(alpha+%PI)+ya couleur = noir if( Math.abs(Math.floor(ya2)-Math.floor(ya1))>=1){ res = 1 couleur = blanc } segment([xa1,ya1],[xa2,ya2]) return res }