Benadering van p via de Naaldproef van Buffon
Beschrijving | Uitvoering met grafiek | Uitvoering zonder grafiek ][ Overzichtspagina | Meetkunde
Een MapleV-worksheet - september 1998 (klik
hier om de worksheet [ZIP-bestand, 14Kb]
te downloaden)
naar een idee van Michael Schmitz
Friedrich-Schiller-Universität Jena
Fakultät für Mathematik und Informatik
1. Beschrijving
De benadering van p die hieronder wordt
beschreven is voor het eerst uitgevoerd door de Franse wiskundige George Buffon
(George Louis Leclerc Comte de Buffon, 1707-1788).
Deze wijze van benadering staat bekend als de Naaldproef van Buffon.
figuur 2 |
Dan liggen de punten die bij een treffer horen in het vlakdeel dat door de f-as en de grafiek van de functie a = lsin(
f ) met 0 £ f £ p
begrensd wordt (en omgekeerd).
Punten die bij worpen horen die niet tot een treffer leiden, liggen buiten dat vlakdeel,
maar behoren wel tot de in de figuur getekende rechthoek met zijden a en p (in figuur 2 is a = 1 en l = 1/2)
.
Uit de waarschijnlijkheidsrekening volgt nu dat de verhouding tussen het aantal treffers
en het aantal worpen gelijk is aan de verhouding tussen de oppervlaktes van het vlakdeel
dat begrensd wordt door de grafiek van a = lsin( f ) en de f-as en van de rechthoek
met zijden p en a.
Dus
waaruit nu eenvoudig volgt dat
Kiezen we nu l = a/2 (zie ook figuur 2),
dan kunnen we de waarde van p , onafhankelijk van de lengte van
de naald en de afstand tussen de lijnen, berekenen uit
2. Uitvoering met grafiek
We gooien 100 keer met een naald (zie de variabele "aantal").
> restart: > with(plots): > aantal:=100:
Voor het model gaan we uit van een x-y-coördinatenstelsel.
We bekijken twee lijnen met vergelijkingen y = 1 en y = 3.
De worpen leggen we nu zo vast, dat het midden M(x, y) van de naald zo terecht
komt, dat 0 £ x £ 5
en 0 £ y £ 4 .
Daarbij geldt a = 1 en l = 1/2.
We berekenen eerst de x-coördinaten van het midden M van de naald. Deze moeten liggen tussen 0 en 5:
> coor_x:=[]: > for N from 1 to aantal do > Zx:=evalf(rand(50000)/10000): > coor_x:=[op(coor_x),Zx()]: > od:
Opmerking
De Maple-opdracht rand( )
wordt toegelicht op de pagina "Benadering van Pi met
oppervlaktes".
[einde Opmerking]
Vervolgens de y-coördinaten van M die tussen 0 en 4 moeten liggen.
> coor_y:=[]: > for N from 1 to aantal do > Zy:=evalf(rand(40000)/10000): > coor_y:=[op(coor_y),Zy()]: > od:
En tenslotte de grootte van de hoek f .
Daartoe bepalen we toevalsgetallen die liggen tussen 0 en 180 (graden), die omgerekend
worden naar radialen.
> hoek := []: > for N from 1 to aantal do > Zh:=evalf(rand(180)*Pi/180): > hoek:=[op(hoek),Zh()]: > od:
We kijken nu hoe de worpen zijn uitgevallen. We tekenen ze in een figuur (zie figuur 3), waarbij de groene lijnstukken treffers zijn. De blauwe lijnstukken hebben hun "doel" gemist.
> l:=0.5: > lijn1:=plot([[-1,1],[6,1]],color=red): > lijn2:=plot([[-1,3],[6,3]],color=red): > naalden:=[lijn1,lijn2]: > treffers:=0: > for i from 1 to aantal do > if (abs(coor_y[i]-1)<=l*sin(hoek[i]) or > abs(coor_y[i]-3)<=l*sin(hoek[i])) then > naald:= plot( > [[coor_x[i]-(l*cos(hoek[i])), coor_y[i]-(l*sin(hoek[i]))], > [coor_x[i]+(l*cos(hoek[i])), coor_y[i]+(l*sin(hoek[i]))]], > color=green): > treffers:=treffers+1: > else > naald:=plot( > [[coor_x[i]-(l*cos(hoek[i])),coor_y[i]-(l*sin(hoek[i]))], > [coor_x[i]+(l*cos(hoek[i])),coor_y[i]+(l*sin(hoek[i]))]], > color=blue): > fi: > naalden:=[op(naalden),naald]: > od: > Aantal:=aantal; > AantalTreffers:=treffers; > Benadering:=evalf(aantal/treffers); > display(naalden, scaling=constrained);
Aantal := 100 AantalTreffers := 31 Benadering := 3.225806452
3. Uitvoering zonder grafiek
Dezelfde berekening zonder het tekenen van de lijnstukken verloopt natuurlijk wat sneller.
De waarden van x (coor_x), y (coor_y) en phi (hoek) zijn hetzelfde als in paragraaf 2.
De waarde van de benadering van p dus eveneens.
> treffers:=0: > for i from 1 to aantal do > if (abs(coor_y[i]-1)<=l*sin(hoek[i]) or > abs(coor_y[i]-3)<=l*sin(hoek[i])) then > treffers:=treffers+1: > fi: > od: > Aantal:=aantal; > AantalTreffers:=treffers; > Benadering:=evalf(aantal/treffers);
Aantal := 100 AantalTreffers := 31 Benadering := 3.225806452
[benpi1.htm] laatste wijziging op: 15-10-1999