12 lines
432 B
Matlab
Executable File
12 lines
432 B
Matlab
Executable File
function lnZ = betheEnergy(A, nodePot, edgePot, nodeBel, edgeBel)
|
|
% Compute Bethe free energy
|
|
% TBD: deal with log(0) for entropy
|
|
edgePot = reshape(edgePot,[],size(edgePot,3));
|
|
edgeBel = reshape(edgeBel,[],size(edgeBel,3));
|
|
Ex = dot(nodeBel,nodePot,1);
|
|
Exy = dot(edgeBel,edgePot,1);
|
|
Hx = -dot(nodeBel,log(nodeBel),1);
|
|
Hxy = -dot(edgeBel,log(edgeBel),1);
|
|
d = full(sum(logical(A),1));
|
|
lnZ = -sum(Ex)-sum(Exy)-sum((d-1).*Hx)+sum(Hxy);
|