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