wolffd@0: function engine = gaussian_inf_engine(bnet) wolffd@0: % GAUSSIAN_INF_ENGINE Computes the joint multivariate Gaussian corresponding to the bnet wolffd@0: % engine = gaussian_inf_engine(bnet) wolffd@0: % wolffd@0: % For details on how to compute the joint Gaussian from the bnet, see wolffd@0: % - "Gaussian Influence Diagrams", R. Shachter and C. R. Kenley, Management Science, 35(5):527--550, 1989. wolffd@0: % Once we have the Gaussian, we can apply the standard formulas for conditioning and marginalization. wolffd@0: wolffd@0: assert(isequal(bnet.cnodes, 1:length(bnet.dag))); wolffd@0: wolffd@0: [W, D, mu] = extract_params_from_gbn(bnet); wolffd@0: U = inv(eye(size(W)) - W')'; wolffd@0: Sigma = U' * D * U; wolffd@0: wolffd@0: engine.mu = mu; wolffd@0: engine.Sigma = Sigma; wolffd@0: %engine.logp = log(normal_coef(Sigma)); wolffd@0: wolffd@0: % This is where we will store the results between enter_evidence and marginal_nodes wolffd@0: engine.Hmu = []; wolffd@0: engine.HSigma = []; wolffd@0: engine.hnodes = []; wolffd@0: wolffd@0: engine = class(engine, 'gaussian_inf_engine', inf_engine(bnet)); wolffd@0: