Mercurial > hg > camir-aes2014
annotate toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/marginalize_pot.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 smallpot = marginalize_pot(bigpot, keep, maximize, useC) |
wolffd@0 | 2 % MARGINALIZE_POT Marginalize a cpot onto a smaller domain. |
wolffd@0 | 3 % smallpot = marginalize_pot(bigpot, keep, maximize, useC) |
wolffd@0 | 4 % |
wolffd@0 | 5 % The maximize argument is ignored - maxing out a Gaussian is the same as summing it out, |
wolffd@0 | 6 % since the mode and mean are equal. |
wolffd@0 | 7 % The useC argument is ignored. |
wolffd@0 | 8 |
wolffd@0 | 9 node_sizes = sparse(1, max(bigpot.domain)); |
wolffd@0 | 10 node_sizes(bigpot.domain) = bigpot.sizes; |
wolffd@0 | 11 sum_over = mysetdiff(bigpot.domain, keep); |
wolffd@0 | 12 |
wolffd@0 | 13 if sum(node_sizes(sum_over))==0 % isempty(sum_over) |
wolffd@0 | 14 %smallpot = bigpot; |
wolffd@0 | 15 smallpot = cpot(keep, node_sizes(keep), bigpot.g, bigpot.h, bigpot.K); |
wolffd@0 | 16 else |
wolffd@0 | 17 [h1, h2, K11, K12, K21, K22] = partition_matrix_vec(bigpot.h, bigpot.K, sum_over, keep, node_sizes); |
wolffd@0 | 18 n = length(h1); |
wolffd@0 | 19 K11inv = inv(K11); |
wolffd@0 | 20 g = bigpot.g + 0.5*(n*log(2*pi) - log(det(K11)) + h1'*K11inv*h1); |
wolffd@0 | 21 if length(h2) > 0 % ~isempty(keep) % we are are actually keeping something |
wolffd@0 | 22 A = K21*K11inv; |
wolffd@0 | 23 h = h2 - A*h1; |
wolffd@0 | 24 K = K22 - A*K12; |
wolffd@0 | 25 else |
wolffd@0 | 26 h = []; |
wolffd@0 | 27 K = []; |
wolffd@0 | 28 end |
wolffd@0 | 29 smallpot = cpot(keep, node_sizes(keep), g, h, K); |
wolffd@0 | 30 end |
wolffd@0 | 31 |