%隐马尔可夫后向算法:求观测序列概率P
%A状态转移概率矩阵
%B观测概率矩阵
%pai初始状态概率矩阵
%beita后向概率矩阵 先储存在b中
%T总时刻
%Q={1,2,3}状态集合,V={红,白}观测集合
%课本p213 习题10.1
A=[0.5 0.2 0.3;0.3 0.5 0.2;0.2 0.3 0.5];
B=[0.5 0.5;0.4 0.6;0.7 0.3];
pai=[0.2;0.3;0.5];
T=4;
O=[1;2;1;2];%1代表红球,2代表白球
b=zeros(T,size(pai,1));
%最后一个时刻T=4
for i=1:size(pai,1)
b(1,i)=1;
end
for t=2:T
for i=1:size(pai,1)
b(t,i)=A(i,:).*b(t-1,:)*B(:,O(T+2-t));
end
end
beita=flipud(b);%上下翻转矩阵b,得到后向概率矩阵
P=beita(1,:)*(pai.*B(:,O(1)));
P
beita
后向算法是从后往前推,迭代的时候我先正着递推,要注意真实时刻与代码中的t的关系:真实时刻=T+1-t
最后把算出来的b翻转一下就是正确的后向概率 存放在矩阵里