Simulering Introduktion Eempel: Antag att någon kastar tärning a) Vad är sannolikheten att på fyra kast få två seor? b) Vad är sannolikheten att på kast få mellan och 5 seor och där summan av de 5 första kasten är mellan 65 och 85? 4 5 a) P( två seor på fyra kast ). 6 6 6 b) P( ) L. 3 Löses analytiskt
Simuleringsstudie Kasta kast många gånger och räkna antalet gånger då villkoret är uppfyllt. Skatta sannolikheten med relativa frekvensen, dvs (antalet lyckade / totala antalet kast) Utnyttja dator Bilda slumptal Vad är ett slumptal?
Generering av likformigt fördelade slumptal Hur kan vi bilda ett slumptal som ligger mellan noll och ett? Slumptal - Pseudoslumptal Det går aldrig att konstruera riktiga slumptal Kongruensgeneratorer + (an b)modm i [,m ] n + u i i m [, ) Diskreta stokastiska variabler - tabellmetoden 3 4 Kontinuerliga - Inversmetoden i F (u ) i
Slumptal - Pseudoslumptal Kongruensgenerator utnyttjar rekursion n + (an + b) mod(m) Där a,b,m och n är heltal är startvärde vilket betyder att i [,m ] i m Sätt ui [, ) som ger oss att ui < m m u i är nu ett pseudoslumptal från U(,)
Egenskaper a) När ett i återkommer upprepar sig följden periodiskt E: ) mod(5 3 3 n n + + L 3 4 3 5 4 3 L Periodlängden beror på startvärdet!
b) (Knuth 99) Full periodlängd erhåller man om ) b och m ej har någon annan gemensam faktor än. ) (a-) är en multipel av varje primtal som delar m 3) (a-) är en multipel av 4 om m är det
E: a 3, b 7, m 9 L + + 4 3 n n 7 mod(9) 7 3 Villkor ej uppfyllt för full periodlängd! E: a 4, b 7, m 9 osv 5 4 6 3 8 7 mod(9) 7 4 9 8 7 6 5 4 3 n n + + Alla villkor uppfyllda!
E: IBM:s generator n+ 687 n mod( 3 ) Periodlängd 3 - eftersom L Implementering av IBM:s generator Antagligen vanligast med 3 bitars dator. Problem med 687 n! Krav på mer än 3 bitars ordlängd.
Recept! Gör enligt följande 3 7773,7 687 Sätt W 7773 C 3 - - 687 7773 836 Bilda n n+ 687 n mod(w) W [ ] c Kommer alltid vara 3 - heltalsdelen Om n+ < sätt n+ + 3 - Låt u n n / ( 3 -)
Generering av slumptal från andra fördelningar Diskreta fördelningar Bin(,p) dvs X med med sannolikhet sannolikhet p p Teknik: Generera ett slumptal U från U(,) om sätt X om U U [ p, ) [, p) X X -p X Int(U + p)
X är ett slumptal från Bin(,p) eftersom P( ) P(U [ ) p, ) ( p) p P( ) P(U [, p) ) p Bin(n,p). Om X i Bin(,p), i,,,n samt oberoende så är Y n X i Bin(n,p) Generera n st Bin(,p) slumptal enligt ovan och sätt Y n n X i Int(Ui + p) i så kommer Y vara ett slumptal från Bin(n,p).
Alternativ: Tabellmetoden E: Generera slumptal från X Bin(5,.3) P(X).7 P(X).36 P(X).3 P(X3).3 P(X4).3 P(X5). X X X X3..7.53.83 X4. X5 Generera ett slumptal från U U(,) och kontrollera vilket intervall det hamnade i.
Tillämpningar Hur finner vi arean av sjön? Använd millimeterpapper och räkna eller utnyttja planinometer. Simulering: Slumpa ut N punkter i kvadraten K, dvs iid U(,a) som och y koordinater. Räkna antalet punkter som faller inom sjön, N S och uppskatta sjöarean med A K N S / N A K PˆS Eftersom N S Bin(N,P S ) får vi att E[ ] E[N S /N] N P S / N P PˆS S V[ ] N - V[N S ] N - N P S ( - P S ) P(-P)/N PˆS
Och om vi utnyttjar CGS, (giltigt om NP(-P) > te) kan vi konstruera konfidensintervall för vår skattning, dvs A K Pˆ S ± λ α / AK Pˆ S( Pˆ S ) N En nackdel är dock att om man inte kan precisera konturen av sjön matematiskt är det lite svårt att implementera metoden på dator Integralskattning En integral kan ganska lätt skattas mha simulering. Integralen kan uppfattas som arean mellan -aeln och kurvan y g(). Simulera U, U,, U N pseudoslumptal U(,) och skatta integralen med N g g(u ) i i N
Det fungerar eftersom E[g(U)] g()f ()d U g() d Tänk på att arean under kurvan är lika med medelhöjden på kurvan. Variansen för skattningen blir då Var N N N [ g] (g(u ) i g) Utnyttja CGS, och du kan göra konfidensintervall g ± λ α / Var[ g]
E: Antag att vi vill bestämma integralen 5 3 ( + 3 + 3)d ^ + 3 * ^3 + 3 3 4 3 4 5 <- seq(, 5, len )
Det enklaste : ) är givetvis nu att integrera och bestämma den. 5 ( + 3 3 + 3)d 3 3 + 3 4 4 + 3 5 55.467 Men man skulle även kunna använda sig av den ovan nämnda tekniken, dvs att utnyttja simulering till att skatta integralen. Eftersom vårt g() nu är lika med integralen ovan dvs g ()fu()d 5 3 ( + 3 + 3)f U ()d väljer vi f() så att E[ g(u) ] g()fu ()d 5 g() d
Således, om vi väljer f() /5 så är detta uppfyllt. En simuleringskörning med U(,5) ger g 59.7 D [ g] 5.7 g ± α [ g] 59.7 ± 5.7 ( 58,54) λ / Var Vi kan notera att sant värde är 55.4 Dock, en väldigt användbar teknik för komplicerade integraler. Vilken sats bygger det här på?
Kontinuerliga fördelningar Inversmetoden Antag att vi vill generera slumptal från en fördelning med fördelningsfunktion F, vars invers F - (U) är definierad på (,). Sats: Om U U(,) så har den stokastiska variabeln X F - (U) fördelningsfunktionen F. Man kan inse det på följande sätt X F - (U) P(X ) P( F - (U) ) P(U F()) F(), eftersom P(U a) a
Inversmetoden. Om fördelningsfunktionen har en enkel invers kan vi utnyttja detta! Om X Ep(m) dvs X är eponentialfördelad med fördelningsfunktion Vi har F X () - e - / m, X F (U) F(X) U U e där U U[, ) och om vi använder oss av inversmetoden, dvs lös ut X e X / m u X / m ln( u) m ln( U) Dvs generera ett slumptal U från U(,). Sätt in U i -m ln(-u) X. X är vårt slumptal!
Eponential distribution function...4.6.8. 4 6 8
Normalfördelningen låter sig å andra sidan inte inverteras så enkelt. Det finns snabbvarianter trots det. Utnyttja CGS Bilda U i i Enligt CGS är nu i U 6 / i ~ N(,)
Ger dock bara normalfördelade slumptal mellan (-6,6). Vad är -P(-6<X<6)? 9.886 -, dvs ungefär -9. Mer komplicerad variant Lite teori: Låt N och N vara oberoende N(,). Paret(N,N ) definierar en punkt i två dimensioner Transformationen från kartesiska koordinater till polära koordinater ges av N R cos Θ N R sin Θ och transformationen är -.
Alla partiella derivator är kontinuerliga vilket betyder att vi kan skriva simultana täthetsfunktionen som fn,n (n,n ) f (r, θ ) J R, Θ Så man kan plocka fram simultana fördelningsfunktionen för R och Θ J n r n r n θ n θ cosθ sinθ r sinθ r cosθ r
Så f r Θ (r, θ ) ep (n + n) π R, r r ep π θ π, r Vi ser att R och Θ är oberoende sv med
f Θ ( θ ) / π, dvs Θ U(, π ) f R (r) r ep[ r / ], dvs R Ep() där R (N + N ) Ep() ( χ ()) Ok, nu till metoden (Bo-Muller) N N ( log e ( log e U ) U ) / / cos(π sin(π U U ) ) Ger oss två oberoende normalfördelade slumptal Ok. Visa nu detta! Obs jag skämtar
Polar Marsaglia metoden bygger på samma idé men hoppar över Användandet av trigonometriska funktioner (cosinus och sinus). Algoritm:. Generera U och U från U(,) och bilda V U U(,) V U. Sätt R V + V Om R > gå tillbaka till. 3. Sätt N lnr V R / N V lnr R / N och N är två oberoende slumptal från N(,)
Test av slumptalsgeneratorer Pokertest Betrakta en följd U, U,, U 5k, där varje U i är ett slumptal som är likformigt fördelat på,,,, 9. Dela upp följden i k st 5-tupler (U, U,, U 5 ), (U 6,, U ),, (U 5k-4,, U 5k ) Bland dessa k st 5-tupler, räkna antalet av typen Typ Antal Sannolikhet Alla olika: a b c d e P P(alla olika) ett par: a a b c d P två par: a a b b c P 3 3 triss: a a a b c osv 4 kåk: a a a b b 5 fyrtal: a a a a b 6 femtal: a a a a a 7
Formulera nu en hypotes som man brukar kalla för Nollhypotes H H : Slumptalsgeneratorn genererar likformigt fördelade slumptal mellan och ( U(,)). För att nu testa H används ett sk Chi-två test, χ -test. χ -test metoden. Antag att n ( i vårt fall n 5k ) stycken oberoende försök har utförts. Varje försök kan resultera i r st olika utfall; A,A,,A r med sannolikheter p,p,,p r. Låt,,, r vara de observerade antalet utfall på A,A,,A r.
P,p,,p r antas vara okända och man vill testa en viss hypotes rörande dessa sannolikheter, dvs H : p p *, p p *,, p r p r * Konstruera en sk testvariabel Q r i r i ( observerat värde förväntat värde) * ( np ) i np i * i förväntat värde Här är n antalet olika utfall som vi kan konstruera, dvs antalet 5-tupler i föregående eempel.
För att nu avgöra om vår generator ger bra slumptal jämför vi vår testvariabel med ett tabellvärde från χ -fördelningen dchisq(, 6)...4.6.8...4 5 5 <- seq(.5,, len 99)
Man bestämmer då en gräns för när man inte tror att generatorn ger likformiga slumptal, dvs > α förkasta H om Q χ (r ) där α signifikansnivån. I pokertest testas H med 7 i ( kp ) i kp i i χ (6) Arean α χ α (6) Förkasta H om Q > χ α (6) α signifikansnivån, och den måste man välja själv. Det är vanligt med α.5,.,..
Gap-test Låt α och β vara två reella tal sådana att α < β Betrakta längden av delföljder U j, U j+,, U j+r där U j+r (α, β) men där U j, U j+,,u j+r- (α, β). U i pseudoslumptal från U(,) E: α., β.5 Bestäm gaplängderna. Vi håller på tills vi fått n st gap U.3 U.354 U 3.46 U 4.79 U 5.553 U 6.34 U 7. U 8.893 U 9.49
Räkna hur många gap man fått av längd,,,., t Sätt p β α (Sannolikhet att hamna i intervall (α, β) ) Låt p j P( gap -längden är j) Då blir p j p (-p) j (geometrisk fördelad) p t P( gap -längden är t) p(-p) t + p(-p) t+ + p(-p) t (+(-p)+(-p) + ) t p( p) ( p) ( p) t r * ( ) Testa med Q i np i i np * i Och jämför om Q > χ α (r )
Man bör se till att n, t, och p är sådana att np i > 5 för alla gap storlekar. Typiskt fall för Gap-testet är α, β. Många dåliga generatorer ger alldeles för många gap med för kort längd Allmänt gäller vid dessa χ -test att np i > 5.
Permutationstest Betrakta en talföljd U, U,, där U i är slumptal från U(,) Dela in talföljden i t-tupler (U,,U t ), (U t+,,u t ), Map storleksföljden kan varje t-tupel vara ordnad på t! sätt. E: t 3, t! 3! 6 U < U < U 3 U < U 3 < U U < U < U 3 U < U 3 < U U 3 < U < U U 3 < U < U Varje ordningsföljd har sannolikhet /t! (/6) att erhållas. Bilda n st t-tupler och dela in i t! klasser. Testa med χ -test!