Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何识别簇头_Matlab - Fatal编程技术网

Matlab 如何识别簇头

Matlab 如何识别簇头,matlab,Matlab,可能重复: 你好,我是mat实验室的新手。我正在实现AP聚类算法。我必须识别簇头并用不同的符号表示它 n=50; for i=1:n X(i,1)=rand()*500; X(i,2)=rand()*500; end for i=1:n plotcircle(X(i,1),X(i,2),3,'r'); end x=X(:,1); y=X(:,2); for i=1:n for j=i:n

可能重复:

你好,我是mat实验室的新手。我正在实现AP聚类算法。我必须识别簇头并用不同的符号表示它

    n=50;

    for i=1:n

    X(i,1)=rand()*500;
    X(i,2)=rand()*500;
    end

    for i=1:n
    plotcircle(X(i,1),X(i,2),3,'r');
    end
    x=X(:,1);
    y=X(:,2);
    for i=1:n
    for j=i:n
      distance(i,j)=(sqrt((X(i,1)-X(j,1))^2 +(X(i,2)-X(j,2))^2 ));
    distance(j,i)=distance(i,j);
    end
    end



    Availability=zeros(n,n); 
    Responsibility=zeros(n,n); 
    distance=distance+1e-2*randn(n,n)*(max(distance(:))-min(distance(:))); 
    factor=0.5; 
    for iter=1:100

     PrevResp=Responsibility;
     AvailabilityS=Availability+distance; 
     [X1,I]=max(AvailabilityS,[],2);
     for i=1:n 
     AvailabilityS(i,I(i))=-1000; 
     end;
     [Y2,I2]=max(AvailabilityS,[],2);
     Responsibility=distance-repmat(X1,[1,n]);
     for i=1:n 
     Responsibility(i,I(i))=distance(i,I(i))-Y2(i); 
     end;
     Responsibility=(1-factor)*Responsibility+factor*PrevResp; 

     Aold=Availability;
     Rp=max(Responsibility,0);
     for k=1:n 
     Rp(k,k)=Responsibility(k,k); 
     end;
     Availability=repmat(sum(Rp,1),[n,1])-Rp;
     dA=diag(Availability);
     Availability=min(Availability,0);
     for k=1:n 
     Availability(k,k)=dA(k); 
     end;
     Availability=(1-factor)*Availability+factor*Aold; 
     end;

     E=Responsibility+Availability 
     I=find(diag(E)>0)  % Number of Cluster head
     K=length(I);%   Number of clusters
     fprintf('Number_of_clusters:''%d',length(I))
     [tmp c]=max(distance(:,I),[],2);
     c(I)=1:K ;              
     idx=I(c)

     for k=1:K
     ii=find(c==k)%  group data points to k clusters
     end;

     selected=X(I,:);%  ERROR-----------select cluster head  but always at boundaries
     plot(x(I),y(I),'b*');
第一个错误---在边界处绘制簇头 第二个问题是,我们必须用不同的颜色绘制ii簇


请帮我。。。plz plz

如果将其放入matlab中,将得到不同颜色的簇:

n=50;
X = 500*rand([n,2]);


% Computing the euclidean distance between each pair of 50 points
distance = zeros(n); %[50 x 50] matrix

for i=1:n
    for j=i:n
        distance(i,j)=(sqrt((X(i,1)-X(j,1))^2 +(X(i,2)-X(j,2))^2 ));
        distance(j,i)=distance(i,j);
    end
end



Availability=zeros(n,n);
Responsibility=zeros(n,n);
distance=distance+1e-2*randn(n,n)*(max(distance(:))-min(distance(:)));
factor=0.5;
for iter=1:100

    PrevResp=Responsibility;
    AvailabilityS=Availability+distance;
    [X1,I]=max(AvailabilityS,[],2);
    for i=1:n
        AvailabilityS(i,I(i))=-1000;
    end;
    [Y2,I2]=max(AvailabilityS,[],2);
    Responsibility=distance-repmat(X1,[1,n]);
    for i=1:n
        Responsibility(i,I(i))=distance(i,I(i))-Y2(i);
    end
    Responsibility=(1-factor)*Responsibility+factor*PrevResp;

    Aold=Availability;
    Rp=max(Responsibility,0);
    for k=1:n
        Rp(k,k)=Responsibility(k,k);
    end;
    Availability=repmat(sum(Rp,1),[n,1])-Rp;
    dA=diag(Availability);
    Availability=min(Availability,0);
    for k=1:n
        Availability(k,k)=dA(k);
    end
    Availability=(1-factor)*Availability+factor*Aold;
end

E=Responsibility+Availability
I=find(diag(E)>0)  % Number of Cluster head
K=length(I);%   Number of clusters
fprintf('Number_of_clusters:''%d',length(I))


C = zeros(n,1);
for j = 1:n,
   d = zeros(length(I),1);
   for i = 1:length(I),
       d(i) = distance(j, I(i))
   end

   [mval,midx] = min(d)
   C(j) = midx;
end

symbs= {'r+','g.','bv','m*'};
hold on
for i = 1: length(I),
    plot(X(C==i,1),X(C==i,2),symbs{i})
    plot(X(I(i),1),X(I(i),2),symbs{i},'MarkerSize',20)
end

请花一点时间进行调试,并将代码缩小到问题范围,以增加回答问题的机会。很少有人愿意深入研究所有这些。与这个问题非常相关的是,请让我在评论中这样说——这个问题应该已经结束了。这是你昨天问的一个问题的翻版。这不是一个普遍感兴趣的问题。是的,这是同一个问题……非常感谢您的帮助。在这里,我们无法以不同的形状和颜色表示簇头。只有簇点是不同的,簇头不是shown@user1416605在最后一个for循环中添加了plotXIi,1,XIi,2,symbs{i},'MarkerSize',20。它现在以更大的标记大小绘制I中的簇头。如果你想把它们换成不同的形状和颜色,那么以上面的代码为例,改变标记头的符号,它将变成不同的颜色/形状。我们如何将其应用于航空交通