LASKENNALLISEN TIETEEN ERIKOISKURSSI kl 2000 Laskuharjoitus Detaljibalassi Osoita, että siirtymätodeäköisyydet π m α m ; ρ, m ρ α m ----- ; ρ < ρ, m m π m, m m ja π m ρ α m ------------------ ρ +, m π m, m m toteuttavat detaljibalassi π m ρ π m, ku lisäksi pätee α m α m
2 RATKAISU: a) π m α m ; ρ, m ρ α m ----- ; ρ < ρ, m m π m, m m Tapaus m : triviaali Tapaus m, ρ : ρ ρ π m α m α m ---- m ρ α m ----- ρ π m ρ ρ Tapaus m, ρ < : ρ π m α m ----- ρ α m ρ α m ρ π m b) π m ρ α m ------------------ ρ +, m π m, m m Tapaus m : triviaali Tapaus m : π m α ρ m ------------------ ρ + α m ------------------ ρ + π m ρ ρ
3 2 Detaljibalassi toteuttava MC-algoritmi Laske itegraali I 0 f()x x d, (missä f() x x 2 ) arvo MC-meetelmällä Käytä sekä a) suoraa otataa (direct samplig), b) paiotettua otataa (importace samplig) [kappale 4] ja lueoilla esitettyä Metropolis MC-algoritmia [kaava (424)] Suorassa äytteeottomeetelmässä itegraali lasketaa yksikertaisesti arpomalla tasaisesti väliltä [ 0, ] ja summaamalla e yhtee: x : arvoja I N i f( x i ) Paiotetussa otaassa tarvitsemme tiheysfuktio lueot kappale 4] Olkoo tiheysfuktiomme ρ() x, joka o lähellä optimaalista [ks ρ() x -- ( exp( x, Z 2 ) ) missä ormitusvakio o Z ( exp( x 2 ) ) d x 04626567 Itegraali tulee yt muotoo 0 I N i ρ( x i )gx ( i ), missä gx () x 2 f() x --------- ρ() x Z ---------------------------- exp( x 2 ) Itegraali lasketaa yt geeroimalla Metropolis-algoritmilla pisteitä x i, jotka oudattavat jakaumaa ρ() x, ja summaamalla fuktio g arvoja äissä pisteissä Aloita laskemie satuaisesta pisteestä välillä [ 0, ] ja geeroi uusi piste poikkeuttamalla x : arvoa esimerkiksi 02 : verra ylös- tai alaspäi [yritetodeäköisyys α mx kaavassa (424)] Jos piste meee itegroitialuee ulkopuolelle yritesiirrossa, hylkää uusi : arvo, ja käytä vahaa x : arvoa laskureide päivittämisee
Vertaile äide kahde meetelmä tehokkuutta laskemalla itegraali variassi Tarkista, että kohdassa b geeroidut pisteet oudattavat oikeaa jakaumaa Voisiko b-kohda meetelmällä saatuja lukuja x i käyttää haluttua jakaumaa oudattavie satuaislukuje geeroitii? Perustele Jos käytössäsi ei ole satuaislukugeeraattoria, voit hakea C-kielise geeraattori kurssi kotisivulta: RATKAISU: x i http://wwwlcehutfi/teachig/s-4250/lh/r250/ 4 Ohessa itegroitiohjelma pääohjelma /* Demostratio of ) direct samplig ad 2) importace samplig usig Metropolis algorithm i MC itegratio */ #iclude <limitsh> #iclude r250h #iclude <stdioh> #iclude <stdlibh> #iclude <mathh> #defie RN dr250() #defie NNN 50 #defie SCALE 000 double f(double x); double g(double x); double rho(double x); it getseed(); void mai(it argc, char **argv) { double dx0; it max,seed,eq; double sum,sum2,x,x_ew,gx,gx_ew,dx,rhox,rhox_ew; double sumd,sumd2,xdir,fx; it,i,orm,ix,dist[nnn],acc; double x00,x20,z04626567,itegral,std; if (argc!5) { fpritf(stderr, Usage: %s dx max eq seed\, argv[0]); exit(); /* Read commad lie argumets */ dx0atof(*(++argv)); maxatoi(*(++argv)); eqatoi(*(++argv)); seedatoi(*(++argv)); if (seed<0) seedgetseed(); fpritf(stderr, Args %g %g %g %d %d\,x,x2,dx0,max,seed); Muut tarvittavat aliohjelmat voit ladata osoitteesta http://wwwlcehutfi/teachig/s-4250/lh/
5 /* Do some iitializatio */ r250_iit(seed); for (i0;i<nnn;i++) dist[i]0; ormacc0; xx+rn*(x2-x); sumsum2sumdsumd200; gxg(x); rhoxrho(x); fpritf(stderr, Startig at %g %g\,x,gx); /* MC loop */ for (;<max;++) { /* Geerate a ew poit */ dx(20*rn-0)*dx0; x_ewx+dx; if (x_ew>x && x_ew<x2) { /* Check if it is withi rage of itegratio */ gx_ewg(x_ew); rhox_ewrho(x_ew); if (RN<rhox_ew/rhox) { /* Do the Metropolis step */ acc++; xx_ew; gxgx_ew; rhoxrhox_ew; if (>eq) { /* Accumulate sums */ /* Direct samplig */ xdirx+rn*(x2-x); fxf(xdir); sumd+fx; sumd2+fx*fx; /* Importace samplig */ sum+gx; sum2+gx*gx; orm++; ix(it)(scale*x); if (ix>0 && ix<nnn) dist[ix]++; /* Fial output */ for (i0;i<nnn;i++) fpritf(stdout, %g %d\,(double)i/scale,dist[i]); itegralz*sum/(double)orm; stdz*sqrt(fabs(sum2/orm-(sum/orm)*(sum/orm))/orm); fpritf(stderr, Importace samplig: orm %d itegral %g std %g\,orm,itegral,std); itegralsumd/(double)orm; stdsqrt(fabs(sumd2/orm-(sumd/orm)*(sumd/orm))/orm); fpritf(stderr, Direct samplig: orm %d itegral %g std %g\,orm,itegral,std); exit(0); double f(double x) { retur x*x; double g(double x) { retur x*x/(exp(x*x)-0); double rho(double x) { retur exp(x*x)-0;
6 Kääös ja ajo: ratkaisu> cc -o mciteg mcitegc r250c radlcgc getseedc -lm mcitegc: r250c: radlcgc: getseedc: ratkaisu> mciteg 0 05 0000 00 0 > distdat Args 0 05 0000 26329 Startig at 0329385 0946734 Importace samplig: orm 00000 itegral 03333 std 000052458 Direct samplig: orm 00000 itegral 0334003 std 000094554 ratkaisu> Ajoje tulokset erisuuruisilla otoksilla: N I direct I Metropolis 0 0640564 ± 0083583 0273045 ± 0000234442 00 0329693 ± 0029806 033659 ± 00045934 000 0328269 ± 000930463 034069 ± 0007723 0000 033566 ± 000299534 034702 ± 000052049 00000 0333848 ± 0000943563 0333753 ± 00005878 000000 0333339 ± 000029804 0332509 ± 473584e-05 0000000 033333 ± 942909e-05 033304 ± 50822e-05 00000000 0333207 ± 29842e-05 0332955 ± 476407e-06 000000000 033327 ± 942755e-06 0332928 ± 5058e-06
7 Allaolevassa kuvassa o esitetty itegraali arvo otokse koo fuktioa 20 8 I MC / I exact 6 4 2 importace samplig direct samplig 0 08 0 2 0 4 0 6 0 8 N sample
8 Ja alla otokse pisteide jakauma erisuuruisilla otoksilla (Metropolis-alrogitmi), 5 N(x) (arb uits) 4 3 2 0 3 0 5 0 7 0 9 exp(x 2 )- 0 00 025 05 075 0 x ja itegraali variassi otokse koo fuktioa: 0-0 -2 I MC 0-3 0-4 0-5 0-6 importace samplig direct samplig 0 2 0 4 0 6 0 8 N sample
Johtopäätökseä voisi saoa, että Metropolis-algoritmi ataa melko huoo arvio itegraalille, ja se suppeee hyvi hitaasti oikeata arvoa (/3) kohti Toisaalta variassi o paljo pieempi kui suora otokse tapauksessa Tämä johtuu siitä, että peräkkäiset pisteet ovat korreloitueita (ks alla); variassille saadaa liia optimistie arvio Etä, voiko Metropolis-algoritmilla otokse pisteitä käyttää satuaislukugeeraattoria? Vastaus o ei, sillä pisteet ovat (riippue hypy dx0 pituudesta) korreloitueita Lisäksi meetelmä o turha raskas laskeallisesti Alla geeroituje pisteide autokorrelaatiofuktioita erilaisilla askelpituude dx0 arvoilla Lisäksi mukaa o paiottamattoma otokse pisteide autokorrelaatiofuktio, joka vastaa täysi korreloimatota lukujooa 9 004 003 0 02 05 0 direct samplig (N) 002 00 00 0 40 80 20 60 200 N