function [n2, n] = dist2_radians(x, c) %DIST2_RADIANS Calculates squared distance between two sets of points. % % We had to modify DIST2 a bit to cope with the circular nature of % angular space % % Description % D = DIST2_RADIANS(X, C) takes two matrices of vectors and calculates the % squared Euclidean distance between them. Both matrices must be of % dimension 1. If X has M rows and 1 column, and C has % L rows and 1 column, then the result has M rows and L columns. The % I, Jth entry is the squared distance from the Ith row of X to the % Jth row of C. % % See also % GMMACTIV, KMEANS, RBFFWD % % Copyright (c) Ian T Nabney (1996-2001) siz = size(x); if sum( siz > 1 ) > 1 error('"x" dimension must be one' ); end x = x(:); ndata = length( x ); siz = size(c); if sum( siz > 1 ) > 1 error('"c" dimension must be one' ); end c = c(:); ncentres = length( c ); n = repmat( NaN, ndata, ncentres ); n2 = repmat( NaN, ndata, ncentres ); for ic = 1:ncentres % Centre data around this centre n( :, ic ) = - pi + mod( x - c( ic ) + pi, 2 * pi ); end n2 = n .^ 2; % Rounding errors occasionally cause negative entries in n2 if any(any(n2<0)) n2(n2<0) = 0; end