function F_jidtjl(R) %运行函数可以得到动态聚类图
%定义函数 %模糊聚类分析动态聚类,R 模糊相似矩阵
[m,n]=size(R);%获得矩阵的行列数
if(m~=n|m==0)
return ;
end
for(i=1:n)
R(i,i)=1;%修正错误
for(j=i+1:n)
if(R(i,j)<0) R(i,j)=0;
elseif(R(i,j)>1)
R(i,j)=1;
end
R(i,j)=round(100*R(i,j))/100;%保留四位小数%sjg4->2
R(j,i)=R(i,j);
end
end
js0=0;
while(1)%求传递闭包
R1=Max_Min(R,R);%【Max_Min.m文件】
js0=js0+1;
if(R1==R)
break;
else
R=R1;
end
end
Imd(1)=1;k=1;
for(i=1:n)
for(j=i+1:n)
pd=1;%找出所有不相同的元素
for(x=1:k)
if(R(i,j)==Imd(x))
pd=0;
break;
end
end
if(pd)
k=k+1;
Imd(k)=R(i,j);
end
end
end
for(i=1:k-1)
for(j=i+1:k)
if(Imd(i)<Imd(j))%从大到小排序
x=Imd(j);
Imd(j)=Imd(i);
Imd(i)=x;
end
end
end
for(x=1:k) %按Imd(x)分类,分类数为flsz(x),临时用Sz记录元素序号
js=0;flsz(x)=0;
for(i=1:n)
pd=1;
for(y=1:js)
if(Sz(y)==i)
pd=0;
break;
end
end
if(pd)
for(j=1:n)
if(R(i,j)>=Imd(x))
js=js+1;
Sz(js)=j;
end
end
flsz(x)=flsz(x)+1;
end
end
end
for(i=1:k-1)
for(j=i+1:k)
if(flsz(j)==flsz(i))
flsz(j)=0;
end
end
end
fl=0;%排除相同的分类
for(i=1:k)
if(flsz(i))
fl=fl+1;
Imd(fl)=Imd(i);
end
end
for(i=1:n)
xhsz(i)=i;
end
for(x=1:fl)%获得分类情况:对元素分类进行排序
js=0;flsz(x)=0;
for(i=1:n) pd=1;
for(y=1:js)
if(Sz(y)==i)
pd=0;
break;
end
end
if(pd)
if(js==0)
y=0;
end
for(j=1:n)
if(R(i,j)>=Imd(x))
js=js+1;
Sz(js)=j;
end
end
flsz(x)=flsz(x)+1;
Sz0(flsz(x))=js-y;
end
end
js0=0;
for(i=1:flsz(x))
for(j=1:Sz0(i))
Sz1(j)=Sz(js0+j);
end
for(j=1:n)
for(y=1:Sz0(i))
if(xhsz(j)==Sz1(y))
js0=js0+1;
Sz(js0)=xhsz(j);
end
end
end
end
for(i=1:n)
xhsz(i)=Sz(i);
end
end
for(x=1:fl)%获得分类情况:每一子类的元素个数
js=0;flsz(x)=0;
for(i=1:n) pd=1;
for(y=1:js)
if(Sz(y)==i)
pd=0;
break;
end
end
if(pd)
if(js==0)
y=0;
end
for(j=1:n)
if(R(i,j)>=Imd(x))
js=js+1;
Sz(js)=j;
end
end
flsz(x)=flsz(x)+1;Sz0(flsz(x))=js-y;
end
end
js0=1;
for(i=1:flsz(x)) y=1;
for(j=1:flsz(x))
if(Sz(y)==xhsz(js0))
flqksz(x,i)=Sz0(j);js0=js0+Sz0(j);
break;
end
y=y+Sz0(j);
end
end
end
F_dtjltx=figure('name','动态聚类图','color','w');
axis('off');
Kd=30;Gd=40;y=fl*Gd+Gd;lx=80;
text(24,y+Gd/2,'λ');
for(i=1:n)
text(lx-5+i*Kd-0.4*Kd*(xhsz(i)>9),y+Gd/2,int2str(xhsz(i)));
line([lx+i*Kd,lx+i*Kd],[y,y-Gd]);
linesz(i)=lx+i*Kd;
end
text(lx*1.5+i*Kd,y+Gd/2,'分类数');
y=y-Gd;
for(x=1:fl)
text(8,y-Gd/2,num2str(Imd(x)));
js0=1;js1=0;
if(x==1)
for(i=1:flsz(x))
js1=flqksz(x,i)-1;
if(js1)
line([linesz(js0),linesz(js0+js1)],[y,y]);
end
line([(linesz(js0+js1)+linesz(js0))/2,(linesz(js0+js1)+linesz(js0))/2],[y,y-Gd]);
linesz(i)=(linesz(js0+js1)+linesz(js0))/2;
js0=js0+js1+1;
end
else for(i=1:flsz(x))
js1=js1+flqksz(x,i);
js2=0;pd=0;
for(j=1:flsz(x-1))
js2=js2+flqksz(x-1,j);
if(js2==js1)
pd=1;
break;
end
end
if(j~=js0)
line([linesz(js0),linesz(j)],[y,y]);
end
line([(linesz(js0)+linesz(j))/2,(linesz(js0)+linesz(j))/2],[y,y-Gd]);
linesz(i)=(linesz(js0)+linesz(j))/2;
js0=j+1;
end
end
text(2*lx+n*Kd,y-Gd/3,int2str(flsz(x)));
y=y-Gd;
end
评论0