wolffd@0: function mom = cpot_to_mpot(can) wolffd@0: % CPOT_TO_MPOT Convert a canonical potential to moment form. wolffd@0: % mom = cpot_to_mpot(can) wolffd@0: wolffd@0: [logp, mu, Sigma] = canonical_to_moment(can.g, can.h, can.K); wolffd@0: mom = mpot(can.domain, can.sizes, logp, mu, Sigma); wolffd@0: wolffd@0: %%%%%%% wolffd@0: wolffd@0: function [logp, mu, Sigma] = canonical_to_moment(g, h, K) wolffd@0: % CANONICAL_TO_MOMENT Convert canonical characteristics to moment form. wolffd@0: % [logp, mu, Sigma] = canonical_to_moment(g, h, K) wolffd@0: wolffd@0: n = length(K); wolffd@0: if isempty(K) wolffd@0: logp = g - 0.5*(log(det(K)) - n*log(2*pi)); wolffd@0: Sigma = []; wolffd@0: mu = []; wolffd@0: else wolffd@0: if det(K)==0 wolffd@0: Sigma = inf*ones(n,n); wolffd@0: mu = zeros(n,1); % if the precision is zero, the mean is arbitrary wolffd@0: logp = g; % the scaling factor for the uniform distribution is 1 wolffd@0: else wolffd@0: Sigma = inv(K); wolffd@0: mu = Sigma*h; wolffd@0: logp = g - 0.5*(log(det(K)) - n*log(2*pi) - mu'*K*mu); wolffd@0: end wolffd@0: end