文档详情

模糊数学在聚类分析中的作用(matlab代码).doc

发布:2015-09-12约7.76千字共7页下载文档
文本预览下载声明
function [M,N] = Example8_11 X=[1.8 2.1 3.2 2.2 2.5 2.8 1.9 2.0; 95 99 101 103 98 102 120 130; 0.15 0.21 0.18 0.17 0.16 0.20 0.09 0.11]; X=X %X=[80 10 6 2; %50 1 6 4; %90 6 4 6; %40 5 7 3; %10 1 2 4] [M,N]=fuzzy_jlfx(4,5,X); end %% function [M,N]=fuzzy_jlfx(bzh,fa,X)%得到聚类结果 [X]=F_JlSjBzh(bzh,X);%数据标准化 [R]=F_JlR(fa,X);%建立相似矩阵 [A]=fuzzy_cdbb(R);%得到传递闭包矩阵 [Alamd]=fuzzy_lamdjjz(A);%得到lamdf截矩阵从而得到聚类结果 [M,N]=F_JlDtjl(R);%动态聚类并画出聚类图 %% function [M,N]=F_JlDtjl(R) %clc; [A]=fuzzy_cdbb(R); U=unique(A); L=length(U); M=1:L; for i=L-1:-1:1 [m,n]=find(A==U(i)); N{i,1}=n; N{i,2}=m; A(m(1),:)=0; mm=unique(m); N{i,3}=mm; len=length(find(m==mm(1))); depth=length(find(m==mm(2))); index1=find(M==mm(1)); MM=[M(1:index1-1),M(index1+depth:L)]; % index2=find(MM==mm(2)); M=M(index1:index1+depth-1); M=[MM(1:index2-1),M,MM(index2:end)]; end M=[1:L;M;ones(1,L)]; h=(max(U)-min(U))/L; figure text(L,1,sprintf(%d,M(2,L))); text(L+1,1-h,sprintf(%d,L)); text(0,1,sprintf(%3.2f,1)); text(0,(1+min(U))/2,sprintf(%3.2f,(1+min(U))/2)); text(0,min(U),sprintf(%3.2f,min(U))); hold on for i=L-1:-1:1 m=N{i,2}; n=N{i,1}; mm=N{i,3}; k=find(M(2,:)==mm(1)); l=find(M(2,:)==mm(2)); x1=M(1,k); y1=M(3,k); x2=M(1,l); y2=M(3,l); x=[x1,x1,x2,x2]; M(3,[k,l])=U(i); M(1,[k,l])=sum(M(1,[k,l]))/length(M(1,[k,l])); y=[y1,U(i),U(i),y2]; plot(x,y); text(i,1,sprintf(%d,M(2,i))); text(M(1,k(1)),U(i)+h*0.1,sprintf(%3.2f,U(i))); text(L+1,1-i*h-h,sprintf(%d,L-i)); end axis([0 L+1 min(U) max(U)]) axis off hold off end end %% function[X]=F_JlSjBzh(cs,X)%定义函数 %模糊聚类分析数据标准化变换: [X]=F_JlSjBzh(cs,X) %X,数据矩阵 %cs=0,不变换;cs=1,标准差变换;cs=2,极差变换;cs=其它,最大值规格化 if(cs==0)return;end [n,m]=size(X);%获得矩阵的行列数 if(cs==1)%平移?标准差变换 for(k=1:m)xk=0; for(i=1:n)xk=xk+X(i,k);end xk=xk/n;sk=0; for(i=1:n)sk=sk+(X(i,k)-xk)^2;end sk=sqrt(sk/n); for(i=1:n)X(i,k)=(X(i,k)-xk)/sk;end
显示全部
相似文档