wolffd@0: function [muXY, SigmaXY] = condGaussToJoint(muX, SigmaX, muY, SigmaY, WYgivenX) wolffd@0: wolffd@0: % Compute P(X,Y) from P(X) * P(Y|X) where P(X)=N(X;muX,SigmaX) wolffd@0: % and P(Y|X) = N(Y; WX + muY, SigmaY) wolffd@0: wolffd@0: % For details on how to compute a Gaussian from a Bayes net wolffd@0: % - "Gaussian Influence Diagrams", R. Shachter and C. R. Kenley, Management Science, 35(5):527--550, 1989. wolffd@0: wolffd@0: % size(W) = dy x dx wolffd@0: dx = length(muX); wolffd@0: dy = length(muY); wolffd@0: muXY = [muX(:); WYgivenX*muX(:) + muY]; wolffd@0: wolffd@0: W = [zeros(dx,dx) WYgivenX'; wolffd@0: zeros(dy,dx) zeros(dy,dy)]; wolffd@0: D = [SigmaX zeros(dx,dy); wolffd@0: zeros(dy,dx) SigmaY]; wolffd@0: wolffd@0: U = inv(eye(size(W)) - W')'; wolffd@0: SigmaXY = U' * D * U; wolffd@0: wolffd@0: