function[R]=F_JlR(cs,X)
%模糊聚类分析建立模糊相似矩阵
%X,数据矩阵
%cs=1,数量积法
%cs=2,夹角余弦法
%cs=3,相关系数法
%cs=4,指数相似系数法
%cs=5,最大最小法
%cs=6,算术平均最小法
%cs=7,几何平均最小法
%cs=8,一般欧式距离法
%cs=9,一般海明距离法
%cs=10,一般切比雪夫距离法
%cs=11,倒数欧式距离法
%cs=12,倒数海明距离法
%cs=13,倒数切比雪夫距离法
%cs=14,指数欧式距离法
%cs=15,指数海明距离法
%cs=16,指数切比雪夫距离法
[n,m]=size(X);%获得矩阵的行列数
R=[];
if(cs==1)maxM=0;pd=0;%数量积法
for(i=1:n)for(j=1:n)if(j~=i)x=0;
for(k=1:m)x=x+X(i,k)*X(j,k);end
if(maxM<x)maxM=x;end
end;end;end
if(maxM<0.000001)return;end
maxM=maxM+1;
for(i=1:n)for(j=1:n)
if(i==j)R(i,j)=1;
else R(i,j)=0;
for(k=1:m)R(i,j)=R(i,j)+X(i,k)*X(j,k);end
R(i,j)=R(i,j)/maxM;
if(R(i,j)<0)pd=1;end
end
end;end
if(pd)for(i=1:n)for(j=1:n)R(i,j)=(R(i,j)+1)/2;end;end;end
elseif(cs==2)%夹角余弦法
for(i=1:n)for(j=1:n)xi=0;xj=0;
for(k=1:m)xi=xi+X(i,k)^2;xj=xj+X(j,k)^2;end
s=sqrt(xi*xj);R(i,j)=0;
for(k=1:m)R(i,j)=R(i,j)+X(i,k)*X(j,k);end
R(i,j)=R(i,j)/s;
end;end
elseif(cs==3)%相关系数法
for(i=1:n)for(j=1:n)xi=0;xj=0;
for(k=1:m)xi=xi+X(i,k);xj=xj+X(j,k);end
xi=xi/m;xj=xj/m;xis=0;xjs=0;
for(k=1:m)xis=xis+(X(i,k)-xi)^2;xjs=xjs+(X(j,k)-xj)^2;end
s=sqrt(xis*xjs);R(i,j)=0;
for(k=1:m)R(i,j)=R(i,j)+abs((X(i,k)-xi)*(X(j,k)-xj));end
R(i,j)=R(i,j)/s;
end;end
elseif(cs==4)%指数相似系数法
for(i=1:n)for(j=1:n)R(i,j)=0;
for(k=1:m)xk=0;
for(z=1:n)xk=xk+X(z,k);end
xk=xk/n;sk=0;
for(z=1:n)sk=sk+(X(z,k)-xk)^2;end
sk=sk/n;R(i,j)=R(i,j)+exp(-0.75*((X(i,k)-X(j,k))/sk)^2);
end
R(i,j)=R(i,j)/m;
end;end
elseif(cs<=7)%最大最小法 算术平均最小法 几何平均最小法
for(i=1:n)for(j=1:n)fz=0;fm=0;
for(k=1:m)
if(X(j,k)<0)R=[];return;end
if(X(j,k)>X(i,k))x=X(i,k);
else x=X(j,k);end
fz=fz+x;
end
if(cs==5)%最大最小法
for(k=1:m)if(X(i,k)>X(j,k))x=X(i,k);else x=X(j,k);end;end
fm=fm+x;
elseif(cs==6)for(k=1:m)fm=fm+(X(i,k)+X(j,k))/2;end%算术平均最小法
else for(k=1:m)fm=fm+sqrt(X(i,k)*X(j,k));end;end%几何平均最小法
R(i,j)=fz/fm;
end;end
elseif(cs<=10)C=0;%一般距离法
for(i=1:n)for(j=i+1:n)d=0;
if(cs==8)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);%欧式距离
elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end%海明距离
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end%切比雪夫距离
if(C<d)C=d;end
end;end
C=1/(1+C);
for(i=1:n)for(j=1:n)d=0;
if(cs==8)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);%欧式距离
elseif(cs==9)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end%海明距离
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end%切比雪夫距离
R(i,j)=1-C*d;
end;end
elseif(cs<=13)minM=Inf;%倒数距离法
for(i=1:n)for(j=i+1:n)d=0;
if(cs==11)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);%欧式距离
elseif(cs==12)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end%海明距离
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end%切比雪夫距离
if(minM>d)minM=d;end
end;end
minM=0.9999*minM;
if(minM<0.000001)return;end
for(i=1:n)for(j=1:n)d=0;
if(j==i)R(i,j)=1;continue;end
if(cs==11)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);%欧式距离
elseif(cs==12)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end%海明距离
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end%切比雪夫距离
R(i,j)=minM/d;
end;end
else for(i=1:n)for(j=1:n)d=0;%指数距离法
if(cs==14)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);%欧式距离
elseif(cs==15)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end%海明距离
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end%切比雪夫距离
R(i,j)=exp(-d);
end;end;end