360 likes | 610 Views
Simulering Introduktion Exempel: Antag att någon kastar tärning. a) Vad är sannolikheten att på fyra kast få två sexor? b) Vad är sannolikheten att på 100 kast få mellan 10 och 15 sexor och där summan av de 50 första kasten är mellan 165 och 185?. a) P(”två sexor på fyra kast”) =.
E N D
Simulering Introduktion Exempel: Antag att någon kastar tärning a) Vad är sannolikheten att på fyra kast få två sexor? b) Vad är sannolikheten att på 100 kast få mellan 10 och 15 sexor och där summan av de 50 första kasten är mellan 165 och 185? a) P(”två sexor på fyra kast”) = b) P(” ”) Löses analytiskt
Simuleringsstudie Kasta 100 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?
Diskreta stokastiska variabler - tabellmetoden Kontinuerliga - Inversmetoden 0 1 2 3 4 0 1 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
Slumptal - Pseudoslumptal Kongruensgenerator utnyttjar rekursion Där a,b,m och xn är heltal x0 är startvärde vilket betyder att Sätt som ger oss att ui är nu ett pseudoslumptal från U(0,1)
Egenskaper a) När ett xi återkommer upprepar sig följden periodiskt Ex: Periodlängden beror på startvärdet x0!
b) (Knuth 1991) Full periodlängd erhåller man om 1) b och m ej har någon annan gemensam faktor än 1. 2) (a-1) är en multipel av varje primtal som delar m 3) (a-1) är en multipel av 4 om m är det
Ex: a = 3, b = 7, m = 9 Villkor 2 ej uppfyllt för full periodlängd! Ex: a = 4, b = 7, m = 9 Alla villkor uppfyllda!
Ex: IBM:s generator Periodlängd 231-2 … eftersom Implementering av IBM:s generator Antagligen vanligast med 32 bitars dator. Problem med 16807 xn ! Krav på mer än 32 bitars ordlängd.
Recept! Gör enligt följande • Sätt W = 127773 C = 231 - 1 - 16807• 127773 = 2836 • Bilda heltalsdelen Kommer alltid vara 231-1 • Om xn+1 < 0 sätt xn+1 + 231-1 • Låt un = xn / (231-1)
X=0 X=1 0 1-p 1 Generering av slumptal från andra fördelningar Diskreta fördelningar Bin(1,p) dvs Teknik: Generera ett slumptal U från U(0,1) sätt
X är ett slumptal från Bin(1,p) eftersom Bin(n,p). Om Xi Bin(1,p), i=1,2,…,n samt oberoende så är Generera n st Bin(1,p) slumptal enligt ovan och sätt så kommer Y vara ett slumptal från Bin(n,p).
X=5 X=4 X=0 X=1 X=2 X=3 0.00 0.17 0.53 0.83 1.00 Alternativ: Tabellmetoden Ex: Generera slumptal från XBin(5,0.3) P(X=0) = 0.17 P(X=1) = 0.36 P(X=2) = 0.31 P(X=3) = 0.13 P(X=4) = 0.03 P(X=5) = 0.002 Generera ett slumptal från UU(0,1) 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(0,a) som x och y koordinater. Räkna antalet punkter som faller inom sjön, NS och uppskatta sjöarean med AK • NS / N = AK • Eftersom NS får vi att E[ ] = E[NS/N] = N •PS / N = PS V[ ] = N-2 V[NS] = N-2 N PS (1 - PS) = P(1-P)/N
Och om vi utnyttjar CGS, (giltigt om NP(1-P) > 10 tex) kan vi konstruera konfidensintervall för vår skattning, dvs AK • 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 x-axeln och kurvan y = g(x). Simulera U1, U2, …, UN pseudoslumptal och skatta integralen med
Det fungerar eftersom E[g(U)] = Tänk på att arean under kurvan är lika med medelhöjden på kurvan. Variansen för skattningen blir då Utnyttja CGS, och du kan göra konfidensintervall
Det enklaste : ) är givetvis nu att integrera och bestämma den. 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(x) nu är lika med integralen ovan dvs väljer vi f(x) så att
Således, om vi väljer f(x) = 1/5 så är detta uppfyllt. En simuleringskörning med 10000 U(0,5) ger Vi kan notera att sant värde är 525.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-1(U) är definierad på (0,1). Sats: Om UU(0,1) så har den stokastiska variabeln X = F-1(U) fördelnings- funktionen F. Man kan inse det på följande sätt X = F-1(U) P(X≤x) = P( F-1(U) ≤x ) = P(U ≤F(x)) = F(x), eftersom P(U ≤a) = a
Inversmetoden. Om fördelningsfunktionen har en enkel invers kan vi utnyttja detta! Om X Exp(m) dvs X är exponentialfördelad med fördelningsfunktion FX(x) = 1 - e -x / m, x≥0 Vi har och om vi använder oss av inversmetoden, dvs lös ut X Dvs generera ett slumptal U från U(0,1). Sätt in U i -m ln(1-U) = X. X är vårt slumptal!
Normalfördelningen låter sig å andra sidan inte inverteras så enkelt. Det finns snabbvarianter… trots det. Utnyttja CGS Bilda Enligt CGS är nu
Ger dock ”bara” normalfördelade slumptal mellan (-6,6). Vad är 1-P(-6<X<6)? 2 9.886 10-10, dvs ungefär 2 10-9. Mer komplicerad variant Lite teori: Låt N1 och N2 vara oberoende N(0,1). Paret(N1,N2) definierar en punkt i två dimensioner Transformationen från kartesiska koordinater till polära koordinater ges av N1 = R cos N2 = R sin och transformationen är 1-1.
Alla partiella derivator är kontinuerliga vilket betyder att vi kan skriva simultana täthetsfunktionen som Så man kan plocka fram simultana fördelningsfunktionen för R och
Så… Vi ser att R och är oberoende sv med
Ok, nu till metoden (Box-Muller) 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: 1. Generera U1 och U2 från U(0,1) och bilda 2. Sätt R = V12 + V22 Om R > 1 gå tillbaka till 1. 3. Sätt N1 och N2 är två oberoende slumptal från N(0,1)
Test av slumptalsgeneratorer Pokertest Betrakta en följd U1, U2, …, U5k, där varje Ui är ett slumptal som är likformigt fördelat på 0, 1, 2, …, 9. Dela upp följden i k st 5-tupler (U1, U2,…, U5), (U6, …, U10),…, (U5k-4, …, U5k) Bland dessa k st 5-tupler, räkna antalet av typen Typ Antal Sannolikhet Alla olika: a b c d e x1 P1 = P(alla olika) ett par: a a b c d x2 P2 två par: a a b b c x3 P3 triss: a a a b c x4 osv kåk: a a a b b x5 fyrtal: a a a a b x6 femtal: a a a a a x7
Formulera nu en hypotes som man brukar kalla för Nollhypotes H0 H0: Slumptalsgeneratorn genererar likformigt fördelade slumptal mellan 0 och 1 ( U(0,1)). För att nu testa H0 används ett sk ”Chi-två test”, 2 -test. 2 -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; A1,A2,…,Ar med sannolikheter p1,p2, …,pr. Låt x1,x2, …,xr vara de observerade antalet utfall på A1,A2,…,Ar.
P1,p2, …,pr antas vara okända och man vill testa en viss hypotes rörande dessa sannolikheter, dvs H0: p1 = p1*, p2 = p2*, …, pr = pr* Konstruera en sk testvariabel Här är n antalet olika utfall som vi kan konstruera, dvs antalet 5-tupler i föregående exempel.
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 2 -fördelningen
Man bestämmer då en gräns för när man inte tror att generatorn ger likformiga slumptal, dvs förkasta H0 om där = signifikansnivån. I pokertest testas H0 med Arean = Förkasta H0 om = signifikansnivån, och den måste man välja själv. Det är vanligt med = 0.05, 0.01, 0.001.
Ex:=0.2, =0.5 Bestäm gaplängderna. Vi håller på tills vi fått n st gap U1=0.023 U2=0.354 U3=0.462 U4=0.791 U5=0.553 U6=0.304 U7=0.212 U8=0.893 U9=0.491 1 0 2 0 1 Gap-test Låt och vara två reella tal sådana att Betrakta längden av delföljder Uj, Uj+1, …, Uj+r där Uj+r (, ) men där Uj, Uj+1, …,Uj+r-1 (, ). Ui pseudoslumptal från U(0,1)
Räkna hur många ”gap” man fått av längd 0,1,2, …., ≥ t Sätt p = β – α (Sannolikhet att hamna i intervall (, ) ) Låt pj = P(”gap”-längden är j) Då blir (geometrisk fördelad) pj = p (1-p)j pt = P(”gap”-längden är t) = p(1-p)t + p(1-p)t+1 + … = = p(1-p)t (1+(1-p)+(1-p)2+ …) = Testa med Q = Och jämför om
Man bör se till att n, t, och p är sådana att npi > 5 för alla ”gap” storlekar. Typiskt fall för Gap-testet är = 0, β = 0.1 Många dåliga generatorer ger alldeles för många gap med ”för kort” längd Allmänt gäller vid dessa 2-test att npi > 5.
Permutationstest Betrakta en talföljd U1, U2, …, där Ui är slumptal från U(0,1) Dela in talföljden i t-tupler (U1, …,Ut), (Ut+1, …,U2t), … Map storleksföljden kan varje t-tupel vara ordnad på t! sätt. Ex: t = 3, t! = 3! = 6 U1 < U2 < U3 U1 < U3 < U2 U2 < U1 < U3 U2 < U3 < U1 U3 < U1 < U2 U3 < U2 < U1 Varje ordningsföljd har sannolikhet 1/t! (1/6) att erhållas. Bilda n st t-tupler och dela in i t! klasser. Testa med 2-test!