> restart: with(linalg): with(linearalgebra): with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name GramSchmidt has been rebound Warning, the name changecoords has been redefined Markov-kjede I ("dekk-eksemplet") Vi betrakter følgende stokastisk matrise > P:= Matrix([[0.95, 0.1], [0.05, 0.9]]); P := 0.95 0.1ù 0.05 0.9 og setter > X[0]:=Vector([,0.6]); X 0 := ù 0.6 Vi kan beregne de 30 første leddene i Markov kjeden gitt ved X k = P X k - 1 slik > for k from 1 to 30 do X[k]:=P.X[k-1]: end: De tre første leddene er > X[1], X[2], X[3]; 0.864999999999999991ù 0.135000000000000008, 0.835249999999999937ù 0.164750000000000007, 0.809962499999999918ù 0.190037499999999998 Merk at vi også har at X[k] = P k X[0]. Så vi kan f.eks. beregne X[3] slik > (P^ 3). X[0];
0.809962499999999918ù 0.190037500000000026 Men det er mere effektivt å beregne følgen X[k] rekursivt slik vi gjorde det ovenfor. La oss skrive ut X[k] fra k= 25 til 30 > for k from 25 to 30 do X[k] end; 0.670679488965514881ù 0.329320511034484730 0.670077565620687543ù 0.329922434379312012 0.669565930777584306ù 0.330434069222415194 0.669131041160946570ù 0.330868958839052873 0.668761384986804596ù 0.331238615013194904 0.668447177238783885ù 0.331552822761215671 Vi kan vise punktene i planet som svarer til X k for k=0 til 30 slik > PL1:=pointplot( {seq(x[k],k=0..30)},color = blue): display(pl1);
0.6 0.55 0.5 5 0.35 5 0.5 0.55 0.6 0.65 Disse punktene ligger på linjen x+y =1 og er i første kvadrant. Dette ser vi ved > L:=plot(1-x,x=0..1,color=red): display({l,pl1});
1 0.8 0.6 0.2 0 0 0.2 0.6 0.8 1 x Vi kan velge en annen startvektor X 0 og se hvordan Markovkjeden blir: > X[0]:=Vector([0.9,0.1]); X 0 := 0.9ù 0.1 > for k from 1 to 30 do X[k]:=P.X[k-1] end: Grafisk gir dette > PL2:=pointplot ( { seq(x[k],k=0..30) }, color=green): display({l,pl2});
1 0.8 0.6 0.2 0 0 0.2 0.6 0.8 1 x For begge Markov-kjedene ser det ut når k vokse at følgen X[k] av vektorer ser ut til å nærme seg vektoren > q = Vector([0.666, 0.333]); q = 0.666ù 0.333 Siden P er en regulær stokastisk matrise vet vi at q vil være den entydige bestemte likevektsvektoren for P. Vi kan bestemme q direkte ved å bruke at q tilfredstiller Pq = q, samtidig som utnytter at q er en sannsynlighetsvektor. Vi lar I2 være identitetsmatrisen :
> I2:=IdentityMatrix(2); I2 := 1 0ù 0 1 Systemet Pq = q kan skrives om til (P-I2) q= 0. Den reduserte trappeformen U til matrisen A= P-I2 er lett å finne for hånd. Med Maple kan den finnes slik: > A:= P-I2: U:=convert(rref(A), Matrix); 1-2.000000000ù U := 0 0. Systemet (P-I2) q= 0 løses da ved > LinearSolve(U, <0,0>, free ='t'); 2.000000000 t 1 ù t 1 Fra dette svaret vet vi at q må være et multippel av vektoren [2, 1]. Siden summen av komponentene i q må være lik 1 blir da > q:= 1/(2+1)*Vector([2, 1]); q := 2ù 3 1 3 Markovkjede II ("befolkningseksemplet") Vi betraker følgende "forflyttingsgsmatrise" fra hovestad/land/utland til hovestad/land/utland fra et år til neste:
> P:=Matrix([[0.96, 0.05, 0.3], [0.02, 0.94, 0.2], [0.02, 0.01, 0.5]]); P := 0.96 0.05 0.3ù 0.02 0.94 0.2 0.02 0.01 0.5 La oss anat at befolkningsfordeling i utgangspunktet er gitt ved vektoren [1.14, 2.86, 0.1] (med millioner som enhet). Vi kan da danne oss den prosentvisefordelingsvektoren X[0] ved > X[0]:=1/(1.14 + 2.86+ 0.1)*Vector([1.14,2.86,0.1]); X 0 := 0.278048780459999977ù 0.697560975539999961 0.0243902439000000006 Denne blir da en sannsynlighetsvektor. Vi beregner nå de 30 første leddene i Markov-kjeden ass. med P (og X 0 ) og viser resultatet grafisk : > for k from 1 to 30 do X[k]:= P. X[k-1] end: > pointplot3d({seq(x[k],k=0..30)},color = blue);
0.031 0.03 0.029 0.028 0.7 0.650.60.55 0.027 0.026 0.025 0.3 0.35 5 0.5 50.35 0.55 0.6 0.5 Siden P opplagt er regulær har P en entydig bestemt likevektsvektor q. Vi bestemmer denne ved å løse systemet Pq=q, dvs (P-I3) q = 0. Vi bestemmer først den reduserte trappeformen U til A= P - I3 : > I3:=IdentityMatrix(3): A:= P-I3: U:=convert(rref(A),Matrix); U := 1 0-20.00000000ù 0 1-10.00000000 0 0 0. Systemet (P-I3) q = 0 er altså ekvivalent med systemet U q = 0, som løses enkelt: Vi ser at q må være på formen [20 t, 10 t, t] = t [20, 10, 1] for et reelt tall t. Siden summen av komponentene til q må være lik 1 får vi at likevektsvektoren q er gitt ved > q:= (1/(20+10+1))*Vector([20,10,1]);
q := 20ù 31 10 31 1 31 På desimalform er q gitt ved > map(evalf,q); 0.6451612903ù 0.3225806452 0.03225806452 For befolkningseksemplet nevnt på forelesning, betyr dette at hele 64.5 % av befolkningen vil bo i hovedtaden i det lange løp, mens bare 32.2 % vil bo på landet og 3.2% vil bo i utlandet, forutsatt at flytningsmønsteret holder seg konstant. Dette vil da skje uavhengig av hvordan fordelingen er i utgangspunktet. Et lineært dynamisk system i planet Betrakt A og X[0] gitt ved > A:=Matrix([[0.3, ], [-0.3, 1.1]]); > X[0]:=Vector([-4,1]); A := 0.3 ù -0.3 1.1 X 0 := -4ù 1 Vi ser på følgen X[k]:= A X[k-1], k=1,2,3,..., som også kan beskrives ved X[k]:= A k X[0]. Legg forøvrig merke til at A ikke er en stokastisk matrise.
> for k from 1 to 30 do X[k]:= A.X[k-1]: end: > for k from 1 to 5 do X[k] end; -0.799999999999999932ù 2.29999999999999982 0.680000000000000048ù 2.77000000000000002 1.31200000000000006ù 2.84300000000000041 1.53080000000000016ù 2.73370000000000068 1.55272000000000032ù 2.54783000000000115 > pointplot( {seq(x[k],k=0..30)},color = blue);
2.5 2 1.5 1 0.5-4 -3-2 -1 0 1 Det ser altså ut at følgen nærmer seg origo når k vokser. Hvorfor det er slik kommer vi til bake til senere i forbindelse med kap. 5. >