wolffd@0: function clqs = compute_minimal_interface(intra, inter) wolffd@0: wolffd@0: int = compute_fwd_interface(intra, inter); wolffd@0: ss = length(intra); wolffd@0: Z = zeros(ss); wolffd@0: dag = [intra inter; wolffd@0: Z intra]; wolffd@0: G = moralize(dag); wolffd@0: intra2 = G(1:ss,1:ss); wolffd@0: inter2 = G(1:ss,(1:ss)+ss); wolffd@0: G = unroll_dbn_topology(intra2, inter2, ss); wolffd@0: T = ss; wolffd@0: last_slice = (1:ss) + (T-1)*ss; wolffd@0: G = (G + G')/2; % mk symmetric wolffd@0: G2 = (expm(full(G)) > 0); % closure of graph wolffd@0: G3 = G2(last_slice, last_slice); wolffd@0: [c,v] = scc(G3); % connected components wolffd@0: ncomp = size(v,1); wolffd@0: clqs = cell(1,ncomp); wolffd@0: for i=1:ncomp wolffd@0: ndx = find(v(i,:)>0); wolffd@0: clqs{i} = v(i,ndx); wolffd@0: clqs{i} = myintersect(clqs{i}, int); wolffd@0: end wolffd@0: