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