wolffd@0: function obslik = mk_hmm_obs_lik_vec1(bnet, evidence) wolffd@0: % MK_HMM_OBS_LIK_VEC1 Make the observation likelihood vector for the first slice wolffd@0: % obslik = mk_hmm_obs_lik_vec1(engine, evidence) wolffd@0: % wolffd@0: % obslik(i) = Pr(y(1) | X(1)=i) wolffd@0: % evidence{i} contains the evidence on node i in slice 1 wolffd@0: wolffd@0: ns = bnet.node_sizes; wolffd@0: ss = length(ns); wolffd@0: onodes = find(~isemptycell(evidence(:))); wolffd@0: hnodes = find(isemptycell(evidence(:))); wolffd@0: ens = ns; wolffd@0: ens(onodes) = 1; wolffd@0: Q = prod(ens(hnodes)); wolffd@0: obslik = zeros(1,Q); wolffd@0: dom = (1:ss); wolffd@0: bigpot = dpot(dom, ens(dom)); wolffd@0: for i=onodes(:)' wolffd@0: e = bnet.equiv_class(i,1); wolffd@0: fam = family(bnet.dag, i); wolffd@0: pot = convert_to_pot(bnet.CPD{e}, 'd', fam(:), evidence); wolffd@0: bigpot = multiply_by_pot(bigpot, pot); wolffd@0: end wolffd@0: m = pot_to_marginal(bigpot); wolffd@0: obslik = m.T(:);