MATLAB Answers

Test based on inequality of two vectors does not succeed.

1 view (last 30 days)
([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

  1 Comment

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 31 Oct 2016
Edited: Image Analyst on 31 Oct 2016
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.

  5 Comments

Show 2 older comments
Oddur Bjarnason
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
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
Oddur Bjarnason on 31 Oct 2016
Thank you Steven, I have come to realize this. See my answer below which follows Image Analyst's answer and comments.

Sign in to comment.

More Answers (1)

Oddur Bjarnason
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

  1 Comment

Oddur Bjarnason
Oddur Bjarnason on 31 Oct 2016
Thank you Image Analyst. This code is accordance with your answer and comments and yields the results I needed. I realize that the rows of the matrix approach the stationary matrix asymptotically but never becomes equal to the stationary state. So I have to be satisfied with a difference between states that is small enough. Thank you again. Oddur.

Sign in to comment.


Translated by