Bruksanvisning för simulering av Markovkedja

Download Report

Transcript Bruksanvisning för simulering av Markovkedja

STOCKHOLMS UNIVERSITET
MATEMATISKA INSTITUTIONEN
Avd. Matematisk statistik
Anders Bj¨
orkstr¨
om
Stokastiska processer och simulering I
VT 2008
Bruksanvisning fo
¨r hur man simulerar diskreta Markovkedjor
Innan vi startar s˚
a b¨
orja med att ¨
oppna ett terminalf¨onster genom att trycka Alt + F2 och i det f¨onstret
skriva ‘konsole’. Skapa sedan en katalog som heter ‘ProcI’ genom att skriva ‘mkdir ProcI’ i det terminalf¨
onster som ¨
oppnades, och f¨
orflytta dig till den katalogen genom att skriva ‘cd ProcI’. (Katalogen
‘ProcI’ kommer nu att finnas i din hemkatalog.) Starta nu Matlab genom att skriva ‘matlab’ i ditt terminalf¨
onster. Nu ¨
ar vi s¨
akra p˚
a att Matlab kommer att hitta alla filer som vi sparar i katalogen ‘ProcI’.
1
En Markovkedja med tre tillst˚
and
Enligt vissa unders¨
okningar kan f¨
oljden av bokst¨aver i en svensk text betraktas som en markovkedja med
¨
tre tillst˚
and, E0 , E1 och E2 , d¨
ar E0 ¨
ar ordmellanrum, E1 ¨ar vokal och E2 ¨ar konsonant. Overg˚
angsmatrisen
f¨
or markovkedjan ¨
ar


0
0.25 0.75
P =  0.16 0.01 0.83 
0.24 0.47 0.29
Antag att vi vill simulera de f¨
orsta 100 variablerna i markovkedjan. D˚
a beh¨over vi en funktion och den
kan i Matlab skrivas s˚
ah¨
ar:
function [y]=f(x,u)
if x==0
if u<0.25
y=1;
else
y=2;
end;
elseif x==1
if u<0.16
y=0;
elseif u<0.16+0.01
y=1;
else
y=2;
end;
else
if u<0.24
y=0;
elseif u<0.24+0.47
y=1;
else
y=2;
1
end;
end;
Skriv denna Matlabtext i en fil som du ger namnet ‘f.m’ och sparar i katalogen ‘ProcI’ i din hemkatalog.
Om vi nu skriver in f¨
oljande i matlabs ‘Command Window’:
n=0;
result=[];
x=0;
while n<100
x=f(x,rand);
result=[result x];
n=n+1;
end;
s˚
a kommer vektorn result att inneh˚
alla en sekvens av hundra stycken blandade nollor ettor och tv˚
aor,
i enlighet med o
verg˚
angsmatrisen
ovan.
¨
2
Ett mer generellt fall
Man inser l¨
att att id´en som beskrevs i avsnitt 1 i princip g˚
ar att anv¨anda f¨or att simulera vilken Markovkedja som helst, s˚
a l¨
ange den har ¨
andligt tillst˚
andsrum. En allvarlig nackdel ¨ar dock att Matlab-rutinen
som beskriver funktionen function [y]=f(x,u) blir l˚
ang och omst¨andlig, om man ska skriva p˚
a det
utf¨
orliga s¨
att som vi gjorde. H¨
ar kommer ett f¨orslag till hur man g¨or det mera kompakt:
function [y]=f(x,u,P)
y=0;
test=P(x+1,1);
while u>test
y=y+1;
test=test+P(x+1,y+1);
end;
Storheten P st˚
ar naturligtvis f¨
or kedjans ¨overg˚
angsmatris. Vi f¨oruts¨atter att denna har blivit definierad
i det program, fr˚
an vilket funktionen anropas.
2