wolffd@0: function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence) wolffd@0: % CPD_TO_PI Compute the pi vector (gaussian) wolffd@0: % function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence) wolffd@0: wolffd@0: switch msg_type wolffd@0: case 'd', wolffd@0: error('gaussian_CPD can''t create discrete msgs') wolffd@0: case 'g', wolffd@0: dps = ps(CPD.dps); wolffd@0: k = evidence{dps}; wolffd@0: if isempty(k) wolffd@0: error('gmux node must have observed discrete parent') wolffd@0: end wolffd@0: m = msg{n}.pi_from_parent{k}; wolffd@0: B = CPD.weights(:,:,k); wolffd@0: pi.mu = CPD.mean(:,k) + B * m.mu; wolffd@0: pi.Sigma = CPD.cov(:,:,k) + B * m.Sigma * B'; wolffd@0: end