通过评价函数来测距离

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-12-08 10:23:13 +08:00
parent 86fd99706a
commit 91ece41bae
2 changed files with 19 additions and 10 deletions

25
main.m
View File

@ -5,15 +5,15 @@ tic
%ÏÈÐγɳõʼµã %ÏÈÐγɳõʼµã
center=[1,1,1,1,1;10,10,10,10,10;100,100,100,100,100;1000,1000,1000,1000,1000]; center=[1,1,1,1,1;10,10,10,10,10;100,100,100,100,100;1000,1000,1000,1000,1000];
% center=[1;10;100;1000]; % center=[1;10;100;1000];
dataN=50000;% dataN=100;%
Dim=5; Dim=5;
clusterN=100; clusterN=10;
data=zeros(Dim,dataN); % data=zeros(Dim,dataN);
% data=[11,101,1001,1,2,3]; % % data=[11,101,1001,1,2,3];
for I=1:dataN % for I=1:dataN
i=round(1+(4-1)*rand()); % i=round(1+(4-1)*rand());
data(:,I)=center(i)*( -1+(1+1)*rand(Dim,1)); % data(:,I)=center(i)*( -1+(1+1)*rand(Dim,1));
end % end
data=rand(Dim,dataN); data=rand(Dim,dataN);
@ -42,11 +42,13 @@ for clusterI=1:clusterN-1
% continue % continue
% end % end
distance=sum((d-data(:,SetS(D))).^2).^.5; distance=sum((d-data(:,SetS(D))).^2).^.5;
% distance=metricFun( d,data(:,SetS(D)) );
if distance<minD if distance<minD
minD=distance; minD=distance;
end end
end end
distanceIJ=sum((d-data(:,cddtI)).^2).^.5; distanceIJ=sum((d-data(:,cddtI)).^2).^.5;
% distanceIJ=metricFun( d,data(:,cddtI) );
Cij=Cij+max([minD-distanceIJ,0]); Cij=Cij+max([minD-distanceIJ,0]);
end end
maxG(cluster)=Cij; maxG(cluster)=Cij;
@ -80,6 +82,7 @@ while 1
min2D=minD; min2D=minD;
for G=1:length(SetS)%between j and the closest object in S. for G=1:length(SetS)%between j and the closest object in S.
distance=sum((d-data(:,SetS(G))).^2).^.5; distance=sum((d-data(:,SetS(G))).^2).^.5;
% distance=metricFun( d,data(:,SetS(G)) );
if distance<minD if distance<minD
minD=distance; minD=distance;
else else
@ -89,8 +92,10 @@ while 1
end end
end end
distanceIJ=sum((d-data(:,cadUSetS(H))).^2).^.5;%S(I)U(H) % distanceIJ=sum((d-data(:,cadUSetS(H))).^2).^.5;%S(I)U(H)
distanceHJ=sum((d-data(:,cadSetS(I))).^2).^.5; distanceIJ=metricFun( d,data(:,cadUSetS(H)) );
% distanceHJ=sum((d-data(:,cadSetS(I))).^2).^.5;
distanceHJ=metricFun( d,data(:,cadSetS(I)) );
if distanceIJ>minD if distanceIJ>minD
Kjih=min([distanceHJ-minD,0]); Kjih=min([distanceHJ-minD,0]);
end end

4
metricFun.m Normal file
View File

@ -0,0 +1,4 @@
function [ output_args ] = metricFun( a,b )
output_args=sum((a-b).^2).^.5;
end