Re: Kilpatehtävä 7

[vastaus aiempaan viestiin]

Kirjoittaja: Seppo Mustonen
Sähköposti:    -
Päiväys: 14.3.2008 18:52

Joko antamani tehtävä oli kuvittelemaani visaisempi tai sitten
ei opiskelijoilla ollut tarpeeksi motivaatiota tai houkutusta
käydä ongelman kimppuun.
Ainoastaan Antti Liski Tampereen yliopistosta on lähettänyt
kelpo ratkaisun.

Olen vakaasti sitä mieltä, että tehtävä on mielenkiintoinen ja tarjoaa
erilaisia lähestymistapoja. On täysin mahdollista, että samaa tehtävää
on käsitelty jo jossain aikaisemmin varsinkin tapauksessa, jossa
kolikko on harhainen. Tämähän on yleistys von Neumannin
kolikko-ongelmaan, johon on lukuisia viittauksia verkossa.
Hyvä suomenkielinen lähde on Aki Loposen tutkielma
http://www.cs.uta.fi/research/theses/masters/Loponen_Aki.pdf 
(sivut 15-20) jossa esitellään mm. Mitzenmacherin parannus tuohon
alkuperäiseen menetelmään.
En ole kuitenkaan nähnyt tähän mennessä sellaista yleistystä, mistä
nyt on kysymys, eli yleistystä harhattomaan arvontaan "yksi n vaihto-
ehdosta".

Esitän nyt omia tehtävään liittyviä pohdiskeluja. Yritän kuvata
ainakin joitain asioita siten, että sellainenkin lukija, joka
ei hallitse todennäköisyyslaskentaa, voi seurata juonta
pääpiirteissään.

Tapaus p=1/2:
=============

Olkoot vaihtoehdot V1,V2,...,Vn ja tarvittavien heittojen lukumäärän
odotusarvo E(n).
Tällöin on E(2)=1 (koska valinta onnistuu aina yhdellä heitolla).
Kun n on parillinen, E(n)=1+E(n/2), koska vaihtoehdot voidaan
jakaa kahteen yhtäsuureen joukkoon ja yhdellä heitolla ratkaista,
kumpi osajoukko, suuruudeltaan n/2, pääsee jatkoon.
Kun n on pariton, on kaksi erilaista menettelyä, jotka kilpailevat
keskenään:
1) Lisätään vaihtoehtoihin yksi "kelvoton" vaihtoehto, jolloin
sen tullessa valituksi aloitetaan alusta. Kelvoton tulee valituksi
todennäköisyydellä r=1/(n+1) ja odotusarvo on tällöin
E1(n)=(1-r)*E(n+1)+r*(1-r)*2*E(n+1)+r^2*(1-r)*3*E(n+1)+...
     =(1-r)*E(n+1)*(1+2*r+3*r^2+4*r^3+...)
     =(1-r)*E(n+1)/(1-r)^2=E(n+1)/(1-r)=(n+1)/n*E(n+1)
2) Asetetaan vaihtoehdot vastakkain pareittain lukuunottamatta viimeistä
vaihtoehtoa. Heitetään (n+1)/2 kertaa eli kerran kutakin paria kohden
ja lopuksi vielä kerran viimeistä vaihtoehtoa kohden. Kruunat jatkoon.
Tällöin jatkoon pääsee joko (n+1)/2 tai (n-1)/2 vaihtoehtoa, kummatkin
samalla todennäköisyydellä eli
E2(n)=(n+1)/2+1/2*E((n+1)/2)+1/2*E((n-1)/2)
.............
Survossa nämä odotusarvot saadaan kätevimmin seuraavalla
rekursiivisella laskentakaaviolla:

E(n):=if(n=1)then(0)else(Ep(n))
Ep(n):=if(n=2)then(1)else(E0(n))
E0(n):=if(n=2*int(n/2))then(1+E(n/2))else(min(E1(n),E2(n)))
E1(n):=(n+1)/n*(1+E((n+1)/2))
E2(n):=(n+1)/2+1/2*E((n+1)/2)+1/2*E((n-1)/2)

Yksittäiset arvot poimitaan aktivoimalla alla olevat:
E(2)=1
E(3)=2.5
E(4)=2
E(5)=4.2
E(6)=3.5
E(7)=3.4285714285714
E(8)=3
E(9)=5.7777777777778
E(10)=5.2
E(11)=4.9090909090909
E(12)=4.5
E(13)=4.7692307692308
E(14)=4.4285714285714
E(15)=4.2666666666667
E(16)=4
...

Erityisesti tapauksessa n=5
E1(5)=4.2
E2(5)=4.75
ja vastaavasti kun n=3,
E1(3)=2.6666666666667
E2(3)=2.5

Siis kun n=5, käytetään ensin menettelyä 1) eli "korotetaan" kuuteen,
joten odotusarvo on 6/5*E(6)=6/5*(1+E(3)).
Kun n=3, menettely 2) on edullisempi eli näin arvolla n=5 odotusarvo on
6/5*(1+E2(3))=4.2

Antti Liski oli omasssa ratkaisussaan päätynyt menettelyyn, joka
tapauksessa n=5 antaa hivenen suuremman odotusarvon 4.4.

Tarkennus:
==========
Menettelyn 1) kanssa kilpailee parittomilla n-arvoilla, kun n ei ole
alkuluku, seuraava:
Olkoon n=k*m, missä k on luvun n pienin tekijä > 1.
Tällöin jaetaan vaihtoehdot k osajoukkoon ja tehdään ensin valinta
"yksi k vaihtoehdosta", jolloin odotusarvoksi saadaan E(k)+E(m).
Tämä saattaa olla joskus pienempi kuin menettelyn 1) antama odotusarvo.

Ensimmäisenä tämä tapa puree arvolla n=9, koska 9=3*3 ja E(3)+E(3)=5 on
pienempi kuin aikaisempi 5.7777...

Ilmeisesti menettely 2) tulee käyttöön vain, kun n=3.

Seuraava sukro laskee tarkennetut odotusarvot:

*TUTSAVE P_PUOLI
/
/ def WN=W1 Wn=W2 WE1=W3 Wp=W4 WX=W5 Wk=W6 WE2=W7
/
*{R}
*ACCURACY=15 {R}
/
/ Odotusarvot talletetaan vektorina E, jonka aikaisempia
/ alkioita käytetään menettelyn 1) mukaisissa kaavoissa.
*MAT E=ZER({print WN},1) {act}{R}
*E(n):=if(n=2*int(n/2))then(1+MAT_E(n/2))else(E1(n))) {R}
*E1(n):=(n+1)/n*(1+MAT_E((n+1)/2)) {R}
/
*{d}
*{ref}
*{d4}
*MAT E(1,1)=0{R}
*MAT E(2,1)=1{R}
*MAT E(3,1)=2.5{R}
*MAT E(4,1)=2{R}
*MAT E(5,1)=4.2{R}
*MAT E(6,1)=3.5{R}
*MAT E(7,1)=3.428571428571428{R}
*MAT E(8,1)=3{R}
*{u8}{pre}{act}
/ 8 ensimmäistä odotusarvoa annettu valmiina.
/ Wp=0, jos Wn=n on parillinen, muuten Wp=1.
*{Wn=8}{Wp=0}{R}
/
+ A: {ref}{erase}{Wn=Wn+1}{Wp=1-Wp}
/
/ Lasketaan arvoon WN asti, joka annetaan komennon parametrina.
- if Wn > WN then goto E
/
/ WE1 on menettelyn 1) mukainen odotusarvo.
*E({print Wn})={act}{l} {save word WE1}{R}
/ Jos n on parillinen, tarkennusta ei tarvita.
- if Wp = 0 then goto B
/ Pinimmän tekijän etsiminen parittomille n:
*{erase}{print Wn}(10:factors)={act}{l} {}
+ C: {r}{save char Wk}
/ Jos n aon alkuluku, ei voida tarkentaa:
- if Wk '=' {sp} then goto B
/ esim. 9(10:factors)=3^2
/       105(10:factors)=3*5*7
- if Wk '=' ^ then goto D
- if Wk '<>' * then goto C
/ Pienin tekijä on Wk:
+ D:  {l2}{save word Wk}{R}
/ Lasketaan  WE2=E(k)+E(m).
*MAT_E({print Wk})+MAT_E({Wk=Wn/Wk}{print Wk})={act}
*{l} {save word WE2}
/ Pienempi luvuista WE1 ja WE2 on E(n)
- if WE2 > WE1 then goto B
*{WE1=WE2}
/  Talletus matriisitiedostoon E.MAT
+ B: {line start}{erase}MAT E({print Wn},1)={print WE1}{act}
*{goto A}
+ E:
*{end}

Komennolla
/P_PUOLI 10000
olen laskenut odotuarvot, kun n=1,2,...,10000.

Odotusarvot, kun n=1,2,...,100:
  n E         n E         n E         n E         n E
  1 0.00000  21 5.92857  41 7.09756  61 6.26230  81 8.12963
  2 1.00000  22 5.90909  42 6.92857  62 6.16129  82 8.09756
  3 2.50000  23 5.73913  43 7.06977  63 6.09524  83 8.02410
  4 2.00000  24 5.50000  44 6.90909  64 6.00000  84 7.92857
  5 4.20000  25 6.00000  45 6.76667  65 8.53846  85 8.16471
  6 3.50000  26 5.76923  46 6.73913  66 8.40909  86 8.06977
  7 3.42857  27 5.62963  47 6.63830  67 8.47761  87 7.94828
  8 3.00000  28 5.42857  48 6.50000  68 8.35294  88 7.90909
  9 5.00000  29 5.44828  49 6.85714  69 8.23913  89 7.85393
 10 5.20000  30 5.26667  50 7.00000  70 8.20000  90 7.76667
 11 4.90909  31 5.16129  51 6.90196  71 8.11268  91 7.82418
 12 4.50000  32 5.00000  52 6.76923  72 8.00000  92 7.73913
 13 4.76923  33 7.40909  53 6.75472  73 8.84932  93 7.66129
 14 4.42857  34 7.35294  54 6.62963  74 8.72973  94 7.63830
 15 4.26667  35 7.20000  55 6.54545  75 8.50000  95 7.57895
 16 4.00000  36 7.00000  56 6.42857  76 8.52632  96 7.50000
 17 6.35294  37 7.72973  57 6.56140  77 8.33766  97 7.93814
 18 6.00000  38 7.52632  58 6.44828  78 8.26923  98 7.85714
 19 6.52632  39 7.26923  59 6.37288  79 8.30380  99 8.08081
 20 6.20000  40 7.20000  60 6.26667  80 8.20000 100 8.00000

Seuraavat kaksi kuvaa havainnollistavat odotusarvon käyttäytymistä:
http://www.survo.fi/papers/p_puoli.pdf 
Odotusarvo ei siis kasva tasaisesti ja on paikallisesti pienimmillään
kun n on kakkosen potenssi tai jokin sellaisen kerrannainen.
Kasvu on likimain logaritmista.

Tapaus p tuntematon (q=1-p):
============================

Mielestäni hyvä päättelysääntö, kun n>2, on seuraava:
Heitetään kolikkoa kerran kutakin n vaihtoehtoa kohti. Olkoon
kruunien määrä k ja klaavojen n-k. Jos 0<k<=n-k, kruunat jatkavat,
jos 0<n-k<k, klaavat jatkavat. Jos k=0 tai k=n, aloitetaan alusta.

Tapauksessa n=2 (von Neumann) heittoja tarkastellaan pareittain, jolloin
esiintyvät tilanteet (A=Kruuna, B=Klaava ja p kruunan todennäköisyys)

tilanne  todennäköisyys
AA       p^2
AB       p*q
BA       q*p
BB       q^2

Sovitaan,että AB johtaa vaihtoehdon 1 valintaan ja BA vaihtoehdon 2
valintaan. Tilanteissa AA ja BB aloitetaan alusta ja heitetään kaksi
kertaa. Tätä toistetaan, kunnes saadaan joko AB tai BA. Näin taataan
kummallekin vaihtoehdolle sama todennäköisyys tulla valituksi.

Arvonta päättyy kahdella heitolla todennäköisyydellä 2*p*q
ja jatkuu lisäheitoilla todennäköisyydellä p^2+q^2.
Heittojen lukumäärän odotusarvo E2 on helpointa laskea
ehdollistamispriaatteella yhtälöstä

E2=2*p*q*2+(p^2+q^2)*(E2+2)

eli odotusarvo ehdolla "saatiin AB tai BA" on 2 todennäköisyydellä
2*p*q ja se on E2+2 (2 "hukkaheittoa") todennäköisyydellä p^2+q^2.
Painottamalla nämä ehdolliset odotusarvot omilla todennäköisyyksillään
saadaan summana kysytty odotusarvo E2.
Kehittämällä yhtälön oikeata puolta seuraavasti

E2=(p^2+q^2)*E2+2*[p^2+q^2+2*p*q]=(p^2+q^2)*E2+2=(1-2*p*q)*E2+2

tulee ratkaisuksi E2=1/(p*q).
E2 on pienimmillään eli 4, kun p=q=1/2.
Siitä, ettei lanttia voi olettaa reiluksi, saa maksaa keskimäärin
vähintään nelinkertaisella heittomäärällä.

Odotusarvoa voidaan kyllä pienentää tulkitsemalla esim. heittosarja
AABB vaihtoehdon 1 valinnaksi ja heittosarja BBAA vaihtoehdon 2
valinnaksi, mutta sillä lienee vain pieni vaikutus tulokseen.

Olkoon yleisesti En lopulliseen valintaan tarvittavien heittojen
lukumäärän odotusarvo.
E5 voidaan tällöin esittää ehdollisten odotusarvojen painotettuna
summana seuraavasti:

E5=(p^5+q^5)*(E5+5)
   +5*(p^4*q+p*q^4)*5
   +10*(p^3*q^2+p^2*q^3)*(E2+5)
  =(p^5+q^5)*E5+5*[p^5+q^5+5*(p^4*q+p*q^4)+10*(p^3*q^2+p^2*q^3)
   +10*(p^3*q^2+p^2*q^3)*E2
  =(p^5+q^5)*E5+5*(p+q)^5+10*(p^2*q^2)*(p+q)*E2
  =(p^5+q^5)*E5+5+10*(p*q)^2*(1/(p*q))
  =(p^5+q^5)*E5+5+10*p*q

eli tästä tulee ratkaisuksi

E5=5*(1+2*p*q)/(1-p^5-q^5),

joka on pienimmillään eli 8, kun p=q=1/2.

Tällä tavalla arvoilla n=2,3,4,5,6,7 saadaan

E2=1/(p*q)
E3=1/(p*q) eli ehkä yllättäen sama kuin E2,
E4=2*(2+3*p*q)/(1-p^4-q^4)
E5=5*(1+2*p*q)/(1-p^5-q^5)
E6=(15*p*q-10*(p*q)^2+6)/(1-p^6-q^6)
E7=7*(1+3*p*q-4*(p*q)^2)/(1-p^7-q^7)

Lausekkeista tulee ilmeisesti yhä mutkikkaampia, kun n kasvaa.
Tyydyn sen vuoksi numeeriseen tarkasteluun.
Seuraavan rekursiivisen laskentakaavion avulla on mahdollista laskea
näitä odotusarvoja kiinteillä p-arvoilla hyvinkin suurille
vaihtoehtomäärille N:

..............................
E(N)|=if(N=1)then(0)else(if(N=2)then(1/(p*q))else(EE(N)))

EE(N):=if(N=3)then(3/(1-p^3-q^3))else(E0(N))

E0(N):=if(N=2*int(N/2))then(E2(N))else(E1(N))

S2(N):=for(I=2)to(N/2-1)sum(C(N,I)*((p^(N-I)*q^I+p^I*q^(N-I))*E(I)))
E2(N):=(S2(N)+N+C(N,N/2)*(p*q)^(N/2)*E(N/2))/(1-p^N-q^N)


S1(N):=for(I=2)to(int(N/2))sum(C(N,I)*((p^(N-I)*q^I+p^I*q^(N-I))*E(I)))
E1(N):=(S1(N)+N)/(1-p^N-q^N)

ACCURACY=16
p=1/2 q=1-p
E(8)=12.432731517273787
Jos siis kolikko on harhaton, saadaan
E(2)=4
E(3)=4
E(4)=6.2857142857142856  (44/7)
E(5)=8
E(6)=9.4193548387096779  (292/31)
E(7)=10.666666666666666  (32/3)
E(8)=12.440944881889763  (1580/127)
E(9)=14.023529411764706  (1192/85)
E(10)=15.86692759295499  (8108/511)

Suurilla n-arvoilla on kiinnostavaa katsoa, mitä on E(n)/n:

E(100)/100=1.7941574539486447
E(200)/200=1.8442384669667553
E(220)/220=1.8503872429281234
E(300)/300=1.8690212015345935
E(400)/400=1.8840668711812836
E(500)/500=1.8949673586637965
E(600)/600=1.9031751471085019
E(700)/700=1.9095473792081088
E(800)/800=1.9147594931461018
E(900)/900=1.9191792191281052
E(1000)/1000=1.9229882036650083

E(n) kasvaa siis likimain lineaarisesti ja karkeasti arvontaan
"yksi n vaihtoehdosta" tarvitaan keskimäärin lähes kaksinkertainen
heittomäärä vaihtoehtojen lukumäärään verrattuna (kun kolikko
sattuu olemaan harhaton tai lähes sellainen).

Katsotaan seuraavaksi, miltä näyttävät heittolukumäärien
pistetodennäköisyydet
P(n,k)=P{tarvitaan k heittoa}, k=n,n+1,...
Ne käyttäytyvät siinä määrin epäsäännöllisesti, että yleisten
lausekkeiden esittäminen on hankalaa. Numeerisesti, annetulla
p-arvolla pistetodennäköisyyksiä voi laskea esittämällä prosessin
Markovin ketjuna.

Tapauksessa n=5 seuraava siirtymätodennäköisyyksien matriisi
kertoo kaiken olennaisen.

p=1/2 q=1-p
MAT SAVE P
MATRIX P
///      T0 10 01 20 11 02 30 21 12 03 40 31 22 13 04 T2  P  Q T1  E
T0        0  p  q  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
10        0  0  0  p  q  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
01        0  0  0  0  p  q  0  0  0  0  0  0  0  0  0  0  0  0  0  0
20        0  0  0  0  0  0  p  q  0  0  0  0  0  0  0  0  0  0  0  0
11        0  0  0  0  0  0  0  p  q  0  0  0  0  0  0  0  0  0  0  0
02        0  0  0  0  0  0  0  0  p  q  0  0  0  0  0  0  0  0  0  0
30        0  0  0  0  0  0  0  0  0  0  p  q  0  0  0  0  0  0  0  0
21        0  0  0  0  0  0  0  0  0  0  0  p  q  0  0  0  0  0  0  0
12        0  0  0  0  0  0  0  0  0  0  0  0  p  q  0  0  0  0  0  0
03        0  0  0  0  0  0  0  0  0  0  0  0  0  p  q  0  0  0  0  0
40        p  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  q  0
31        0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  q  0  0  p  0
22        0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0
13        0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  p  0  0  q  0
04        q  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  p  0
T2        0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  p  q  0  0
P         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  p  0  0  q  0
Q         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  q  0  0  p  0
T1        0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1
E         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1

Tämä 20-tilainen ketju esittää heittoprosessin kulkua heitto heitolta.

Matriisin ensimmäinen rivi kertoo, että alkutilasta T0 päästään (yhdellä
heitolla) joko tilaan 10 (eli 1 kruuna, 0 klaavaa) todennäköisyydellä p
tai tilaan 01 (0 kruunaa, 1 klaava) todennäköisyydellä q.
Yleisesti tila ij tarkoittaa tilannetta, jossa on saatu i kruunaa ja
j klaavaa. Näin rivit 10,20,11,02,30,21,12,03 noudattavat samanlaista
rakennetta kuin ensimmäinen.
Vasta rivillä 40 tapahtuu mielenkiintoisempaa.
Tilasta 40 (4 kruunaa, 0 klaavaa) joudutaan takaisin alkutilaan T0
todennäköisyydellä p (koska on saatu viisi peräkkäistä kruunaa), mutta
todennäköisyydellä q  peli ratkeaa, koska 5 heitossa on saatu vain 1
klaava ja tullaan suoraan "maalitilaan" T1.
Vastaavalla tavalla toimivat rivit 31,13 ja 04.
Tilasta 22 joudutaan väistämättä (todennäköisyydellä 1) tilaan T2,
jossa mukana on enää kaksi vaihtoehtoa.
Tilasta T2 tullaan joko tilaan P tai Q todennäköisyyksin p ja q.
Tilasta P joudutaan joko kahden vaihtoehdon alkutilaan T2 (saatu
kaksi peräkkäistä kruunaa) tai päästään maaliin T1. Tilasta Q
joudutaan vastaaviin tilanteisiin päivastaisin todennäköisyyksin.
Ketjuun on lisätty vielä ylimääräinen lopputila E, johon joudutaan
aina välittömästi tilasta T1. Sen merkitys ilmenee kohta.

Jos siirtymätodennäköisyyksien matriisi P kerrotaan itsellään eli
lasketaan matriisi P^2, saadaan (kokonaistodennäköisyyden kaavan
mukaisesti) uuden matriisin alkioina luvut, jotka kertovat, millä
todennäköisyydellä siirrytään tilasta x tilaan y kahdella askeleella
ja yleisesti P^k (matriisi P potenssiin k) kertoo k askeleen siirtymä-
todennäköisyydet tilojen välillä.
Kun otetaan mukaan prosessin alkutilaa kuvaava vektori P0 (esitettynä
tässä transponoituna)

T0 10 01 20 11 02 30 21 12 03 40 31 22 13 04 T2  P  Q T1  E
 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

joka kertoo, että ollaan aluksi tilassa T0, saadaan tieto siitä,
millä todennäköisyydellä peli päättyy (eli yksi vaihtoehto viidestä
tulee valituksi) täsmälleen k heitolla, tulosta
(P^k)'*P0.
Tämä vektori kertoo kokonaisuudessaan, millä todennäköisyydellä
prosessi on kussakin tilassa k heiton jälkeen.
Kun esim. p=q=1/2 ja k=12, saadaan Survon matriisitulkilla

MAT R=(P^12)'*P0
MAT LOAD R
MATRIX R
P^12'*P0
///             0
T0       0.000000
10       0.000000
01       0.000000
20       0.000977
11       0.001953
02       0.000977
30       0.000000
21       0.000000
12       0.000000
03       0.000000
40       0.000000
31       0.000000
22       0.000000
13       0.000000
04       0.000000
T2       0.019531
P        0.039063
Q        0.039063
T1       0.019531
E        0.878906

Nähdään, että todennäköisyysmassa, kooltaan 1, joka sijaitsi alunperin
huipulla T0 on valunut melkoisesti kohti lopputilaa E. Merkkinä siitä,
että on jouduttu aloittamaan kahdesti alusta (10 heiton jälkeen)
ollaan pienin todennäköisyyksin tiloissa 20,11,02.
Maaliin E on 11 heiton aikana päästy todennäköisyydellä 0.878906
ja juuri nyt 12. heitolla (tila T1) todennäköisyydellä 0.019531.
Näin selittyy, miksi määriteltiin tuo ylimääräinen lopputila E.
Tällöin T1 "väliaikaisena" tilana kertoo aina täsmälleen, millä
todennäköisyydellä arvonta ratkeaa juuri määrätyllä heittomäärällä
eli R(T1) eri arvoilla k antaa heittomäärän jakauman
pistetodennäköisyydet P(n,k).

Seuraava sukro laskee pistetodennäköisyydet edellä kuvatulla tavalla.
Vaikka matriisipotenssit P^2,P^3,...,P^k olisi nopeinta laskea
askeltaen tyyliin P^k=P*P^(k-1), se voi johtaa liiallisiin pyöristys-
virheisiin. Tämän vuoksi käytetään tässä suoraa potenssiinkorotusta
MAT Q=P^k
jolloin esim. arvolla k=18, 18(10:bin)=10010, Survon matriisitulkki
laskee potenssit P2=P^2, P4=P2^2, P8=P4^2, P16=P8^2 ja saa 18.
potenssin tulona P2*P16.
Tarkkuuden säilyttämisen kannalta pistetodennäköisyydet talletetaan
vektoriksi PP käänteisessä järjestyksessä, jolloin jakauman odotusarvoa
ja muita momentteja laskettaessa - niiden ollessa tulosummia -
lähdetään liikkeelle pienimmästä päästä.

*TUTSAVE MARV5
/ def Wn=W1 Wi=W2
*{R}
*MAT PP=ZER({print Wn},1){act}{R}
*{Wi=0}
+ A: {ref}{Wi=Wi+1}
- if Wi > Wn then goto E
*{erase}MAT Q=P^{print Wi}{act}{R}
*{erase}MAT R=Q'*P0{act}{R}
*{erase}MAT PP({print Wn}-{print Wi}+1,1)=R(T1,1){act}{goto A}
+ E: {R}
*{d2}MAT RLABELS "" TO PP{act}{end}
*{end}

Esimerkkinä on tapaus n=5, p=q=1/2:
.......................................
Katsotaan, että 200 ensimmäistä pistetodennäköisyyttä riittää
odotusarvon ja varianssin riittävän tarkkaan laskentaan.
Kun sukro /MARV5 on aktivoitu parametrilla 200, lopputilanne on
seuraava:
/MARV5 200
MAT PP=ZER(200,1)
MAT Q=P^200        / *Q~P^200 20*20
MAT R=Q'*P0        / *R~P^200'*P0 20*1
MAT PP(200-200+1,1)=R(T1,1)
MAT RLABELS "" TO PP

Odotusarvo saadaan PP-matriisin avulla seuraavasti:
MAT C=ZER(200,1)
MAT TRANSFORM C BY 200-I#+1     / arvot käänteisessä järjestyksessä
MAT TRANSFORM C BY PP AND X#*Y# / arvo*pistetodennäköisyys
MAT S=SUM(C)                    / summa=odotusarvo
MAT_S(1,1)=8

Tulos 8 on luonnollisesti sama kuin mitä pääteltiin aikaisemmin.
.......................................
Heittojen lukumäärän varianssi lasketaan samaan tapaan:
MAT C=ZER(200,1)
MAT TRANSFORM C BY 200-I#+1
MAT TRANSFORM C BY (X#-8)*(X#-8)
MAT TRANSFORM C BY PP AND X#*Y#
MAT S=SUM(C)       / *S~SUM(T(C_by_PP_and_X#*Y#)) D1*1
MAT_S(1,1)=10.666666666666666

Varianssin tarkka arvo on mitä ilmeisimmin 32/3.
Varianssit eräillä muillakin p:n arvoilla samaan tapaan laskettuina
ovat seuraavia:

p         Varianssi
1/2       32/3      =10.666666666667
1/3       3123/196  =15.933673469388
1/4       38848/1521=25.541091387245
1/5       88175/2352=37.489370748299

eli varianssikin kasvaa reippaasti, kun etäännytään "parhaasta"
arvosta p=1/2.

Palaan vielä uudelleen aiheeseen, jos tulee lisää sanottavaa.
On täysin mahdollista, että tehtävälle löytyy vielä parempia
ratkaisutapoja.

Seppo Mustonen

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.