SEMINARSKI RAD iz Verovatnoce i Statistike

27
SEMINARSKI RAD iz Verovatno´ ce i Statistike Izraˇ cunavanje pribliˇ zne vrednosti broja π Aleksandar Nedeljkovi´ c 36/2009 Matematiˇ cki fakultet Univerzitet u Beogradu January 18, 2011. 1

Transcript of SEMINARSKI RAD iz Verovatnoce i Statistike

Page 1: SEMINARSKI RAD iz Verovatnoce i Statistike

SEMINARSKI RADiz Verovatnoce i Statistike

Izracunavanje priblizne vrednosti broja π

Aleksandar Nedeljkovic 36/2009

Matematicki fakultetUniverzitet u Beogradu

January 18, 2011.

1

Page 2: SEMINARSKI RAD iz Verovatnoce i Statistike

SADRZAJ 2

Sadrzaj

1 Uvod 31.1 Istorija Monte Karlo metode . . . . . . . . . . . . . . 4

2 Aproksimacija π odabirom tacaka unutar kruga kojije upisan u kvadrat 52.1 Postavka problema . . . . . . . . . . . . . . . . . . . 52.2 Statisticka homogenost . . . . . . . . . . . . . . . . . 52.3 Realizacija algoritma . . . . . . . . . . . . . . . . . . 62.4 Kod programa . . . . . . . . . . . . . . . . . . . . . . 72.5 Rezultati testiranja programa . . . . . . . . . . . . . 8

3 Aproksimacija π odabirom tacaka unutar lopte kojaje upisana u kocku 93.1 Postavka problema . . . . . . . . . . . . . . . . . . . 93.2 Kod programa . . . . . . . . . . . . . . . . . . . . . . 103.3 Rezultati testiranja programa . . . . . . . . . . . . . 11

4 Aproksimacija π zasnovana na problemu Bufonoveigle 124.1 Postavka problema . . . . . . . . . . . . . . . . . . . 124.2 Modelovanje problema . . . . . . . . . . . . . . . . . 144.3 Opis programa . . . . . . . . . . . . . . . . . . . . . 174.4 Kod programa . . . . . . . . . . . . . . . . . . . . . . 184.5 Rezultati testiranja programa . . . . . . . . . . . . . 24

5 Poredjenje brzine konvergencije u sva 3 slucaja 25

6 Zakljucak 26

7 Literatura 27

2

Page 3: SEMINARSKI RAD iz Verovatnoce i Statistike

3

1 Uvod

Monte Karlo metoda je cesto koriscena numericka metoda za resa-vanje raznorodnih problema upotrebom racunarskih mogucnosti.Primenjuje se na probleme koji se mogu svesti na aproksimiranje in-tegrala. U osnovi Monte Karlo metode analize je jednostavan principaproksimacije, ali moze biti racunarski zahtevan za izracunavanje.Nije tesko napisati racunarski program koji ce koristiti Monte Karlometodu analize, nego je problem sto se mnogi tako napisani pro-grami mogu izvrsavati danima. Medjutim, postoje nacini da seubrza Monte Karlo metoda analize. U tim slucajevima koriste se ra-zlicite tehnike smanjivanja varijance. Takve tehnike nisu intuitivnei zahtevaju detaljnije razumevanje.

3

Page 4: SEMINARSKI RAD iz Verovatnoce i Statistike

1.1 Istorija Monte Karlo metode 4

1.1 Istorija Monte Karlo metode

Zasluge za osmisljavanje Monte Karlo metode pripisuju se Stanisla-vu Ulamu, poljskom matematicaru koji je tokom Drugog svetskograta radio u Sjedinjenim Americkim Drzavama s Johnom von Neu-mannom na Manhattan projektu. Ulam je prvenstveno poznat podizajniranju hidrogenske bombe zajedno s Edwardom Tellerom 1951.godine. Osmislio je Monte Karlo metodu 1946. godine, dok se opo-ravljao od bolesti igrajuci solitaire - popularnu igra karata. Ulamje pokusavao odgonetnuti pitanje: Kolike su sanse da se 52 kartepodele tako da je igru moguce zavrsiti? Nakon mnogo vremenapotrosenog na propitivanja kombinatorickih resenja, poceo se pi-tati postoji li prakticnije rjesenje tog problema. Uocio je da bi bilomnogo jednostavnije naprosto podeliti karte stotinu puta i pobro-jati koliko je bilo uspesnih ishoda. Taj postupak coveku bi oduzeopuno vremena, ali racunar bi do rezultata dosao relativno brzo. Za-hvaljujuci razvoju sve brzih racunara, moglo se predvideti da ceslicni takvi, samo mnogo komplikovaniji proracuni postati izvodljiviu prihvatljivom vremenu. Ulam je odmah uocio i druge probleme nakoje je mogao primeniti istu metodu izracunavanja (npr. problemneutronske difuzije i drugi problemi matematicke fizike). Kasnije jeopisao ideju svom kolegi John von Neumannu i poceli su planiratistvarne proracune na toj ideji.

Monte Karlo metoda, kako se danas shvata, podrazumijeva bilokoju tehniku statistickog uzorkovanja primenjenu za aproksimiranjeresenja. Ulam nije smislio statisticko uzorkovanje koje je postojalojos i pre njegove ideje. Bacanje novcica i izvlacenje karata bili sudo tada najcesci nacini za stvaranje slucajnih uzoraka. Ulamov jedoprinos sto je prepoznao potencijal novoizmisljenih elektronickihracunara za automatizovano stvaranje statistickih uzoraka. Radecisa Johnom von Neumannom i Nicolasom Metropolisom, smislio jealgoritme za programsku implementaciju, te je pronasao nacin dase problemi koji nemaju karakter slucajnih odabira pretvore u ob-lik pogodan za statisticko uzorkovanje. Tako je statisticko uzorko-vanje prestalo biti samo matematicka radoznalost i postalo je for-malna metodologija primjenjiva na velik broj problema. Metropolisje imenovao novu metodologiju prema lancu kasina Monte Karlo.Ulam i Metropolis objavili su prvi clanak o Monte Karlo metodi1949. godine.

4

Page 5: SEMINARSKI RAD iz Verovatnoce i Statistike

5

2 Aproksimacija π odabirom tacaka unutar krugakoji je upisan u kvadrat

2.1 Postavka problema

Neophodno je odrediti verovatnocu da slucajno izabrana tacka izkvadrata bude u krugu upisanom u kvadrat.

P (Ω) =(a2)2π

a2 = π4

Kada se izvede n eksperimenata, posmatrani dogadjaj ce se ost-variti k puta, gde je k broj imedju 0 i n. Kolicnik k/n se nazivarelativna frekvencija posmatranog dogadjaja.

U nasem slucaju kn≈ π

4

2.2 Statisticka homogenost

Kad se povecava broj izvedenih eksperimenata, vrednosti rel-ativne frekvencije ce se menjati, ali ta promena nije predvidljiva(jer onda ni ishodi ne bi bili slucajni). Pa ipak zapaza se izvesnapravilnost u koju se svako moze uveriti sprovodjenjem jednostavnogeksperimenta - bacanjem numerisane kockice za igru i belezenjempojavljivanja odredjenog broja. Ta pravilnost se ogleda u sve manjojrazlici izmedju frekvencije i stvarne (teorijske) verovatnoce, racunatepod predpostavkom da je kockica fer. Ta specificna konvergencijaka verovatnoci dogadjaja naziva se statisticka homogenost. Akose pak stvarna verovatnoca ne zna, ili je slozena za izracunavanje,onda se za dovoljno veliko n nepoznata verovatnoca aproksimira rel-ativnom frekvencijom k/n.

5

Page 6: SEMINARSKI RAD iz Verovatnoce i Statistike

2.3 Realizacija algoritma 6

2.3 Realizacija algoritma

Kako je ovde u pitanju aproksimacija, logicno je da ce visebacanja davati bolje rezultate, i ponistiti negativan efekat kom-pjuterski generisanih random brojeva koji nisu zaista nasumicni, vecpseudo-nasumicni. Racunanje broja π na ovaj nacin se zasniva natome da je podjednaka verovatnoca izbora bilo koje tacke u okvirukvadrata, pa cemo mi pretpostaviti da nam nas program daje tackesa uniformnom raspodelom. Iako radimo samo sa celobrojnim koor-dinatama, pa zapravo ne analiziramo kompletnu povrsinu kvadrata,zbog velikih vrednost brojeva rezultati bi trebalo da budu dovoljnoprecizni.

Realizacija algoritma, sa druge strane, je veoma jednostavna.U svakoj iteraciji generisemo dve nasumicne vrednosti koje nampredstavljaju X i Y koordinatu tacke, i njih koristimo da bismoizracunali da li ona pripada krugu ili ne. U svom kodu sam radiosa velikim nenegativnim brojevima da bih izbegao koriscenje manjepreciznih realnih brojeva, odnosno ostavio ga za sam kraj. Kvadratje postavljen u donji levi cosak prvog kvadranta koordinatnog sis-tema, odnosno obuhvata tacke od (0, 0) do (a, a). Formula na krajualgoritma je dobijena preko odnosa povrsina kruga i kvadrata.

ukupanBrojTacakabrojTacakaUKrugu

≈ 4π

⇒ π ≈ 4·brojTacakaUKruguukupanBrojTacaka

Posto koristimo random generator, a zelimo sto vecu preciznost,ogranicio sam stranicu kvadrata na najveci broj koji mozemo dobitiod random generatora, sto je u mom slucaju bilo 231 − 1, odnosnonesto preko dve milijarde. Takodje, da bi se centar kruga nalaziona celobrojnim koordinatama, stranicu kvadrata sam smanjivao naparan broj ukoliko je konstanta RAND MAX neparna, sto bi ugla-vnom i trebalo da bude slucaj.

Program se moze pronaci na mojoj internet strani:http://www.alas.matf.bg.ac.rs/∼mi09036/vis.html

6

Page 7: SEMINARSKI RAD iz Verovatnoce i Statistike

2.4 Kod programa 7

2.4 Kod programa

1 #i n c l u d e <s t d i o . h>2 #i n c l u d e < s t d l i b . h>3 #i n c l u d e <t ime . h>4 i n t main ( )5 6 unsigned long long a = RAND_MAX ; // Duzina s t r a n i c e kvad ra ta78 if ( RAND_MAX & 1) // Uko l i ko j e A neparno smanjujemo ga9 a−−; // za 1 da b i c e n t a r kruga b i l a c e l o b r o j n a v r e dno s t

1011 // Po l up r e c n i k kruga12 unsigned long long r = a /2 ;1314 // Bro j ac tacaka u krugu15 unsigned long long pogodaka = 0 ;1617 // Bro j i t e r a c i j a a l go r i tma , t j . ukupan b r o j tacaka18 unsigned long long n ;1920 // Seed za random gen e r a t o r21 srand ( time ( 0 ) ) ;2223 // Ucitavamo b r o j i t e r a c i j a24 printf ( ” Unet i b r o j i t e r a c i j a : ” ) ;25 scanf ( ”%l l d ” , &n ) ;2627 // I zv r savamo a l g o r i t am28 unsigned long long x , y ;29 unsigned long long rr = r∗r ;3031 unsigned long long i ;32 for ( i = 1 ; i <= n ; i++)33 34 x = rand ( ) ;35 y = rand ( ) ;36 if ( x > a | | y > a ) // Da ne b i d o b i j a l i t a cke van kvad ra ta37 38 i−−; // Ponavl jamo i t e r a c i j u39 continue ;40 41 if ( ( x−r )∗ ( x−r ) + (y−r )∗ ( y−r ) <= rr ) // Jednac ina kruga42 pogodaka++;43 44 doub l e pi = 4 ∗ ( doub l e ) pogodaka / n ;45 printf ( ” Ap rok s imac i j a b r o j a Pi : %l f \n” , pi ) ; // I s p i s u j emo dob i j e nu v r e dno s t46 r e t u r n 0 ;47

7

Page 8: SEMINARSKI RAD iz Verovatnoce i Statistike

2.5 Rezultati testiranja programa 8

2.5 Rezultati testiranja programa

Broj iteracija Vreme izracunavanja Aproksimacija π Greska1.000 <1 sek 3,108000 0.0335910.000 <1 sek 3,153600 0.01200100.000 <1 sek 3,144000 0.002401.000.000 <1 sek 3,140188 0.0014010.000.000 <1 sek 3,141856 0.00026100.000.000 2 sekunde 3,141841 0.000241.000.000.000 50 sekundi 3,141715 0.0002410.000.000.000 6 minuta 3,141595 0.000002100.000.000.000 1 sat 3,141595 0.0000021.000.000.000.000 10 sati 3,141594 0.000001

8

Page 9: SEMINARSKI RAD iz Verovatnoce i Statistike

9

3 Aproksimacija π odabirom tacaka unutar loptekoja je upisana u kocku

3.1 Postavka problema

Ovaj problem je trodimenzionalan za razliku od prethodnog primerai razlikuje se jedino po tome sto smo mu povecali dimenziju i usustini nema bitnijih razlika. Statisticki metod za procenjivanjevrednosti π u ovom primeru je generalizovan upotrebom trodimen-zionalne implementacije.

U ovom primeru neophodno je odrediti verovatnocu da slucajnoizabrana tacka iz kocke bude unutar lopte koja je upisana u kockukao na slici ispod.

P (Ω) =43(a2)3π

a3 =4a3π

24a3 = 4a3π

24a3 = π6

ukupanBrojTacakabrojTacakaULopti

≈ 6π⇒ π ≈ 6·brojTacakaULopti

ukupanBrojTacaka

9

Page 10: SEMINARSKI RAD iz Verovatnoce i Statistike

3.2 Kod programa 10

3.2 Kod programa

1 #i n c l u d e <s t d i o . h>2 #i n c l u d e < s t d l i b . h>3 #i n c l u d e <t ime . h>4 vo i d main ( )5 6 unsigned long long n ;7 unsigned long long r ;8 unsigned long long a = RAND_MAX ;9 unsigned long long x , y , z ;

10 unsigned long long rr ;11 unsigned long long pogodaka = 0 ;12 unsigned long long i ;13 doub l e pi ;1415 if ( RAND_MAX & 1) // Uko l i ko j e A neparno smanjujemo ga16 a−−; // za 1 da b i c e n t a r l o p t e b i l a c e l o b r o j n a v r e dno s t1718 // Po l up r e c n i k l o p t e19 r = a /2 ;2021 // Bro j ac tacaka u l o p t i22 pogodaka = 0 ;2324 srand ( time ( 0 ) ) ;25 // Ucitavamo b r o j i t e r a c i j a26 printf ( ” Unet i b r o j i t e r a c i j a : ” ) ;27 scanf ( ”%l l d ” , &n ) ;28 // I zv r savamo a l g o r i t am2930 rr = r∗r ;3132 for ( i = 1 ; i <= n ; i++)33 34 x = rand ( ) ;35 y = rand ( ) ;36 z = rand ( ) ;37 if ( x > a | | y > a | | z > a ) // Da ne b i d o b i j a l i t a cke van kocke38 39 i−−; // Ponavl jamo i t e r a c i j u40 continue ;41 42 if ( ( x−r )∗ ( x−r ) + (y−r )∗ ( y−r ) + (z−r )∗ ( z−r ) <= rr ) // Jednac ina l o p t e43 pogodaka++;44 45 pi = 6 ∗ ( doub l e ) pogodaka / n ;46 printf ( ” Ap rok s imac i j a b r o j a Pi : %l f \n” , pi ) ; // I s p i s u j emo dob i j e nu v r e dno s t47

10

Page 11: SEMINARSKI RAD iz Verovatnoce i Statistike

3.3 Rezultati testiranja programa 11

3.3 Rezultati testiranja programa

Broj iteracija Vreme izracunavanja Aproksimacija π Greska1.000 <1 sek 3,132000 0.00959210.000 <1 sek 3,161400 0.019807100.000 <1 sek 3,130020 0.0115721.000.000 <1 sek 3,140188 0.00140410.000.000 <1 sek 3,141856 0.000263100.000.000 2 sekunde 3,141726 0.0001331.000.000.000 1 minut 3,141409 0.00018310.000.000.000 7 minuta 3,141595 0.000002

11

Page 12: SEMINARSKI RAD iz Verovatnoce i Statistike

12

4 Aproksimacija π zasnovana na problemu Bu-fonove igle

4.1 Postavka problema

Najoriginalniji i najneocekivaniji nacin pribliznog izracunavanjabroja π jeste sledeci:

Treba imati kratku sivacu iglu(od 2cm.), bolje sa zalomljenimvrhom, da bi igla bila svuda jednake debljine, i na listu hartije trebaizvuci paralelne prave tako da je odstojanje svakih dveju susednihpravih dvaput vece od duzine igle. Zatim se sa izvesne visine iglabaca na hartiju i pazi se na to da li igla sece koju od paralelnihpravih ili ne sece nijednu. Da igla ne bi odskakala, pod hartijuse stavlja upijajuca hartija ili komad meke tkanine. Bacanje igleponavlja se mnogo puta, na primer 100 puta ili, jos bolje, 1000 puta,i svaki put se zapise da li je ili nije bilo presecanja (presecanjemtreba smatrati i onaj slucaj kad igla dodiruje jednu od nacrtanihparalelnih pravih). Ako se ukupan broj bacanja igle podeli brojemslucajeva kad je bilo zapazeno presecanje, tada se u kolicniku moradobiti broj π, t.j. razume se, njegova vise ili manje tacna pribliznavrednost. Objasnicemo zasto se dobija takav kolicnik. Neka je Knajverovatniji broj presecanja neke od posmatranih pravih i igle, aduzina nase igle neka je 20mm.

U slucaju presecanja tacka preseka (odnosno dodira) treba, razumese, da lezi na nekoj od ovih milimetara i u tom pogledu ni bilo koji odnjih ni bilo koji deo igle nema nikakve prednosti. Zato je najverovat-niji broj preseka svakog milimetra k

20. Za deo igle od 3mm. taj broj

je 3k20

, za deo od 11mm. on je jednak 11k20

itd. Drugim recima, na-jverovatniji broj preseka je direktno proporcionalan duzini igle. Tase proporcionalnost zadrzava i u slucaju kad je igla savijena. Nekaje igla savijena, pri cemu je deo AB=11mm, a BC=9mm. Za deoAB najverovatniji broj preseka jednak je 11k

20, za BC je 9k

20, a za celu

iglu je 11k20

+ 9k20

, tj. kao i ranije taj broj je K. Iglu mozemo sav-iti na jos neobicniji nacin - broj preseka se od toga nece promeniti(imajte u vidu da, kad je igla savijena, jednu istu pravu mogu prese-cati dva ili vise delova igle. Takvo presecanje treba racunati kao 2,3itd., jer se prvo ubraja prilikom sracunavanja preseka za jedan deoigle, drugo za drugi deo igle itd.). Zamislite sada da bacamo iglu

12

Page 13: SEMINARSKI RAD iz Verovatnoce i Statistike

4.1 Postavka problema 13

savijenu u obliku kruga s precnikom jednakim rastojanju izmedjuparalelnih pravih (ovo je dvaput vece od nase igle). Takav prsten ceuvek dvaput seci neku liniju (ili odjednom dodirivati dve linije, takoda se u svakom slucaju dobijaju po dva presecanja).Ako je ukupanbroj bacanja N, onda je broj presecanja 2N. Nasa prava igla je odtog prstena manja po dusini onoliko puta koliko je puta poluprecnikmanji od obima kruga, tj.2π puta. Ali, mi smo vec utvrdili da jenajverovatniji broj presecanja proporcionalan duzini igle. Zato na-jverovatniji broj presecanja (K) nase igle mora biti 2π puta manjiod 2N, tj. taj broj je N

π.Otuda je:

π ≈ brojBacanjabrojPresecanja

Ukoliko se posmatra veci broj bacanja, utoliko se dobija tacnijavrednost broja π. Svajcarski astronom R. Volf je sredinom proslogveka posmatrao 5000 bacanja igle na hartiju sa izvucenim paralel-nim pravim i za broj π je dobio vrednost 3,159..., koja je uostalom,manje tacna od Arhimedovog broja. Kao sto vidite, odnos obimakruga prema precniku nalazi se ovde eksperimentalnim putem, pricemu se (i to je najzanimljivije) ne crta ni krug ni njegov precnik,tj.radi se bez sestara. Covek koji nema nikakvih predstava o ge-ometriji, pa cak ni o krugu, moze na taj nacin odrediti broj π, akostrpljivo izvrsi veliki broj bacanja igle.

13

Page 14: SEMINARSKI RAD iz Verovatnoce i Statistike

4.2 Modelovanje problema 14

4.2 Modelovanje problema

Modelovonje problema podelicemo u pet koraka:

1. Prepoznavanje slucajnih velicina koje su nam od interesa

Bilo koji ishod eksperimenta je u potpunosti odredjen polozajemigle u ravni. Zbog pocetnog uslova (l < d) igla ne moze da secevise od jedne prave, pa je dovoljno posmatrati polozaj u odnosu nanajblizu pravu. U odnosu na ovu pravu polozaj igle je u potpunostioderedjen dvema slucajnih velicinana:

X - ugao igle u odnosu na pravu meren u smeru suprotnom od smera kretanja kazaljkena satuY - rastojanje sredista igle od prave

Za slucajne velicine definisane na ovaj nacin vazi: 0 6 X 6 π, 0 6 Y 6 d2

2. Definisanje prostora svih ishoda za prethodno uocene slucajnevelicine

Prostor svih ishoda (X,Y) odgovara pravougaoniku:

Π = (X, Y ) = (x, y) : 0 6 x 6 π, 0 6 y 6 d2

14

Page 15: SEMINARSKI RAD iz Verovatnoce i Statistike

4.2 Modelovanje problema 15

3. Definisanje prostora povoljnih ishoda

Da bi odredili prostor povoljnih ishoda moramo da prepoznamoone tacke prostora svih ishoda u kojima igla sece neku od pravih(tacke u kojima se eksperiment realizovao). Neformalno, igla secepravu ukoliko je rastojanje sredista igle od te prave dovoljno maloza neku fiksiranu ugaonu poziciju igle. Sto znaci da ako koordinatudonjeg kraja igle napisemo u obliku y− 1

2sin(x), zakljucujemo da se

presek javlja ukoliko je ova vrednost negativna, tj. ako vazi:

y 6 12sin(x)

4. Odredjivanje zajednicke raspodele verovatnoca na prethodnodefinisanom prostoru ishoda

Zajednicka raspodela verovatnoca slucajnih velicina X i Y jeodredjena njihovom zajednickom funkcijom gustine f(X,Y )(x, y). Dabi odredili zajedni vcku gutinu moramo prvo utvrditi nacin na koji seeksperiment izvodi. Kako se igla baca na slucajan nacin, mozemouzeti da je raspodela slucajne velicine X uniformna na intervalu[0, π], tako da je njena marginalna gustina raspodele verovatnoca:

fX(x) = 1π

0 6 x 6 π

Analogno, mozemo smatrati da slucajna velicina Y ima uni-formnu raspodelu na intervalu [0, d

2], tako da je njena marginalna

gustina raspodele verovatnoca data na sledeci nacin:

fY (y) = 2d

0 6 y 6 d2

Uocimo da poznavanje ugaone pozicije igle ne moze da utice nanjeno rastojanje od prave i obratno. Stoga, slucajne velicine X i Y

15

Page 16: SEMINARSKI RAD iz Verovatnoce i Statistike

4.2 Modelovanje problema 16

mozemo smatrati nezavisnim, pa je njihova zajednicka funkcija gus-tine raspodele verovatnoca jednaka proizvodu njima odgovarajucihmarginalnih:

f(X,Y )(x, y) = 2πd

0 6 x 6 π 0 6 y 6 d2

5. Resavanje problema u prethodno postavljenim okvirima

Da bi odredili verovatnocu preseka igle sa nekom od pravih moramoda integralimo prethodno utvrdjenu zajednicku gustinu na prostorupovoljnih ishoda:

P =∫ π

0

∫ 12sin(x)

02πddxdy =

2πd

∫ π0 dx

∫ 12sin(x)

0 dy = 1πd

∫ π0 sin(x)dx =

2lπd

Posledica

Bifonov eksperiment nam daje mogucnost procene broja π. Naime,ako se igla baca veliki broj puta (n) na ravan podeljenu paralel-nim pravama i ako m puta presece neku pravu, tada se, premastatistickoj definiciji verovatnoce (posledica zakona velikih brojevakoji kaze da relativna frekvencija nekog dogadjaja u eksperimentukoji se ponavlja, konvergira skoro svuda ka stvarnoj vrednosti verova-tnoce tog dogadjaja), moze uzeti da je verovatnoca preseka igle sanekom pravom priblizno jednaka m

n. Tako da na osnovu prethodno

dobijenog rezultata koji daje tacnu vrednost ove verovatnoce za-kljucujemo da vazi:

2lπd ∼

mn π ∼ 2ln

md

Zakljucak

Bifonov eksperiment nije efikasan metod aproksimacije broja π.Za procenu broja π na cetiri decimale potrebno je oko 100 milionabacanja.

16

Page 17: SEMINARSKI RAD iz Verovatnoce i Statistike

4.3 Opis programa 17

4.3 Opis programa

Koriscenje programa je veoma jednostavno. Kao sto se vidi sa slikeu gornjem levom uglu su cetiri dugmeta. Prvo dugme pokrece sim-ulaciju, drugo dugme usporava simulaciju, a trece dugme ubrzavasimulaciju, dok poslednje cetvto dugme zaustavlja simulaciju.

Ispod dugmica se nalazi slika stola na kom se simulira bacanjeiglica. Na sredini prozora moze se videti trenutni broj pokusajai trakasti grafikon koji ima vrednosti od 3.04 do 3.24 i on nammnogo preciznije prikazuje konvergiranje ka broju π od plotera sadesne strane na kom je skup vrednosti na intervalu od 2 do 4. Iz-nad plotera sa gornje desne strane se nalazi trenutna aproksimiranavrenost broja π.

Program se moze pronaci na mojoj internet strani:http://www.alas.matf.bg.ac.rs/∼mi09036/vis.html

17

Page 18: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 18

4.4 Kod programa

1 impor t java . applet . ∗ ;2 impor t java . awt . ∗ ;34 p u b l i c c l a s s appletBuffon ex t end s Applet imp lements Runnable

5 6 Dimension offDimension , d ; // p r omen l j i v e ko j e se k o r i s t e7 Image offImage ; // van s l i k e sa update ( )8 Graphics offGraphics ; // metod k o j i r e duku j e t r e p e r e n j e9

10 i n t needleLength = 20 ;11 i n t numRows = 10 ;1213 i n t xBorder = 15 ; // p r omen l j i v e za i v i c e p r o zo r a14 i n t yBorder = 45 ;15 i n t margin = 50 ;1617 i n t tableHeight = needleLength∗numRows ; //18 i n t tableWidth = 200 ; // d e f i n i s emo v e l i c i n u s t o l a19 i n t tableXcorner = xBorder ; // na k o j i s e baca ju i g l e20 i n t tableYcorner = yBorder ; //2122 i n t barWidth = 20 ; // d e f i n i s emo v e l i c i n u t r a k a s t o g g r a f i k o n a23 i n t barHeight = tableHeight ;24 i n t barXcorner = xBorder+tableXcorner+tableWidth+margin ;25 i n t barYcorner = tableYcorner ;2627 doub l e barTop = 3 . 2 4 ; // d e f i n i s emo l i m i t e za t r a k a s t i g r a f i k o n28 doub l e barBot = 3 . 0 4 ; // na v r e d n o s t i od 3 .04 do 3 .24 tako da j e p i u s r e d i n i29 doub l e barMid = ( barTop+barBot ) / 2 ;3031 i n t barValue ; // d inamicka v r e dno s t t r a k a s t o g g r a f i k o n a3233 i n t plotWidth = 200 ; // d e f i n i s emo v e l i c i n u p l o t e r a34 i n t plotHeight = tableHeight ;35 i n t plotXcorner = barXcorner+margin+barWidth+xBorder ;36 i n t plotYcorner = tableYcorner ;3738 doub l e plotMax = 4 ; // po s t a v l j amo l i m i t e za p l o t e r39 doub l e plotMin = 2 ;40 doub l e plotMid = ( plotMax+plotMin ) / 2 ;4142 i n t barMaxPlot = ( i n t ) ( plotHeight ∗( plotMax−barTop )/43 ( plotMax−plotMin ) ) ;44 i n t barMinPlot = ( i n t ) ( plotHeight ∗( plotMax−barBot )/45 ( plotMax−plotMin ) ) ;46 i n t barThick=(barMaxPlot==barMinPlot ? 1 :47 barMinPlot−barMaxPlot ) ;4849 i n t pointerWidth=30; // p o i n t e r za t r a k a s t i g r a f i k o n50 i n t pointerTop , pointerBot ;5152 i n t power = 5 ; // v r edno s t amp l i t ude za x osu p l o t e r a5354 i n t n = 0 ; // b r o j bacen ih i g l i

18

Page 19: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 19

55 i n t hit = 0 ; // b r o j i g l i k o j e su p o g od i l e l i n i j u56 i n t i = 1 ; //5758 doub l e needleX1 , needleX2 , needleY1 , needleY2 ;59 doub l e deltaX , deltaY ;6061 i n t ysign ;6263 f i n a l doub l e piValue=2.0∗ Math . atan ( 1 . 0 ) ;6465 i n t x1 , x2 , y1 , y2 ; // p r omen l j i v e za c r t a n j e i g l i c a66 i n t gx1 , gx2 , gy1 , gy2 ; // p r omen l j i v e za p r a v l j e n j e p l o t e r a6768 i n t speed = 20 ; // p o s t a v l j a n j e b r z i n e sa t r y−ca tch blokom6970 doub l e h = 0 ; // r e a l n a v r e dno s t p r omen l j i v e ko j a b r o j i pogotke71 doub l e estPi , prevEstPi ; // p r i b l i z n a v r e dno s t p i72 doub l e prob = 1 ; // odnos pogodaka i pokusa j a73 doub l e prev = 1 ; // odnos po prethodnom sud j e n j u7475 boo l ean oldScreen = f a l s e ;76 boo l ean begin = f a l s e ;7778 Thread t ;79 Button b1 , b2 , b3 , b4 ;8081 p u b l i c vo i d init ( )82 83 setLayout ( new FlowLayout ( FlowLayout . LEFT ) ) ;84 b1 = new Button ( ”Pocni ” ) ;85 b2 = new Button ( ” Uspo r i ” ) ;86 b3 = new Button ( ” Ubrza j ” ) ;87 b4 = new Button ( ” Zau s t a v i ” ) ;8889 add ( b1 ) ;90 add ( b2 ) ;91 add ( b3 ) ;92 add ( b4 ) ;9394 t = new Thread ( this ) ;95 t . start ( ) ;96 9798 p u b l i c boo l ean action ( Event e , Object o )99

100 if ( o . equals ( ”Pocni ” ) )101 102 n = 0 ;103 hit = 0 ;104 oldScreen = f a l s e ;105 begin = t r u e ;106 107 else if ( o . equals ( ” Zau s t a v i ” ) )108 109 t . stop ( ) ;110 111 else if ( o . equals ( ” Ubrza j ” ) )

19

Page 20: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 20

112 113 speed = ( speed>10? speed−10 : 1 0 ) ;114 115 else if ( o . equals ( ” Uspo r i ” ) )116 117 speed = speed+10;118 119 r e t u r n t r u e ;120 121122 p u b l i c vo i d run ( )123 124 while ( t r u e )125 126 if ( begin )127 128 // i z r a c u n a v a n j e p o z i c i j e k r a j a i g l e129130 needleX1 = tableWidth∗Math . random ( ) ;131 needleY1 = tableHeight∗Math . random ( ) ;132 deltaX = needleLength∗Math . sin (2∗ piValue∗Math . random ()−piValue ) ;133 deltaY = Math . sqrt ( needleLength∗needleLength−deltaX∗deltaX ) ;134 needleX2 = needleX1+deltaX ;135 ysign = ( Math . random ()<0.5? −1 : 1 ) ;136 needleY2 = needleY1+ysign∗deltaY ;137138 // p r o v e r a v a n j e da l i i g l a p r e l a z i l i n i j u139140 for ( i n t yLine=0; yLine<=needleLength∗numRows ; yLine+=needleLength )141 142 if ( ( needleY1<=yLine && needleY2>=yLine ) | |143 ( needleY1>=yLine && needleY2<=yLine ) )144 145 hit++;146 break ;147 148 149 n++;150 prev = prob ;151 h = hit ;152 prob = h/n ;153 prevEstPi = 2/prev ;154 estPi = 2/prob ;155156 // i z r a c u n a v a n j a za p l o t e r157158 gx1 = ( i n t ) ( plotXcorner+Math . log ( n )∗ plotWidth /( power∗Math . log ( 1 0 ) ) ) ;159 gx2 = ( i n t ) ( plotXcorner+Math . log ( n+1)∗plotWidth /( power∗Math . log ( 1 0 ) ) ) ;160 gy1 = ( i n t ) ( plotYcorner+(plotHeight /( plotMin−plotMax ) )∗161 ( prevEstPi−plotMax ) ) ;162 if ( gy1<=plotYcorner ) gy1 = plotYcorner+1;163 if ( gy1==plotYcorner+plotHeight ) gy1=gy1−1;164 gy2 = ( i n t ) ( plotYcorner+(plotHeight /( plotMin−plotMax ) )∗165 ( estPi−plotMax ) ) ;166 if ( gy2<=plotYcorner ) gy2 = plotYcorner+1;167 if ( gy2==plotYcorner+plotHeight ) gy2=gy2−1;168

20

Page 21: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 21

169 // i z r a c u n a v a n j a za c r t a n j e i g l i c a170171 x1 = ( i n t ) ( xBorder+needleX1 ) ;172 x2 = ( i n t ) ( xBorder+needleX2 ) ;173 y1 = ( i n t ) ( yBorder+needleY1 ) ;174 y2 = ( i n t ) ( yBorder+needleY2 ) ;175 repaint ( ) ;176 177 try

178 179 Thread . currentThread ( ) . sleep ( speed ) ;180 181 catch ( InterruptedException e )182 183 184 185 186187 p u b l i c vo i d paint ( Graphics g )188 189 d = size ( ) ;190 update ( g ) ;191 192193 p u b l i c vo i d update ( Graphics g )194 195 if ( ( offGraphics==null )196 | | ( d . width !=offDimension . width )197 | | ( d . height !=offDimension . height ) )198 199 offDimension = d ;200 offImage = createImage ( d . width , d . height ) ;201 offGraphics = offImage . getGraphics ( ) ;202 203204 if ( ! oldScreen )205 206 offGraphics . setColor ( getBackground ( ) ) ;207 offGraphics . fillRect (0 , 0 , d . width , d . height ) ;208 offGraphics . setColor ( Color . gray ) ;209 offGraphics . fillRect ( plotXcorner , plotYcorner+barMaxPlot ,210 plotWidth , barMinPlot−barMaxPlot ) ;211 offGraphics . drawString ( ” ”+barMid+”−” , barXcorner−45,212 barYcorner+barHeight /2 ) ;213 offGraphics . drawString ( ” ”+barTop+”−” , barXcorner−45,214 barYcorner+5);215 offGraphics . drawString ( ” ”+barBot+”−” , barXcorner−45,216 barYcorner+3+barHeight ) ;217 offGraphics . drawString ( ”−”+plotMax , plotXcorner+plotWidth+2,218 plotYcorner+5);219 offGraphics . drawString ( ”−”+plotMin , plotXcorner+plotWidth+2,220 plotYcorner+plotHeight+5);221 offGraphics . drawString ( ”−”+plotMid , plotXcorner+plotWidth+2,222 plotYcorner+plotHeight /2+5);223 offGraphics . drawString ( ” G r a f i k a p r o k s ima c i j e b r o j a p i ” ,224 plotXcorner+5, plotYcorner+plotHeight+20);225

21

Page 22: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 22

226 // c r t a n j e l i n i j a ko j e se odnose na t r a k a s t i g r a f i k o n i p l o t e r227228 offGraphics . drawLine ( barXcorner+barWidth+5, barYcorner ,229 plotXcorner−5, barMaxPlot+plotYcorner ) ;230 offGraphics . drawLine ( barXcorner+barWidth+5, barYcorner+barHeight ,231 plotXcorner−5, barMinPlot+plotYcorner ) ;232233 // c r t a n j e s t o l a na k o j i pada ju i g l e i o se p l o t e r a234235 offGraphics . setColor ( Color . blue ) ;236 offGraphics . drawRect ( tableXcorner , tableYcorner , tableWidth , tableHeight ) ;237 offGraphics . drawRect ( plotXcorner , plotYcorner , plotWidth , plotHeight ) ;238239 for ( i=1; i<tableHeight/needleLength ; i++)240 241 offGraphics . drawLine ( tableXcorner , tableYcorner+needleLength∗i ,242 tableXcorner+tableWidth , tableYcorner+needleLength∗i ) ;243 244 oldScreen = t r u e ;245 246247 else

248 249 offGraphics . setColor ( getBackground ( ) ) ;250 offGraphics . fillRect (0 , 0 , d . width , yBorder −10);251 252253 // i s p i s i v a n j e p r i b l i z n e v r e d n o s t i p i254255 offGraphics . setColor ( Color . black ) ;256 offGraphics . drawString ( ”Trenutna v r e dno s t b r o j a p i : ”+estPi ,257 plotXcorner+10, 2 0 ) ;258 offGraphics . drawString ( ”Br . pokusa j a : ”+n , 240 , 2 0 ) ;259260 offGraphics . setColor ( Color . black ) ;261262 // vodimo racuna da se n i j edna i g l a ne nad j e i z v an g r a n i c a s t o l a263264 x1 = ( x1>tableXcorner+tableWidth ?265 tableXcorner+tableWidth : x1 ) ;266 x2 = ( x2>tableXcorner+tableWidth ?267 tableXcorner+tableWidth : x2 ) ;268 y1 = ( y1>tableYcorner+tableHeight ?269 tableYcorner+tableHeight : y1 ) ;270 y2 = ( y2>tableYcorner+tableHeight ?271 tableYcorner+tableHeight : y2 ) ;272273 x1 = ( x1<tableXcorner ? tableXcorner : x1 ) ;274 x2 = ( x2<tableXcorner ? tableXcorner : x2 ) ;275 y1 = ( y1<tableYcorner ? tableYcorner : y1 ) ;276 y2 = ( y2<tableYcorner ? tableYcorner : y2 ) ;277278 offGraphics . drawLine ( x1 , y1 , x2 , y2 ) ;279280 // c r t a n j e t r a k a s t o g g r a f i k o n a281282 offGraphics . setColor ( Color . gray ) ;

22

Page 23: SEMINARSKI RAD iz Verovatnoce i Statistike

4.4 Kod programa 23

283 offGraphics . fillRect ( barXcorner , barYcorner , 20 , barHeight ) ;284285 offGraphics . setColor ( Color . red ) ;286287 barValue = ( i n t ) ( barHeight ∗( estPi−barTop )/ ( barBot−barTop ) ) ;288 if ( barValue<0−pointerWidth /2) barValue=0−pointerWidth /2 ;289 if ( barValue>barHeight+pointerWidth /2) barValue=barHeight+290 pointerWidth /2 ;291292 pointerTop = ( barValue−pointerWidth/2<0 ?293 0 : barValue−pointerWidth /2 ) ;294 pointerBot = ( barValue+pointerWidth/2>barHeight ?295 barHeight : barValue+pointerWidth /2 ) ;296297 offGraphics . fillRect ( barXcorner , barYcorner+pointerTop ,298 barWidth , pointerBot−pointerTop ) ;299300301 offGraphics . setColor ( Color . gray ) ;302 if ( barValue<0) barValue=0;303 if ( barValue>barHeight ) barValue=barHeight ;304 offGraphics . drawLine ( barXcorner , barYcorner+barValue ,305 barXcorner+barWidth−1, barYcorner+barValue ) ;306307 // c r t a n j e p l o t a308309 offGraphics . setColor ( Color . red ) ;310311 offGraphics . drawLine ( gx1 , gy1 , gx2 , gy2 ) ;312 g . drawImage ( offImage , 0 , 0 , this ) ;313 314

23

Page 24: SEMINARSKI RAD iz Verovatnoce i Statistike

4.5 Rezultati testiranja programa 24

4.5 Rezultati testiranja programa

Broj iteracija 1. eksperiment 2. eksperiment 3. eksperiment 4. eksperiment

500 3,13283208 3,23206205 3,09214594 3,32225913

5.000 3,14248004 3,15636639 3,11642981 3,11235605

50.000 3,15566915 3,14524753 3,15845993 3,14607872

500.000 3,13949662 3,14416763 3,14020053 3,14390469

Broj iteracija 5. eksperiment 6. eksperiment 7. eksperiment 8. eksperiment

500 3,38524035 3,20307495 3,21750321 3,27653997

5.000 3,11235605 3,10829292 3,07616586 3,10829292

50.000 3,14497056 3,12666103 3,12789330 3,11398428

500.000 3,13632601 3,14380783 3,13764864 3,14330977

Broj bacanja 500 5.000 50.000 500.000

Standardna greska 0.091114511 0.0250001485 0.0017220910 0.00048493858

Histogram rezultata za 10.000 eksperimenata u kojima je baceno 100.000 igli

24

Page 25: SEMINARSKI RAD iz Verovatnoce i Statistike

25

5 Poredjenje brzine konvergencije u sva 3 slucaja

π = 3.1415926535897932384626433832795...

Broj iteracija Krug upisan u kvadrat Lopta upisana u kocku Bufonova igla1.000 3.108000 3,132000 3.12012410.000 3.153600 3,161400 3.150102100.000 3.144000 3,130020 3.1384361.000.000 3.140188 3,140188 3.13645110.000.000 3.141856 3,141856 3.141186100.000.000 3.141841 3,141726 3.1414401.000.000.000 3.141715 3,141409 3.14150110.000.000.000 3.141595 3,141595 3.141590

```````````Br. iteracijaGreska

Krug upisan u kvadrat Lopta upisana u kocku Bufonova igla

1.000 0.033592 0.009592 0.02146810.000 0.120073 0.019807 0.008509100.000 0.002473 0.011572 0.0031561.000.000 0.001404 0.001404 0.00514110.000.000 0.000263 0.000263 0.000406100.000.000 0.000248 0.000133 0.0001521.000.000.000 0.000122 0.000183 0.00009210.000.000.000 0.000002 0.000002 0.000003

25

Page 26: SEMINARSKI RAD iz Verovatnoce i Statistike

26

6 Zakljucak

Monte Karlo metoda je numericki postupak za aproksimiranje(izracunavanje) integrala upotrebom racunarskih mogucnosti i pro-secne snage racunara. Prednosti Monte Karlo metode su intuitivnostpostupka aproksimacije, te jednostavno predstavljanje i primenji-vanje u racunarskim izracunavanjima. Jos jedna znacajna pred-nost ove metode je primena na visedimenzionalne integrale. Kad sepodize na vise dimenzije, broj operacija koje treba izvesti raste ek-sponencijalno s dimenzionalnoscu podintegralne funkcije integrala.Zbog tog nedostatka metode se uz odredjena ogranicenja primjen-juju na integrale visedimenzionalnih funkcija. Monte Karlo metodanema ogranicenja po pitanju visedimenzionalnosti. Jednako se mozeprimenjivati na 1000-dimenzionalni integral kao i na integral sa samojednom dimenzijom.

Iako je princip Monte Karlo metode jednostavan za program-sko ostvarenje, za slozene probleme racunarsko izracunavanje mozebiti zahtevno cak i s najjacim racunarom. Stoga postoje nacini dase ubrza Monte Karlo metoda analize. U tim slucajevima moguse koristiti razlicite tehnike smanjivanja varijance koje ce smanjitislozenost izracunavanja.

26

Page 27: SEMINARSKI RAD iz Verovatnoce i Statistike

27

7 Literatura

[1] Jevremovic Vesna, Verovatnoca i statistika, Matematicki fakultet,Beograd 2009.

[2] Richard J. Gonsalves, Monte Carlo Calculation of Pi , Physics Dept., SUNY,University at Buffalo, NY

[3] http : //en.wikipedia.org/wiki/Buffon′s needle

[4] Richard W. Hamming, TheArtofProbability, Addison-Wesley, 1991

[5] Edwin Miles , Monte Carlo Integration: an Overview with Examples, 2004

[6] Harry Khamis, Statistical Consulting Center, Buffon’s Needle Problem, WrightState University, Dayton OH

[7] Eve Astrid Andersson, Calculation of Pi Using the Monte Carlo Method,Computer Science Dept., Northface University, Salt Lake City, UT

[8] Ronald Mak, Monte Carlo and Buffon’s Needles applet, Java Number Cruncher,Prentice Hall, Inc.

27