Asked by Oddur Bjarnason
on 30 Oct 2016

([1,0],[0.8,0.2;0.6,0.4])

function stationarystates( S0,T )

%This function is a simple model of a Markov chain

% S0 is the initial state

% T is the transition matrix

% I want the cumulation of states to stop after state i if state i =

% state i+1. This does not happen with this code

M=S0

for i=1:1:10

if S0*T^i~=S0*T^(i-1) %Test for inequality of successive states

M((i+1),:)=S0*T^i; %M cumulates the states

else break

end

end

disp(M)

plot(M)

end

Answer by Image Analyst
on 31 Oct 2016

Edited by Image Analyst
on 31 Oct 2016

Accepted Answer

Are S0 and T integers? Otherwise see the FAQ: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F

And of course S0*T^i will never equal S0*T^(i-1) - the exponent is different! What you need to do is use i and (i-1) as indexes into the S0 array. It looks like S0 better be an array or you won't get it to work.

Oddur Bjarnason
on 31 Oct 2016

>> [1,0]*[0.8,0.2;0.6,0.4]^5

ans =

0.7501 0.2499

>> [1,0]*[0.8,0.2;0.6,0.4]^6

ans =

0.7500 0.2500

>> [1,0]*[0.8,0.2;0.6,0.4]^7

ans =

0.7500 0.2500

Steven Lord
on 31 Oct 2016

>> m1 = [1,0]*[0.8,0.2;0.6,0.4]^6

m1 =

0.7500 0.2500

>> m2 = [1,0]*[0.8,0.2;0.6,0.4]^7

m2 =

0.7500 0.2500

>> m1-m2

ans =

1.0e-04 *

0.1280 -0.1280

Just because m1 and m2 look the same using the default display format doesn't mean they contain the same values. You can see this more clearly using a different display format.

>> format longg

>> [m1; m2; m1-m2]

ans =

0.750016 0.249984

0.7500032 0.2499968

1.2800000000035e-05 -1.27999999999795e-05

Oddur Bjarnason
on 31 Oct 2016

Sign in to comment.

Answer by Oddur Bjarnason
on 31 Oct 2016

function stationarystates(S0,T) %This function is a simple model of a Markov chain % S0 is the initial state % T is the transition matrix % I want the cumulation of states to stop after state i if the difference % between states is small enough.

M=S0

for i=1:1:10

m1 = S0*T^i;

m2 = S0*T^(i-1);

mDiff = abs(m2-m1);

if max(mDiff(:)) > 0.00001; % The states are essentially equal.

M((i+1),:)=S0*T^i; % M cumulates the states

else break

end

end

disp(M)

plot(M)

end

Oddur Bjarnason
on 31 Oct 2016

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Massimo Zanetti (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/309846-test-based-on-inequality-of-two-vectors-does-not-succeed#comment_402803

Sign in to comment.