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