annotate toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/marginal_nodes.m @ 0:cc4b1211e677
tip
initial commit to HG from
Changeset:
646 (e263d8a21543) added further path and more save "camirversion.m"
author |
Daniel Wolff |
date |
Fri, 19 Aug 2016 13:07:06 +0200 |
parents |
|
children |
|
rev |
line source |
Daniel@0
|
1 function marginal = marginal_nodes(engine, nodes, t)
|
Daniel@0
|
2 % MARGINAL_NODES Compute the marginal on the specified query nodes (frontier)
|
Daniel@0
|
3 % marginal = marginal_nodes(engine, nodes, t)
|
Daniel@0
|
4 %
|
Daniel@0
|
5 % 't' specifies the time slice of the earliest node in 'nodes'.
|
Daniel@0
|
6 % 'nodes' cannot span more than 2 time slices.
|
Daniel@0
|
7 %
|
Daniel@0
|
8 % Example:
|
Daniel@0
|
9 % Consider a DBN with 2 nodes per slice.
|
Daniel@0
|
10 % Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
|
Daniel@0
|
11 % i.e., nodes 3 and 5 in the unrolled network,
|
Daniel@0
|
12
|
Daniel@0
|
13 if nargin < 3, t = 1; end
|
Daniel@0
|
14 assert(length(nodes)==1);
|
Daniel@0
|
15 i = nodes(1);
|
Daniel@0
|
16 bigpot = engine.fwdback{i,t};
|
Daniel@0
|
17 bnet = bnet_from_engine(engine);
|
Daniel@0
|
18 ss = length(bnet.intra);
|
Daniel@0
|
19 nodes = nodes + (t-1)*ss;
|
Daniel@0
|
20 %if t > 1, nodes = nodes + ss; end
|
Daniel@0
|
21 marginal = pot_to_marginal(marginalize_pot(bigpot, nodes));
|