marginal_node.m

来自「Bayes网络工具箱」· M 代码 · 共 45 行

M
45
字号
function marginal = marginal_node(engine, i, t)% MARGINAL_NODE Compute the marginal on the specified node (bk)%% marginal = marginal_node(engine, i, t)% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.% If enter_evidence used filtering instead of smoothing, this will return  Pr(X(i,t) | Y(1:t)).if nargin < 3, t = 1; end% clpot{t} contains slice t-1 and t% Example% clpot #: 1    2    3% slices:  1  1,2  2,3% For filtering, we must take care not to take future evidence into account.% Hence, we use clpot{1} if t=1.% For smoothing, clpot{1} does not exist.bnet = bnet_from_engine(engine);ss = length(bnet.intra);if t == 1  nodes = i;  if engine.filter    slice = 1;    c = clq_containing_family(engine.sub_engine1, i);  else    slice = 2;    c = clq_containing_family(engine.sub_engine, i);  endelse  nodes = i+ss;  slice = t;  c = clq_containing_family(engine.sub_engine, i+ss);endassert(c >= 1);clpot = engine.clpot{slice};bigpot = clpot{c};marginal = pot_to_marginal(marginalize_pot(bigpot, nodes));% we convert the domain to the unrolled numbering system% so that update_ess extracts the right evidence.marginal.domain = nodes+(t-1)*ss;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?