Anda di halaman 1dari 6

Agulha de Buon

Lauro Didier Lins 19 de Maio de 2004

Resumo No sculo XVIII o matemtico e naturalista francs Conde de Buon e a e props um interessante experimento. E sobre este experimento e sua o simulaao atravs de um programa na linguagem C que tratamos aqui. c e

Experimento

No sculo XVIII o matemtico e naturalista francs Conde de Buon estava e a e interessado na probabilidade de uma agulha de comprimento lanada num c plano marcado por linhas paralelas tocar numa destas linhas marcadas. Sabese que as linhas marcadas no plano esto distantes a (a ) unidades das suas a paralelas vizinhas. Fixados a e , para sabermos se houve ou no choque a da agulha com uma das linhas do plano, observamos duas quantidades: d, a distncia entre o centro da agulha e a linha paralela do plano mais prxima a o a este centro, e , o ngulo que a agulha faz com uma reta passando pelo seu a a centro e paralela `s retas do plano. E fcil ver que d [0, a ], pois qualquer a 2 ponto no plano est a uma distncia mxima de a para a reta mais prxima. a a a o 2 Alm disso, para qualquer agulha no plano, podemos ter uma gura (como a e Figura 1) onde a reta mais prxima ao centro da agulha no aparece compleo a tamente abaixo da agulha (no caso da Figura 1, a reta mais prxima aparece o completamente acima da agulha). Para isto, numa situaao em que a agulha c esteja completamente acima da paralela mais prxima a seu centro (e.g. a o Figura 1 de cabea pra baixo), basta girar a gura 180o . Ou seja, toda conc guraao de agulha no plano tem um valor [0, ]. Uma vez conhecidos , c a, d e saber se a agulha toca alguma linha paralela do plano equivalente a e vericar se a inequaao c d verdadeira. e Dada uma situaao de agulha no plano, j sabemos denir se houve ou no c a a choque da agulha com uma das linhas paralelas. Porm, Buon no estava e a 1 2 sin()

Agulha de Buon

Figura 1: agulha no plano e as medidas d e

interessado em saber se houve choque numa situaao espec c ca, mas sim qual a probabilidade de uma agulha lanada no plano tocar uma das paralelas. c Com o que j formulamos, sabemos que as conguraoes de uma agulha no a c plano podem ser vistas como os pares do conjunto [0, a ] [0, ]. Uma boa 2 hiptese para se admitir que a natureza no tem preferncia por nenhuma o e a e conguraao de agulha no plano e que no interfere em d nem d interfere c a em [2]. Seguindo esta hiptese, podemos dizer que a menor distncia d do o a centro da agulha para a sua paralela mais prxima uma varivel aleatria D o e a o a , e o angulo tambm uma varivel com distribuiao uniforme, D U(0, 2 ) c e e a aleatria com distribuiao uniforme, U(0,) . Alm disso D e so o c e a independentes. Feitas estas suposioes podemos caracterizar completamente c o vetor aleatrio (D, ). A probabilidade do evento [0, a ] [0, ] dada o e 2 por P [ ] =
=(x,y)

fD (x)f (y) dx dy =

2 21 dx dy = a a

dx dy,

onde fD a densidade de D e f a densidade de . Agora podemos denir e e a varivel aleatria H como funao do vetor aleatrio (D, ) a o c o H= 1, D 2 sin() 0, caso contrrio. a

Note que H = 1 exatamente nas situaoes onde h choque da agulha com uma c a das paralelas e que H = 0 quando no h choque. Portanto a probabilidade a a de haver choque P [H = 1]. Olhando para a Figura 2, podemos notar em e cinza a regio exata do suporte da densidade da distribuiao (D, ) em que a c H = 1. Segue ento que a P [H = 1] = P [D 2 sin()] = 2 a

sin(y)

dx dy =

y=0 x=0

2 a

2 2 2 sin(y)dy = (cos(0) cos()) = . a y=0 2 a 2 a Podemos tambm calcular a esperana de H e c

E(H) = 1P [H = 1] + 0P [H = 0] = P [H = 1] =

2 . a

Agulha de Buon

Figura 2: densidade conjunta de (D, ) e a regio (em cinza) onde a agulha a toca a linha mais prxima a ela. o

Pela lei dos grandes nmeros, se H1 , . . . Hn uma amostra independente e u e identicamente distribu ` distribuiao de H, ento da a c a H1 + . . . + Hn P 2 = E(H) , n a que equivalente a e 2 P n . H1 + . . . + Hn a (1)

Na convergncia em probabilidade desta ultima frmula, podemos concluir o e o seguinte resultado: se repetirmos n vezes (para n grande) o lanamento da c agulha de Buon e anotarmos o nmero de vezes h em que a agulha tocou u numa das paralelas do plano ento a n2 . h a Ou seja, Buon descobriu um experimento bastante simples para aproximar o nmero . Na poca em que no havia computadores e seus geradores u e a de nmeros pseudo-aleatrios, lanar agulhas era uma alternativa vivel para u o c a aproximar .

Agulha de Buon

Simulao ca

Para simular o experimento da Agulha de Buon zemos um programa em C. Este programa realiza o experimento para a = = 1 e exibe a aproximaao c para aps 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 e 109 lanamentos de ago c ulha. O gerador de nmeros pseudo-aleatrios da distribuiao uniforme que u o c utilizamos na simulaao dos lanamentos devido a George Marsaglia. O proc c e grama foi compilado e executado no Windows XP e o compilador utilizado foi o GCC [3]. Os resultados obtidos para a simulaao esto na Tabela 1. Nela podemos c a vericar a convergncia (1). A medida que n cresce a diferena absoluta entre e c o valor real de e o valor aproximado diminui. Entretanto, esta queda no a e rpida. Por exemplo, aps 5 minutos de computaao e 1 bilho de lanamentos a o c a c a aproximaao ainda foi de apenas 3 casas decimais. c n 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 h 7 69 646 6407 63941 637499 6365076 63652509 636564070 2.8571429 2.8985507 3.0959752 3.1215858 3.1278835 3.1372598 3.1421463 3.1420600 3.1418676 | | 0.2844498 0.2430420 0.0456175 0.0200069 0.0137092 0.0043329 0.0005536 0.0004673 0.0002749 tempo(seg.) 0.00 0.00 0.00 0.00 0.03 0.30 3.11 31.48 314.84

Tabela 1: n - nmero de lanamentos; h - nmero de lanamentos que tocou u c u c numa paralela; - estimativa para .

A
A.1

Cdigo Fonte o
buon.c

/********************************************************** * PROGRAM: buffon.c * DATE: 15-05-2004 * DESC.: APROXIMATE PI BY SIMULATING BUFFONS * NEEDLE EXPERIMENT. *********************************************************/ #include <time.h> #include <stdio.h> #include <math.h> /* for timing the code */ /* for writing to files */ /* for exponentials and logs */

Agulha de Buon

/* George Marsaglias uniform random number generator */ /* (has a very large period, > 2^60, and passes Diehard tests; */ /* uses a multiply-with-carry method) */ #define s1new (s1=(18000*(s1&0xFFFF)+(s1>>16))) #define s2new (s2=(30903*(s2&0xFFFF)+(s2>>16))) #define UNI (((s1new<<16)+(s2new&0xFFFF))*2.32830643708e-10) unsigned long s1=362436069, s2=521288629; #define setseed(seed1,seed2) {s1=seed1;s2=seed2;} int main(void) { double theta, distance; /* time store locations */ clock_t startTime, endTime; /* set seed of UNI */ setseed(362436069,521288629); /* log Pi aproximation on these iterations */ long log_points[] = { 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; int numLogPoints = 9; /* start time count */ startTime = clock(); /* simulate throws of a 1 unit needle on a sheet with one */ /* unit distant parallel lines and acumulate the number of */ /* hits (i.e. needle crossing/touching a line) */ long i=1; long hits = 0; int logIndex = 0; while (logIndex < numLogPoints) { /* set next log point */ long nextLogPoint = log_points[logIndex]; logIndex++; /* iterate */ for (;i<=nextLogPoint;i++) { /* get a sample from a U(0,PI) */ theta = UNI * M_PI; /* get a sample from a U(0,0.5) */ distance = UNI * 0.5; /* see if it falls on the hit area */ if (distance <= 0.5 * sin(theta)) hits++; } /* elapsed time */

Agulha de Buon

endTime = clock(); /* log current aprox*/ printf("NThrows: %11d Hits: %11d Pi Aprox.: %1.7f (%8.2f s.)\n", nextLogPoint, hits, (2.0*nextLogPoint)/hits, ((double)(endTime-startTime))/CLOCKS_PER_SEC); } return(0); }

A.2

buon.out
10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 Hits: Hits: Hits: Hits: Hits: Hits: Hits: Hits: Hits: 7 69 646 6407 63941 637499 6365076 63652509 636564070 Pi Pi Pi Pi Pi Pi Pi Pi Pi Aprox.: Aprox.: Aprox.: Aprox.: Aprox.: Aprox.: Aprox.: Aprox.: Aprox.: 2.8571429 2.8985507 3.0959752 3.1215858 3.1278835 3.1372598 3.1421463 3.1420600 3.1418676 ( ( ( ( ( ( ( ( ( 0.00 0.00 0.00 0.00 0.03 0.30 3.11 31.48 314.84 s.) s.) s.) s.) s.) s.) s.) s.) s.)

NThrows: NThrows: NThrows: NThrows: NThrows: NThrows: NThrows: NThrows: NThrows:

Referncias e
[1] Rao, C.R. (1997). Statistics And Truth: Putting Chance to Work. 2.ed. World Scientic. [2] Buons Needle. URL: http://whistleralley.com/buon/buon.htm Consultado em 15 maio de 2004. [3] GCC Home Page - GNU Project - Free Software Foundation. URL: http://gcc.gnu.org Consultado em 10 maio 2004.

Anda mungkin juga menyukai