annotate toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
rev   line source
wolffd@0 1 function obslik = mk_hmm_obs_lik_vec1(bnet, evidence)
wolffd@0 2 % MK_HMM_OBS_LIK_VEC1 Make the observation likelihood vector for the first slice
wolffd@0 3 % obslik = mk_hmm_obs_lik_vec1(engine, evidence)
wolffd@0 4 %
wolffd@0 5 % obslik(i) = Pr(y(1) | X(1)=i)
wolffd@0 6 % evidence{i} contains the evidence on node i in slice 1
wolffd@0 7
wolffd@0 8 ns = bnet.node_sizes;
wolffd@0 9 ss = length(ns);
wolffd@0 10 onodes = find(~isemptycell(evidence(:)));
wolffd@0 11 hnodes = find(isemptycell(evidence(:)));
wolffd@0 12 ens = ns;
wolffd@0 13 ens(onodes) = 1;
wolffd@0 14 Q = prod(ens(hnodes));
wolffd@0 15 obslik = zeros(1,Q);
wolffd@0 16 dom = (1:ss);
wolffd@0 17 bigpot = dpot(dom, ens(dom));
wolffd@0 18 for i=onodes(:)'
wolffd@0 19 e = bnet.equiv_class(i,1);
wolffd@0 20 fam = family(bnet.dag, i);
wolffd@0 21 pot = convert_to_pot(bnet.CPD{e}, 'd', fam(:), evidence);
wolffd@0 22 bigpot = multiply_by_pot(bigpot, pot);
wolffd@0 23 end
wolffd@0 24 m = pot_to_marginal(bigpot);
wolffd@0 25 obslik = m.T(:);