solving transition probabilities
4 views (last 30 days)
Show older comments
Dear All,
I have written a program for computing transition probabilities.
the transitional probability from s1 ->s2
1 compute total no number of successive events going from s1 -> s2 divided by the total number of s1 events. which is describe in following equation
Transitional probability s1 -> s2 = Pr[Xt+1 = s2|Xt = s1].
But I have error in calculating . Couldn't find where is error in my code
error is here :
Error in ==> statv2 at 4
if (x(1) <= 5)
??? Output argument "state_current" (and maybe others) not assigned during call to "C:\Markov
Chain Programs\Matlab CPU program - Copy (2)\statv2.m>statv2".
Error in ==> modelMarkov_v2 at 20
[previousState currentState] = statv2([data(i-1,1) data(i,1)]);
Here is code for calculation transition probabilities
reading = [77;66.9016000000000;67.0833000000000;66.1000000000000;66.3115000000000;66.3934000000000;86.8525000000000;78.7288000000000;66.4918000000000;66.7833000000000;67.3667000000000;66.7541000000000;68.2034000000000;67.5833000000000;65.7869000000000;66.4068000000000;85.3443000000000;90.9667000000000;66.3667000000000;67.9500000000000;69.7833000000000;67.6441000000000;66.9667000000000;66.1167000000000;65.6721000000000;67.4576000000000;69.1167000000000;96.6333000000000;66.4918000000000;66.3443000000000;66.9830000000000;78.5410000000000;67.3729000000000;66.5574000000000;66.5667000000000;66.8644000000000;68.3934000000000;110.610000000000;66.8500000000000;66.9167000000000;70.9508000000000;68.1695000000000;67.2667000000000;];
data = reading ;
transFreq = zeros(22,22);
transCount = zeros(22,22);
% calculating transion count in data
i = 1;
for i = 1:length(data)
if (i < 2)
[previousState currentState] = statv2([data(i,1) data(i,1)]);
transCount(previousState, currentState) = transCount(previousState,currentState) + 1;
end
if (i >= 2)
data(i-1,1);
data(i,1);
[previousState currentState] = statv2([data(i-1,1) data(i,1)]);
transCount(previousState, currentState) = transCount(previousState, currentState) + 1;
end
end
% Calculate Transistion Frequencies
for j = 1:22
transFreq(j,:) = transCount(j,:)/ sum(transCount(j,:));
end
I have a function : statv2 to calculate previous state and current state
function [state_prev,state_current] = statv2(x)
% for previous state
if (x(1) <= 5)
state_prev = 1;
end
if (x(1) > 5 && x(1) <= 10)
state_prev = 2;
end
if (x(1) > 10 && x(1) <= 15)
state_prev = 3;
end
if (x(1) > 15 && x(1) <= 20)
state_prev = 4;
end
if (x(1) > 20 && x(1) <= 25)
state_prev = 5;
end
if (x(1) > 25 && x(1) <= 30)
state_prev = 6;
end
if (x(1) > 30 && x(1) <= 35)
state_prev = 7;
end
if (x(1) > 35 && x(1) <= 40)
state_prev = 8;
end
if (x(1) > 40 && x(1) <= 45)
state_prev = 9;
end
if (x(1) > 45 && x(1) <= 50)
state_prev = 10;
end
if (x(1) > 50 && x(1) <= 55)
state_prev = 11;
end
if (x(1) > 55 && x(1) <= 60)
state_prev = 12;
end
if (x(1) > 60 && x(1) <= 65)
state_prev = 13;
end
if (x(1) > 65 && x(1) <= 70)
state_prev = 14;
end
if (x(1) > 70 && x(1) <= 75)
state_prev = 15;
end
if (x(1) > 75 && x(1) <= 80)
state_prev = 16;
end
if (x(1) > 80 && x(1) <= 85)
state_prev = 17;
end
if (x(1) > 85 && x(1) <= 90)
state_prev = 18;
end
if (x(1) > 90 && x(1) <= 95)
state_prev = 19;
end
if (x(1) > 95 && x(1) <= 100)
state_prev = 20;
end
if (x(1) > 100 && x(1) <= 105)
state_prev = 21;
end
if (x(1) > 105 && x(1) <= 110)
state_prev = 22;
end
% for current state
if (x(2) <= 5)
state_current = 1;
end
if (x(2) > 5 && x(2) <= 10)
state_current = 2;
end
if (x(2) >10 && x(2) <= 15)
state_current = 3;
end
if (x(2) > 15 && x(2) <= 20)
state_current = 4;
end
if (x(2) > 20 && x(2) <= 25)
state_current = 5;
end
if (x(2) > 25 && x(2) <= 30)
state_current = 6;
end
if (x(2) > 30 && x(2) <= 35)
state_current = 7;
end
if (x(2) > 35 && x(2) <= 40)
state_current = 8;
end
if (x(2) > 40 && x(2) <= 45)
state_current = 9;
end
if (x(2) > 45 && x(2) <= 50)
state_current = 10;
end
if (x(2) > 50 && x(2) <= 55)
state_current = 11;
end
if (x(2) > 55 && x(2) <= 60)
state_current = 12;
end
if (x(2) > 60 && x(2) <= 65)
state_current = 13;
end
if (x(2) > 65 && x(2) <= 70)
state_current = 14;
end
if (x(2) > 70 && x(2) <= 75)
state_current = 15;
end
if (x(2) > 75 && x(2) <= 80)
state_current = 16;
end
if (x(2) > 80 && x(2) <= 85)
state_current = 17;
end
if (x(2) > 85 && x(2) <= 90)
state_current = 18;
end
if (x(2) > 90 && x(2) <= 95)
state_current = 19;
end
if (x(2) > 95 && x(2) <= 100)
state_current = 20;
end
if (x(2) > 100 && x(2) <= 105)
state_current = 21;
end
if (x(2) > 105 && x(2) <= 110)
state_current = 22;
end
Could please help me how can I resolve the error
Many Thanks in advance
0 Comments
Answers (1)
Walter Roberson
on 30 May 2012
You have a data point 110.610000000000 which is beyond the limits that you test for, 110, so no state gets assigned in that situation.
Have you considered the health benefits of using histc() ?
0 Comments
See Also
Categories
Find more on Specialized Power Systems in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!