% clusters.m % function cb = clusters(input,ref,maxIt) % clusters(randn(2,400)/sqrt(12),randn(2,1)/sqrt(12)); % 17.01.2003, Jens Ahrensfeld function cb = clusters(input,ref,maxIt) eps = 0.4; epse = 0.001; [nDim, nData] = size(input); [nDimr, nDatar] = size(ref); if (nDim ~= nDimr), error('Dimensions must match!'); end; d = zeros(nDatar,1); for i=1:maxIt, n = round(rand(1,1)*(nData-1))+1; % Randomly pick input vector for k=1:nDatar, d(k) = sqrt(sum((input(:,n)-ref(:,k)).^2)); % Calc distances between references and input end; [min, winidx] = min(d); % Calc best reference vector - the winner winner = ref(:,winidx); epsi = eps*(1-i/maxIt)+epse; ref(:,winidx) = winner + epsi*(input(:,n)-winner); % Move winner towards input end; cb = ref;