about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/BNT/general/unroll_higher_order_topology.m
blob: 29e78ef2051d5d816ef2bec42a089ecd4161a4cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function M = unroll_higher_order_topology(intra, inter, T, intra1)
% UNROLL_DBN_TOPOLOGY Make the block diagonal adjacency matrix for a DBN consisting of T slices
% M = unroll_dbn_topology(intra, inter, T, intra1)
%
% intra is the connectivity within a slice, inter between two slices.
% M will have intra along the diagonal, and inter one above the diagonal.
% intra1 is an optional argumnet, in case the intra is different for the first slice.

if nargin < 4 
    intra1 = intra; 
end;


ss = length(intra); % slice size
M = sparse(ss*T, ss*T);
[rows,columns,order] = size(inter);
for t1 = 1:T
  b = 1 + (t1 - 1)*ss : t1*ss;
  if t1 == 1
      M(b,b) = intra1;
  else
      M(b,b) = intra;
  end
  for t2 = 1:order
    if t1 + t2 <= T
      M(b,b+t2*ss) = inter(:,:,t2);
    end
  end
end