numericke metode-seminarski rad monte carlo metoda fortran

Upload: joshua-davis

Post on 13-Oct-2015

149 views

Category:

Documents


0 download

DESCRIPTION

Primjer Monte Carlo metode programiranjem u fortranu

TRANSCRIPT

  • 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