Mercurial > hg > camir-aes2014
comparison toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/marginal_nodes.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 marginal = marginal_nodes(engine, query, add_ev) | |
2 % MARGINAL_NODES Compute the marginal on the specified query nodes (loopy) | |
3 % marginal = marginal_nodes(engine, query, add_ev) | |
4 % | |
5 % 'query' must be a single node. | |
6 % add_ev is an optional argument; if 1, observed nodes will be set to their original size, | |
7 % otherwise they will be treated like points. | |
8 | |
9 if nargin < 3, add_ev = 0; end | |
10 | |
11 if length(query) > 1 | |
12 error('can only compute marginal on single nodes or families') | |
13 end | |
14 bnet = bnet_from_engine(engine); | |
15 ns = bnet.node_sizes(:); | |
16 | |
17 switch engine.msg_type | |
18 case 'd', | |
19 T = engine.marginal{query}; | |
20 if ~add_ev | |
21 marginal.T = shrink_obs_dims_in_table(T, query, engine.evidence); | |
22 else | |
23 marginal.T = T; | |
24 end | |
25 marginal.domain = query; | |
26 | |
27 case 'g', | |
28 if engine.disconnected_nodes_bitv(query) | |
29 marginal.T = 1; | |
30 marginal.domain = query; | |
31 if add_ev | |
32 marginal = add_ev_to_dmarginal(marginal, engine.evidence, ns) | |
33 end | |
34 return; | |
35 end | |
36 | |
37 marginal = engine.marginal{query}; | |
38 marginal.domain = query; | |
39 if ~add_ev | |
40 marginal = shrink_obs_dims_in_gaussian(marginal, query, engine.evidence, ns); | |
41 end | |
42 end | |
43 |