Daniel@0: function L = log_prior(CPD) Daniel@0: % LOG_PRIOR Return log P(theta) for a tabular CPD Daniel@0: % L = log_prior(CPD) Daniel@0: Daniel@0: switch CPD.prior_type Daniel@0: case 'none', Daniel@0: L = 0; Daniel@0: case 'dirichlet', Daniel@0: D = CPD.dirichlet(:); Daniel@0: L = sum(log(D + (D==0))); Daniel@0: case 'entropic', Daniel@0: % log-prior = log exp(-H(theta)) = sum_i theta_i log (theta_i) Daniel@0: fam_sz = CPD.sizes; Daniel@0: psz = prod(fam_sz(1:end-1)); Daniel@0: ssz = fam_sz(end); Daniel@0: C = reshape(CPD.CPT, psz, ssz); Daniel@0: L = sum(sum(C .* log(C + (C==0)))); Daniel@0: end