function [KindData,KindNum]=Clustering(Center,Data)
[DataRow,DataColumn]=size(Data);
[CenterRow,CenterColumn]=size(Center);
KindData=zeros(DataRow,DataColumn,CenterColumn);
KindNum=linspace(0,0,CenterColumn);
for i=1:DataColumn
Distance=linspace(0,0,CenterColumn);
for j=1:CenterColumn
for k=1:DataRow
Distance(j)=Distance(j)+(Data(k,i)-Center(k,j)).^2;
end
end
Distance=sqrt(Distance);
[X,Y]=min(Distance);
KindData(:,KindNum(Y)+1,Y)=Data(:,i);
KindNum(Y)=KindNum(Y)+1;
end
function NewCenter=CaculateCenter(KindData,KindNum,DataRow)
TotalKindNum=length(KindNum);
NewCenter=zeros(DataRow,TotalKindNum);
for i=1:TotalKindNum
Temp=KindData(:,1:KindNum(i),i);
NewCenter(:,i)=sum(Temp')'/KindNum(i);
end
function KindDisplay(KindData,KindNum)
[DataRow,DataColumn]=size(Data);
if DataRow~=2
function KindDisplay(KindData,KindNum,XMin,XMax,YMin,YMax)
figure
TotalKindNum=length(KindNum);
for i=1:TotalKindNum
Temp=KindData(:,1:KindNum(i),i);
plot(Temp(1,:),Temp(2,:),'*')
axis([XMin,XMax,YMin,YMax])
hold on
pause
end
clear all;
close all;
Data=[0 0 1 1 1 2 2 3 6 6 7 7 7 8 8 8 8 9 9 9
0 1 0 1 2 1 2 2 6 7 6 7 8 6 7 8 9 7 8 9;];
[DataRow,DataColumn]=size(Data);
Step=10;
NumKind=2;
Center=Data(:,1:NumKind);
[KindData,KindNum]=Clustering(Center,Data);
NewCenter=CaculateCenter(KindData,KindNum,DataRow);
while (sum(sum(NewCenter~=Center))) & Step
Center=NewCenter;
[KindData,KindNum]=Clustering(Center,Data);
NewCenter=CaculateCenter(KindData,KindNum,DataRow);
Step=Step-1;
end
for i=1:NumKind
KindData(:,1:KindNum(i),i)
end
if DataRow~=2
disp('The result can not display on the two-dimensional figure ')
else
XMin=min(Data(1,:));
YMin=min(Data(2,:));
YMax=max(Data(2,:));
XMax=max(Data(1,:));
KindDisplay(KindData,KindNum,XMin,XMax,YMin,YMax)
End
程序调用怎么就不能运行啊!!求高手指点 谢谢
[本帖最后由 vincent92 于 2009-3-26 00:17 编辑]