function TTENS = treetensor(T,A,ii,jj) % the probability transition tensor % from nodes ii to nodes jj % following my tradition, this will be a 2-d % column-normalized matrix global m n kk = intersect(ii,jj); % handling overlap ii = setdiff(ii,kk); jj = setdiff(jj,kk); TTENS.ii = ii; TTENS.jj = union(jj,kk); lii = length(ii); ljj = length(jj); lkk = length(kk); TTENS.A = zeros(m^(lkk+ljj),m^(lkk+lii)); Dii = repmat([m],[1 lii]); Djj = repmat([m],[1 ljj]); Dkk = repmat([m],[1 lkk]); for xi=1:prod(Dii) x = ind2coord(xi,Dii); for yi=1:prod(Djj) y = ind2coord(yi,Djj); for zi=1:prod(Dkk) z = ind2coord(zi,Dkk); xz = zeros([1, n]); xz(ii) = x; xz(kk) = z; xz = xz(TTENS.ii); xzi = coord2ind(xz,[Dii Dkk]); zy = zeros([1, n]); zy(jj) = y; zy(kk) = z; zy = zy(TTENS.jj); zyi = coord2ind(zy,[Djj Dkk]); p = 1; for vi = 1:length(TTENS.jj) v = TTENS.jj(vi); [u,ui] = parent(T,v,TTENS.ii); p = p * A(u,v,y(vi),x(ui)); end TTENS.A(zyi,xi) = p; end end end return function [u,ui] = parent(T,v,uu) u = find(T(:,v)); ui = find(uu==u); return