simulering introduktion exempel: antag att någon kastar tärning

Post on 05-Jan-2016

72 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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”) =. - PowerPoint PPT Presentation

TRANSCRIPT

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”) = 116.065

61

2

4 22

b) P(” ”) 13.0 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?

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

mmod)bax(x n1n 1m,0xi

1,0mx

u ii

Diskreta stokastiska variabler - tabellmetoden

Kontinuerliga - Inversmetoden

0 1 2 3 4

)u(Fx i1

i

10

Slumptal - Pseudoslumptal

Kongruensgenerator utnyttjar rekursion

)mmod()bax(x n1n

1m,0xi

1,0mx

u ii

Där a,b,m och xn är heltal

x0 är startvärde vilket betyder att

Sätt som ger oss att 1m

1mu0 i

ui är nu ett pseudoslumptal från U(0,1)

Egenskaper

a) När ett xi återkommer upprepar sig följden periodiskt

Ex: )5mod(3x3x n1n

3x0x

4x2x3x0x

54

3210

1x1x1x 210

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

43210

n1n

x1x1x7x0x

)9mod(7x3x

Villkor 2 ej uppfyllt för full periodlängd!

Ex: a = 4, b = 7, m = 9

osv0x5x4x6x2x

1x3x8x7x0x

)9mod(7x4x

98765

43210

n1n

Alla villkor uppfyllda!

Ex: IBM:s generator

)12mod(x16807x 31n1n

Periodlängd 231-2 … eftersom 0x0x 10

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

17,12777316807

1231

• Sätt W = 127773 C = 231 - 1 - 16807• 127773 = 2836• Bilda

cWx

)Wmod(x16807x nn1n

Kommer alltid vara 231-1 heltalsdelen

• Om xn+1 < 0 sätt xn+1 + 231-1

• Låt un = xn / (231-1)

Generering av slumptal från andra fördelningar

Diskreta fördelningar

Bin(1,p) dvs

p1tsannolikhemed0

ptsannolikhemed1X

Teknik: Generera ett slumptal U från U(0,1)

sätt

p1,0Uom0

1,p1Uom1X

X=0 X=10 1-p 1

)pU(IntX

X är ett slumptal från Bin(1,p) eftersom

p1)p1,0U(P)0x(P

p)p1(1)1,p1U(P)1x(P

Bin(n,p).

Om Xi Bin(1,p), i=1,2,…,n samt oberoende så är

)p,n(BinXYn

i

Generera n st Bin(1,p) slumptal enligt ovan och sätt

n

1i in

i )pU(IntXY

så kommer Y vara ett slumptal från Bin(n,p).

Alternativ: Tabellmetoden

Ex: Generera slumptal från XBin(5,0.3)

P(X=0) = 0.17P(X=1) = 0.36P(X=2) = 0.31P(X=3) = 0.13P(X=4) = 0.03P(X=5) = 0.002

0.00 0.17 0.830.53X=0

X=4X=3X=2X=1

X=5

1.00

Generera ett slumptal från UU(0,1) och kontrollera vilket intervall dethamnade 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

SP̂

)P,N(Bin S

SP̂

SP̂

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 integralenmed

SP̂ N)P̂1(P̂A SSK2/

)1,0(U

N

1i i )U(gN1

g

N

1

2i )g)U(g(

1N1

N1

gVar

Utnyttja CGS, och du kan göra konfidensintervall

gVarg 2/

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å

1

0

U dx)x(gdx)x(f)x(g

0 1 2 3 4 5

x <- seq(0, 5, len = 100)

010

020

030

040

0

x^2

+ 3

* x

^3 +

3

Ex: Antag att vi vill bestämma integralen

5

0

32 dx)3x3x(

Det enklaste : ) är givetvis nu att integrera och bestämma den.

4167.525x34x3

3x

dx)3x3x(5

0

435

0

32

dx)x(f)x(g U

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

5

0

U32 dx)x(f)3x3x(

väljer vi f(x) så att 5

0

U dx)x(gdx)x(f)x(g)U(gE

Således, om vi väljer f(x) = 1/5 så är detta uppfyllt.

En simuleringskörning med 10000 U(0,5) ger

529.7g

541,5187.527.529gVarg 2/

5.7gD

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

)1,0UUdäre1UU)X(F)U(FX x1

och om vi använder oss av inversmetoden, dvs lös ut X

)U1ln(mx

)u1ln(m/Xu1e m/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!

0 2 4 6 8

0.0

0.2

0.4

0.6

0.8

1.0

Exponential distribution function

Normalfördelningen låter sig å andra sidan inte inverteras så enkelt.

Det finns snabbvarianter… trots det.

Utnyttja CGS

Bilda

12

1i iU

Enligt CGS är nu

)1,0(N~12/12

6U12

1i i

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å dimensionerTransformationen från kartesiska koordinater till polära koordinaterges av

N1 = R cos N2 = R sin

och transformationen är 1-1.

Alla partiella derivator är kontinuerliga vilket betyder att vi kan skrivasimultana täthetsfunktionen som

1,R21N,N J),r(f)n,n(f

21

Så man kan plocka fram simultana fördelningsfunktionen för R och

rcosrsin

sinrcosn

rn

nrn

J22

11

1

)nn(

21

exp2r

),r(f 22

2,R 1

Så…

2r

exp2r 2

r0,20

Vi ser att R och är oberoende sv med

)2,0(Udvs,2/1)(f

)2(ExpRdvs],2/rexp[r)r(f 22R

Ok, nu till metoden (Box-Muller)

))2(()2(Exp)NN(Rdär 222

21

2

)U2sin()Ulog2(N

)U2cos()Ulog2(N

22/1

1e2

22/1

1e1

Ger oss två oberoende normalfördelade slumptal

Ok. Visa nu detta! Obs jag skämtar…

Polar Marsaglia metoden bygger på samma idé men hoppar överAnvä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 + V2

2 Om R > 1 gå tillbaka till 1.

3. Sätt

1U2V

)1,1(U1U2V

22

11

2/1

22

2/1

11

RRln2

VN

RRln2

VN

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

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 osvkåk: a a a b b x5

fyrtal: a a a a b x6

femtal: a a a a a x7

Typ Antal Sannolikhet

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 sannolikheterp1,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örandedessa sannolikheter, dvs

H0: p1 = p1*, p2 = p2

*, …, pr = pr*

Konstruera en sk testvariabel

r

1i

2

värdeförväntatvärdeförväntatvärdeobserverat

Q

r

1i*i

2*ii

np

npx

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

x <- seq(0.05, 20, len = 299)

dch

isq

(x,

6)

0 5 10 15 20

0.0

0.0

20

.04

0.0

60

.08

0.1

00

.12

0.1

4

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.)1r(Q 2

I pokertest testas H0 med

7

1i i

2ii

kpkpx

Arean =

Förkasta H0 om

)6(2

)6(Q 2

)6(2

= signifikansnivån, och den måste man välja själv. Det är vanligt med = 0.05, 0.01, 0.001.

Gap-test

Låt och vara två reella tal sådana att 10

Betrakta längden av delföljder Uj, Uj+1, …, Uj+r där Uj+r (, ) men därUj, Uj+1, …,Uj+r-1 (, ).

Ui pseudoslumptal från U(0,1)

Ex: =0.2, =0.5 Bestäm gaplängderna. Vi håller på tills vi fått n st gap

U1=0.023U2=0.354U3=0.462U4=0.791U5=0.553U6=0.304U7=0.212U8=0.893U9=0.491

1

0

2

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+ …) =

tt )p1()p1(1

1)p1(p

Testa med Q =

r

1i*i

2*ii

np

npx)1r(Q 2

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!

top related