wolffd@0: function [engine, loglik] = enter_evidence(engine, evidence, varargin) wolffd@0: % ENTER_EVIDENCE Add the specified evidence to the network (jtree_unrolled_dbn) wolffd@0: % [engine, loglik] = enter_evidence(engine, evidence, ...) wolffd@0: % wolffd@0: % evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector) wolffd@0: % wolffd@0: % The following optional arguments can be specified in the form of name/value pairs: wolffd@0: % [default value in brackets] wolffd@0: % wolffd@0: % maximize - if 1, does max-product instead of sum-product [0] wolffd@0: % filter - if 1, does filtering (not supported), else smoothing [0] wolffd@0: % wolffd@0: % e.g., engine = enter_evidence(engine, ev, 'maximize', 1) wolffd@0: wolffd@0: maximize = 0; wolffd@0: filter = 0; wolffd@0: wolffd@0: % parse optional params wolffd@0: args = varargin; wolffd@0: nargs = length(args); wolffd@0: if nargs > 0 wolffd@0: for i=1:2:nargs wolffd@0: switch args{i}, wolffd@0: case 'maximize', maximize = args{i+1}; wolffd@0: case 'filter', filter = args{i+1}; wolffd@0: otherwise, wolffd@0: error(['invalid argument name ' args{i}]); wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: if filter wolffd@0: error('jtree_unrolled_dbn does not support filtering') wolffd@0: end wolffd@0: wolffd@0: if size(evidence,2) ~= engine.nslices wolffd@0: error(['engine was created assuming there are ' num2str(engine.nslices) ... wolffd@0: ' slices, but evidence has ' num2str(size(evidence,2))]) wolffd@0: end wolffd@0: wolffd@0: [engine.unrolled_engine, loglik] = enter_evidence(engine.unrolled_engine, evidence, 'maximize', maximize); wolffd@0: wolffd@0: