Upload
joshua-davis
View
149
Download
0
Embed Size (px)
DESCRIPTION
Primjer Monte Carlo metode programiranjem u fortranu
Citation preview
SEMINARSKI RAD
IZ PREDMETA: NUMERICKE METODE U MASINSTVU
TEMA: IZRACUNAVANJE INTEGRALA METODOM MONTE CARLO
Od nasuminog do realnogGlavna znaajka Monte Carlo metode je upotreba sluajnih brojeva u rjeavanju razliitih problema a to su najcesce matematicki problemi cija se rjesenja nemogu odrediti analiticki ili za to ne postoje ucinkoviti numericki algoritmi.Uz to, esto se koriste i za provjeru rezultata dobivenih analitikim ili drugim metodama. Zbog velikog broja matematikih operacija i ponavljanja, Monte Carlo metode ulaze u iroku upotrebu tek s naglim razvojem raunala u posljednjim desetljeima dvadesetog stoljea..
Svaki matematiki model u Monte Carlu odvija se po istom uzorku: 1. Odrediti domenu ulaznih podataka 2. Generirati ulazne podatke nasumino iz domene 3. Izvesti deterministiku raunicu koristei ulazne podatke 4. Pronai srednju vrijednost svake pojedine raunice
Najlakse je objasniti metodu Monte Carlo na jednostavnom primjeru odredivanja broja .
Zakon velikih brojeva govori nam da e omjer broja taaka koje su zavrile unutar jedinine krunice i ukupnog broja taaka biti priblino jednak traenoj vjerojatnosti; naravno, ako izaberemo dovoljno velik broj taaka. to je vei broj odabranih taaka, to je i na rezultat blie tanoj vrijednosti. Dakle, jedina nepoznata u nasoj jednaini je broj . Moemo napisati:
n- broj taaka unutar jedinine krunice, i- ukupan broj odabranih taaka.
Na slici prikazan je rezultat jedne simulacije uz hiljadu odabranih taaka. Dobiveni rezultat: = 3,108 govori da ovakav nain procjene nije vrlo precizan. Algoritam moemo poboljati odaberemo li npr. sto tisua taaka. Takvim algoritmom dobivamo = 3,1420, to je ve precizniji rezultat. Ako stotinu puta ponovimo algoritam sa sto hiljada taaka, pohranimo svaki dobiveni rezultat i uzmemo srednji rezultat svih ponavljanja, dobit emo vrijednost = 3,141519, to je vrlo dobar rezultat, pogotovo ako su nam dovoljne prve tri ili etiri decimale.
Primer monte karlo integracije na nekoj funkciji f(x)Osnova su proizvoljni brojevi ili pseudoproizvoljni brojevi. U okviru pravougaonika koji izaberemo (visinu moemo sami da definiemo, dok je irina dati interval) posmatramo odreen broj (n) proizvoljnih taaka podjednako rasporeenih u izabranoj oblasti. Broj taaka koje se nalaze unutar funkcije u odnosu na ukupan broj taaka trebalo bi da nam da priblinu vrednost odnosa integrala i sveukupne povrine.Matematiki zapisano:
A- povrina pravougaonika
Za veliki broj taaka naa preciznost se poveava, a ovaj nain integracije se pre svega primenjuje na viedimenzionalne probleme (tada naravno nije re o pravougaoniku ve o kocki, hiperkocki itd.).
1. Zatvorimo f(x) u pravokutnik povrine A i odredimo ymax 2. Uniformno popunimo kutiju s N sluajnih taaka (x,y):x = a + (b-a)* R1 ovim obezbjedujemo da ce koordinata x biti u intervalu a,b po x osi jer je R1 slucajan broj u intervalu (0,1)y = ymax *R2 ovim obezbjedujemo da koordinata y bude manje od ymax jer je R2 slucajan broj u intervalu (0,1)Ovako smo odredili x,y koordinate jer se slucajna tacka M(x,y) mora naci unutar povrsine A
Brojimo one take koje su ispod krivePo zakonu vjerovatnoce odnos izmedu broja tacaka koje ce se naci u povrsini omedenoj integralom f(x) i ukupnog broja slucajnih tacaka jednak je odnosu izmedu povrsine A=(b-a)*ymax i povrsine koju racunamo integralom I=f(x) =>
Zadatak: Monte Carlo metodom odrediti integralu intervalu (1,10)
DEKLARISANJE VARIJABLIprogram monte_carloreal::a,b,ymax,j,rjesinteger::n,m,iprint *,'pocetak i kraj intervala, te broj koraka'read *, a, b, Nprint *,'unesi koeficijente q,r,t'read*,q,r,t
ODREDIVANJE Ymax na unesenom intervalucall cpu_time(time_begin)dx=(b-a)/1000. !podijelimo interval na 1000 dijelovado j=a,b,dx !gore dobijena podjela ce biti korak u ovoj petljiymax=funkc(q,a,r,t)if(funkc(q,j,r,t).gt.funkc(q,a,r,t))thenymax=funkc(q,j,r,t)elseendifend doprint *,'Maksimalna vrijednost funkcije u intervalu',ymax
Izracunavanje integralam= 0 !suma pogodaka deklarisemo da je jednaka nulido I = 1, N CALL RANDOM_NUMBER(R1) CALL RANDOM_NUMBER(R2) x = a + (b-a)*R1 !ovo je da budemo sigurni da ce x biti u intervalu (a,b) jer je R1 proizvoljan broj u intervalu (0,1)y = Ymax*R2 !ovo je da obezbijedimo da y bude manje od ymax jer je R2 proizvoljan broj u intervalu (0,1)IF (y.lt.funkc(q,x,r,t))m = m+1 !ako je y manje od f(x) znaci da se nalazi u povrsini ogranicenoj integralom i sabjeremo to kao pogodakEND DO call cpu_time(time_end)
Nasa zadata funkcijareal function funkc(q,z,r,t)real::zfunkc=q*z**2+r*z+treturnend
Printanje rezultata i zatvaranje programaPRINT *,'I =',(b-a)*Ymax*m/nPrint *,'vrijeme trajanja operacije je', time_end-time_beginrjes=(q/3)*(b**3)+(r/2)*(b**2)+t*b-(q/3)*(a**3)-(r/2)*(a**2)-t*atacn=abs(rjes-(b-a)*Ymax*m/n)print*,'rjesenje integrala je',rjesprint*,'Greska u mjerenju je',tacnend program monte_carlo
program monte_carloreal::a,b,ymax,j,rjesinteger::n,m,iprint *,'pocetak i kraj intervala, te broj koraka'read *, a, b, Nprint *,'unesi koeficijente q,r,t'read*,q,r,tcall cpu_time(time_begin)dx=(b-a)/1000. !podijelimo interval na 1000 dijelovado j=a,b,dx !gore dobijena podjela ce biti korak u ovoj petljiymax=funkc(q,a,r,t)if(funkc(q,j,r,t).gt.funkc(q,a,r,t))thenymax=funkc(q,j,r,t)elseendifend doprint *,'Maksimalna vrijednost funkcije u intervalu',ymaxm= 0 do I = 1, N CALL RANDOM_NUMBER(R1) CALL RANDOM_NUMBER(R2) x = a + (b-a)*R1 y = Ymax*R2 IF (y.lt.funkc(q,x,r,t))m=m+1END DO call cpu_time(time_end)PRINT *,'I =',(b-a)*Ymax*m/nPrint *,'vrijeme trajanja operacije je', time_end-time_beginrjes=(q/3)*(b**3)+(r/2)*(b**2)+t*b-(q/3)*(a**3)-(r/2)*(a**2)-t*atacn=abs(rjes-(b-a)*Ymax*m/n)print*,'rjesenje integrala je',rjesprint*,'Greska u mjerenju je',tacnend program monte_carloreal function funkc(q,z,r,t)funkc=q*z**2+r*z+treturnend
Literatura
Uvod u numericku analizu Dr. Dobrilo . Tosic 1978http://wiki.fizika.org/wiki/Monte_Carlo_metodehttp://infotrend.s3.novenaweb.info/clanak/2009/5/od-slucajnog-do-realnog,36,729.htmlhttp://sr.wikipedia.org//sr-el/__http://web.zpr.fer.hr/ZPM13C2/Monte_Carlo.pdf