% diffsum2.m
% compute differential sum along a given dimension
x = cat(3,hankel([3 1 6 -1]),pascal(4)) % data to test
dim = 3 % dimension to work along
xsiz = size(x);
n = xsiz(dim); % size along desired dim
xdim = ndims(x); % # of dimensions
perm = [dim:xdim 1:dim-1] % put dim first
x = permute(x,perm) % permute so dim is row dimension
x = reshape(x,n,[]) % reshape into a 2D array
y = x(1:n-1,:)+x(2:n,:) % Differential sum along row dimension
xsiz(dim) = n-1 % new size of dim dimension
y = reshape(y,xsiz(perm)) % put result back in original form
y = ipermute(y,perm) % inverse permute dimensions