模糊聚类与模糊综合评价
来源:互联网 发布:公认人品差的明星知乎 编辑:程序博客网 时间:2024/05/06 10:53
MATLAB实现模糊聚类与模糊综合评价(三个程序,其中许峰教授做的)
----来自安徽理工大学理学院许峰教授的暑期数学建模课件
function Fuzzy_method_all
function Fuzzy_method_all% 本程序通过一个较为复杂的例子演示了如何调用相关子程序实现模糊聚类与模糊综合评价。clear,clc,format short g% 原始数据矩阵.% 人口 GDP 工业 财政收入 财政支出 固定资产 居民储蓄 环境治理A0=[%花色苷酒石酸(g/L)苹果酸(g/L)柠檬酸(g/L)多酚氧化酶活力褐变度DPPH自由基408.028 2.060 18.210 1.830 33.753 1119.853 0.4301 224.367 9.930 4.750 0.770 30.904 762.525 0.4644 157.939 8.080 2.960 1.050 19.303 266.640 0.4090 79.685 3.770 5.230 0.550 15.534 72.905 0.2655 120.606 9.490 3.770 1.440 31.536 143.513 0.3961 46.186 2.830 2.210 036.774 115.943 0.2750 60.767 5.820 7.740 0.540 25.591 433.751 0.1756 241.397 5.710 13.550 2.510 50.434 1305.595 0.4148 240.843 13.230 4.120 1.100 16.869 424.108 0.6658 44.203 2.450 2.300 0.240 10.427 459.569 0.3255 7.787 9.290 8.610 1.900 14.260 91.468 0.2790 32.343 6.080 5.330 1.130 21.080 132.216 0.1973 65.324 4.300 0.830 1.150 28.076 99.881 0.4406 140.257 5.730 4.120 1.630 41.577 991.046 0.3597 52.792 6.230 3.630 2.060 25.743 157.997 0.2189 60.660 9.030 7.280 2.380 13.648 529.969 0.2367 59.424 5.880 5.110 0.880 17.174 129.581 0.3585 40.228 3.60 5.590 0.520 27.077 158.870 0.2256 115.704 5.560 4.270 0.130 30.408 202.962 0.3796 23.523 3.510 0.920 0.440 12.439 89.770 0.2819 89.282 15.510 2.930 2.380 18.123 194.262 0.3793 74.027 6.490 7.730 0.770 21.824 417.665 0.2837 172.626 4.080 5.200 0.390 16.406 427.028 0.5725 144.881 8.360 4.600 1.700 15.066 144.729 0.2830 49.643 2.870 2.480 0.160 14.280 140.946 0.3509 58.469 7.150 1.400 0.820 32.026 82.359 0.3172 34.190 6.230 1.390 1.260 23.035 592.199 0.2649 ]%[l,k]=find(A0==0);%ratio=mean(A0([1:l-1,l+1:end],k)./A0([1:l-1,l+1:end],2));%A0(l,k)=A0(l,2)*ratio;A=[]; % A记录七个人均指标.for i=2:size(A0,2) A=[A A0(:,i)./A0(:,1)];endDynamic_clustering(A,7);B=round(A); % A取整为B,B将写入正文.[m n]=size(A);% 标准化原始数据矩阵 A,标准化矩阵仍记为 A.A=Standard(A);% 将标准化矩阵 A 写入 excel,文件名为 result.xls.you=fopen('result.xls','w');fprintf(you,' \n');fprintf(you,'标准化矩阵\n');geshi1=[]; % 写入excel的书写格式.for i=1:m-1 geshi1=[geshi1 '%f\t'];endgeshi1=[geshi1 '%f\n'];for i = 1:n fprintf(you,geshi1,A(i,:));end;% 第一个问题:模糊聚类R=Fuzzy_similarity_matrix(A,7);% 再应用平方法计算R的传递闭包,仍记闭包为R.R=Transtive_closure(R);% 将传递闭包矩阵R写入resultforbook.xls.fprintf(you,' \n');fprintf(you,'模糊等价矩阵的传递闭包\n');geshi2=[]; % 写入excel的书写格式.for i=1:m-1 geshi2=[geshi2 '%f\t'];endgeshi2=[geshi2 '%f\n'];for i = 1:m fprintf(you,geshi2,R(i,:));end;% 求R的lamda截矩阵,这需要分类水平lamda:lamda=Classification_level(R);% 将分类水平 lamda 写入 result_forbook.xls.fprintf(you,' \n');fprintf(you,'分类水平\n');fprintf(you,geshi2,lamda);for p=1:length(lamda) %显示 lamda(p) 水平上分类情况. M(:,:,p)=R>=lamda(p); [cls nmb]=Computing_cls(M(:,:,p)); disp(' '); %显示一空行是为了方便阅读显示内容. disp(['在分类水平 ',num2str(lamda(p)),'上分为 ',num2str(nmb),'类: ']); cities{1}='1 '; cities{2}='2 '; cities{3}='3 '; cities{4}='4 '; cities{5}='5 '; cities{6}='6 '; cities{7}='7 '; cities{8}='8 '; cities{9}='9 '; cities{10}='10 '; cities{11}='11 '; cities{12}='12'; cities{13}='13 '; cities{14}='14 '; cities{15}='15 '; cities{16}='16 '; cities{17}='17 '; cities{18}='18 '; cities{19}='19 '; cities{20}='20 '; cities{21}='21 '; cities{22}='22 '; cities{23}='23 '; cities{24}='24 '; cities{25}='25 '; cities{26}='26 '; cities{27}='27 '; % cities{28}='成都 '; cities{29}='贵阳 '; cities{30}='昆明 '; cities{31}='西安 '; cities{32}='兰州 '; cities{33}='西宁 '; cities{34}='银川 '; cities{35}='乌鲁木齐 '; for i=1:nmb if length(cls{i})==1 cities{cls{i}}(end)=[]; disp(['"',cities{cls{i}},'"',' 自成一类']); else ct=[]; for t=1:length(cls{i}) ct=[ct cities{cls{i}(t)}]; end ct(end)=[]; disp([' "',ct,'"',' 归为一类']); end end %求水平lamda(p)上的 F 值--F(p). F(p)=F_statistic(M(:,:,p),A);enddisp(' ')[v,ind]=max(F);disp(['在所有分类中分为 ' num2str(ind) ' 类是最合理的.'])% 第二个问题:模糊模式识别.% 计算七个类聚类中心.I=[2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 26 28 29 30 32 34 35];II=[25 27];alpha1=mean(A(I,:)); alpha2=mean(A(II,:));W=[A(1,:);alpha1;A(3,:);A(24,:);alpha2;A(31,:);A(33,:)];% C-待识别的甲乙丙三城市的原始数据.C=[89962 43704 13134 12756 19356 43662 658 37959 11662 8197 8251 12993 26005 857 16642 9037 11071 12112 28451 39037 1302];C=Standard(C);D=dist(C,W'); % C到聚类中心W的欧氏距离.disp(' ');jyb='甲乙丙';for i=1:size(D,1) [val,ind]=min(D(i,:)); disp(['城市' jyb(i) '属于' num2str(ind) '类.'])end% 第三个问题:模糊综合评价.O=[1 1 1 1 1 1 0]; %虚拟的最优对象O.E=dist(A,O'); % 35个城市到最优对象聚O的欧氏距离.[hh ss]=sort(E); % ss记录了35个城市按距离的排序结果.disp(' ');disp('距离法给出35个城市排序为: ');disp( num2str(ss')); function S=Standard(x)% 本子程序功能是通过标定和压缩对原始数据进行标准化。n=size(x,2); mu=mean(x); sig=std(x);for j=1:n R(:,j)=(x(:,j)-mu(j))/sig(j); S(:,j)=(R(:,j)-min(R(:,j)))/(max(R(:,j))-min(R(:,j)));endfunction r=Fuzzy_similarity_matrix(x,method)% 本子程序功能是分别用7种方法建立模糊相似矩阵。[m,n]=size(x);for i=1:m for j=1:m ed(i,j)=sqrt(sum((x(i,:)-x(j,:)).^2)); hd(i,j)=sum(abs(x(i,:)-x(j,:))); endendfor i=1:m for j=1:m K(i,j)=sum(x(i,:).*x(j,:)); endendfor i=1:m K(i,i)=0;endE=max(max(ed)); H=max(max(hd)); M=max(max(K));disp(' ');if method==1 disp('夹角余弦法建立模糊相似矩阵');elseif method==2 disp('相似系数法建立模糊相似矩阵');elseif method==3 disp('欧氏距离法建立模糊相似矩阵');elseif method==4 disp('海明距离法建立模糊相似矩阵');elseif method==5 disp('指数距离法建立模糊相似矩阵');elseif method==6 disp('数量积法建立模糊相似矩阵');elseif method==7 disp('算术平均最小法建立模糊相似矩阵');endfor i=1:m for j=1:m if method==1 r(i,j)=sum(x(i,:).*x(j,:))/sqrt(sum(x(i,:).^2)*sum(x(j,:).^2)); elseif method==2 r(i,j)=sum(abs((x(i,:)-mean(x(i,:))).*(x(j,:)-mean(x(j,:)))))/sqrt(sum((x(i,:)-mean(x(i,:))).^2*sum((x(j,:)-mean(x(j,:))).^2))); elseif method==3 r(i,j)=1-ed(i,j)/E; elseif method==4 r(i,j)=1-hd(i,j)/H; elseif method==5 r(i,j)=exp(-sum(abs(x(i,:)-x(j,:)))); elseif method==6 if i==1 r(i,j)=1; else r(i,j)=sum(x(i,:).*x(j,:))/M; end elseif method==7 mink=[]; for k=1:n mink=[mink min(x(i,k),x(j,k))]; end r(i,j)=2*sum(mink)/sum(x(i,:)+x(j,:)); end endendfunction b=FSM_square(x)% 本子程序功能是求模糊相似矩阵的平方;输入参数x必须是一个模糊方阵,输出为x的平方。[m,n]=size(x);if m~=n disp('输入矩阵不是方阵,请重新输入一个方阵'); returnendfor i=1:n for j=1:m for k=1:n b(k)=min(x(i,k),x(k,j)); end xsquare(i,j)=max(b); endendb=xsquare;function bibao=Transtive_closure(x)% 本子程序功能是求模糊相似矩阵x的传递闭包,以用于模糊聚类。[m,n]=size(x);if m~=n disp('输入矩阵不是方阵,请重新输入一个方阵'); returnendxsquare=FSM_square(x);while sum(sum(x==xsquare))~=n^2; x=xsquare; xsquare=FSM_square(x);endbibao=xsquare;function A=Classification_level(x)% 本子程序功能是求动态模糊聚类的分类水平。[m,n]=size(x);B=sort(reshape(x,1,m*n));M=B(end);i=1;while B(i)<M L=find(B==B(i)); B(L(2:end))=[]; i=i+1;endL=find(B==M);B(L(2:end))=[];A=B;function [cls,nmb]=Computing_cls(x)% 本子程序功能是求存储分类的数组cls及相应分类下包含对象的数量。m=size(x,1);for i=1:m J=[]; for j=1:m if x(i,j)==1 J=[J,j]; end end cl{i}=J;endfor i=1:m for j=i+1:m if length(cl{j})==length(cl{i}) if sum(cl{j}==cl{i})==length(cl{i}) cl{i}=[]; end end endendcls=[];for i=1:m if ~isempty(cl{i}) cls=[cls cl(i)]; endendnmb=length(cls); function F=F_statistic(r,x)% 本子程序功能是求F统计量,以确定最佳分类数目。[cls,nmb]=Computing_cls(r);m=size(r,1);ubar=mean(x);for k=1:nmb s=cls{k}; if length(s)==1 ukbar(k,:)=x(s,:); else ukbar(k,:)=mean(x(s,:)); end fz(k)=length(s)*sum((ukbar(k,:)-ubar).^2)/(nmb-1); for l=1:length(s) fm0(k,l)=sum((x(s(l))-ukbar(k,:)).^2); end fm(k)=sum(fm0(k,:)/(m-nmb));endF=sum(fz)/sum(fm);function Dynamic_clustering(x,method)% 本子程序功能是动态聚类图,返回的是原始数据的动态聚类图。close all;A=Standard(x);B=Fuzzy_similarity_matrix(A,method);R=Transtive_closure(B);lamda=Classification_level(R);m=length(lamda);for i=1:m M(:,:,i)=R>=lamda(i); cls=Computing_cls(M(:,:,i)); allcls{i}=cls;endrr=[];for i=1:length(allcls)-1 ind=[]; for j=1:i ind0=[]; for k=1:i+1 ind0=[ind0 ismember(allcls{i+1}{k}(1),allcls{i}{j})]; end ind=[ind;ind0]; end tmp=allcls{i+1}; for r=1:i if sum(ind(r,:))==2 tp=ind(r,:); s=find(tp==1); allcls{i+1}{r}=tmp{s(1)}; allcls{i+1}{r+1}=tmp{s(2)}; t1=[1:r-1,r+1:i]; t2=[1:r-1,r+2:i+1]; for t=1:i-1 allcls{i+1}{t2(t)}=allcls{i}{t1(t)}; end rr=[rr r]; end endendseq0=allcls{end};seq=[];for i=1:m seq=[seq allcls{end}{i}];endfigure,hold on,title('动态聚类图');wide=30; high=25;x0=wide*(m-1); y0=high*m;par=(wide+high)/2;axis([-2.5*par,x0+1.5*par,-par,y0+par]);axis('off');lbx{1}=wide*[0:m-1];for i=2:m lbx{i}(rr(m+1-i))=(lbx{i-1}(rr(m+1-i))+lbx{i-1}(rr(m+1-i)+1))/2; for u=1:rr(m+1-i)-1 lbx{i}(u)=lbx{i-1}(u); end for v=rr(m+1-i)+1:m+1-i lbx{i}(v)=lbx{i-1}(v+1); endendfor i=1:m text((i-1)*wide-wide/9,-0.5*high,int2str(allcls{end}{i}));endtext(-3.45*par,(m+0.5)*high,'分类水平');text(-3.1*par,0.5*high,num2str(lamda(m)));text(x0+0.3*par,(m+0.5)*high,'分类数');text(x0+1.35*par,0.5*high,num2str(m));for i=1:m line([(i-1)*wide (i-1)*wide],[0 high]);endfor i=2:m text(-3.1*par,(i-0.5)*high,num2str(lamda(m+1-i))); text(x0+1.35*par,(i-0.5)*high,num2str(m+1-i)); line([lbx{i-1}(rr(m+1-i)) lbx{i-1}(rr(m+1-i)+1)],[i-1 i-1]*high); for j=1:length(lbx{i}) line([lbx{i}(j) lbx{i}(j)],[i-1 i]*high); endend
2.function Fuzzy_method_all
<pre code_snippet_id="266000" snippet_file_name="blog_20140331_3_6146859" name="code" class="plain">function Fuzzy_method_all% 本程序通过一个较为复杂的例子演示了如何调用相关子程序实现模糊聚类与模糊综合评价。clear,clc,format short g% 原始数据矩阵.% 人口 GDP 工业 财政收入 财政支出 固定资产 居民储蓄 环境治理A0=[1198 78702835 18218601 11171514 12968389 33715013 86984521 388750 949 43591500 22927300 4170479 5431219 18497987 28110200 799933 940 20266320 8751622 773736 1282462 10994463 15532427 27727 349 10136482 3786335 753306 954238 5011273 11839536 284793 216 9000845 2837701 455202 754985 5498228 4530845 46078 704 25196338 10088171 1756336 2687649 17903457 19219758 138814 572 25696699 10588385 1961357 2665249 14694899 18664886 263991 739 17411922 6840335 715908 1466748 9504180 11745969 284745 980 20940751 5894994 1182934 1946839 8098657 15638334 346446 1368 103663700 46701100 15760724 17955660 39250884 94802800 3108523 607 27737800 11819400 2464392 2624614 16135518 18348800 850030 666 34415068 15590895 3013888 2754809 14607422 24736900 141461 560 28744435 14259477 2573799 2926969 15027686 17520388 185041 470 10737600 4093600 794046 1028869 8167825 6245600 15407 623 16640515 6601028 1156184 1100589 7323412 13113823 319000 160 11680229 5603061 1361653 1591253 6620984 6808196 299504 484 11838973 4481541 681075 933749 6430198 7338474 255279 603 21850856 8615053 1284388 1469762 10167663 11825655 442928 749 32065800 15274900 2259904 2367875 14856894 15676197 566252 692 20134777 9440244 1760266 1876587 10319917 16207242 77486 819 25907569 10007433 1786021 2578102 13252827 18877333 104608 631 17989572 6007131 1328345 1671873 10898081 10930400 18404 761 60738277 22210421 4270831 5067899 16963824 55623554 265927 197 58135624 28866206 5008827 5714231 12736693 37447000 10793 672 8701481 2212890 566221 930781 4472211 6814522 178113 177 3501246 798078 211288 322454 1582308 4069576 10570 3199 34915700 12341200 3177165 5942543 24518351 29490500 846064];A0=[2027.960101.220393.42077.610266.600723.880177.37089.28024.83015.74017.1406.58010.8603.1805.03018.8509.97070.660553.106.251408.0282.06018.2101.83033.7531119.853.43023.60422.0199.4803.195.3882.559.248.39417.6785.3057.873.3654.135208.175237.668110.150127.517226.5003.5605.86038.66025.918182.930123.6004.51078.400.11024.070.780.2602128.82064.430140.62071.94039.2601560.97032.38011.13024.11020.6904.6009.42022.8201.3201.30015.45013.57074.130626.478.062224.3679.9304.750.77030.904762.525.46426.87523.36113.8064.889.4533.881.555.39427.4558.51111.5581.4205.967205.000229.136113.498115.638228.8003.9505.19044.05025.98681.62098.3003.83077.500.16326.070.650-1.2508397.280108.070222.350173.08067.5407472.28055.79075.34013.18019.6007.8407.82018.1702.7606.27031.21016.51079.870585.046.315157.9398.0802.9601.05019.303266.640.40921.68520.37310.7944.764.3544.254.156.394164.99319.977115.7326.48222.802256.190273.758132.209141.549257.6003.9107.16035.99028.99783.130105.4005.60071.800.17025.5001.090-.6202144.68079.390133.830158.740156.7201182.23093.23089.36046.70021.9406.55015.79020.7502.5306.08018.91017.45072.530529.823.09779.6853.7705.230.55015.53472.905.26610.6988.6384.4823.412.2872.850.102.17226.9684.18316.0872.2324.465189.722237.766109.316128.450203.3003.2907.11028.61023.721137.970174.7003.26053.000.17425.9801.840-.3701844.00052.280145.090164.050102.430816.08086.83069.54018.64033.67016.46030.48021.6903.3805.30047.77029.740166.900585.613.041120.6069.4903.7701.44031.536143.513.39617.61814.48610.275.637.2344.534.403.3946.6501.9804.313.3586.203209.663195.46099.58595.875212.9003.6406.65032.00024.084515.460254.2002.99065.600.27026.330.880-.3303434.17068.010102.42075.78080.6002932.76018.01019.39023.17012.6302.65010.5207.9002.4602.27010.0009.77043.200536.643.07546.1862.8302.210.00036.774115.943.27510.67115.1736.8382.203.2541.850.100.3947.7271.0565.765.9076.203244.385223.817108.798115.019246.1003.2909.31026.43027.376202.240172.0002.64071.900.19325.1601.810-.1602391.16065.100267.760239.200208.9701096.28074.06089.56018.19046.98011.36018.03033.8401.8602.63026.36036.750107.210487.172.13160.7675.8207.740.54025.591433.751.1769.2145.6193.468.623.523.555.068.3949.8653.1716.480.2146.203209.861303.950142.437161.513211.4003.1808.14025.98026.43863.610168.8004.78071.500.14125.6102.050-.3801950.76072.090345.87044.230176.020962.010150.73042.6306.43020.8409.80016.22019.3802.5803.42015.93010.11031.630558.546.181241.3975.71013.5502.51050.4341305.595.41515.24122.4898.4835.9495.2834.534.549.116115.55511.63073.21118.09912.615198.849196.99094.336102.654226.5002.9206.47034.99025.620213.090181.1006.41059.600.26026.850.800-.5102262.72072.890113.940110.610110.5301334.19095.18042.8007.07033.49015.15024.82026.6105.1908.97032.61034.740160.440700.828.512240.84313.2304.1201.10016.869424.108.66630.11424.36220.4904.907.4233.022.904.55858.54111.06333.1722.77111.535193.690194.92598.70196.224203.4003.7405.88034.58023.761186.620138.1005.31078.000.13023.8101.440-.3801364.14087.520114.290130.870126.710477.50088.14060.5005.75025.3104.00010.56020.0501.2102.97039.04018.530125.880545.30510.25044.2032.4502.300.24010.427459.569.3269.47616.6884.63112.307.52711.140.485.15628.74810.36710.2745.7462.361167.202161.42179.37982.041181.2003.6506.67027.16019.676255.440200.8004.59071.700.20027.1002.170-1.1202355.69094.420111.670141.580186.5201150.090158.36083.16033.21023.9307.17013.44018.0703.5304.62029.09017.710255.190542.662.0767.7879.2908.6101.90014.26091.468.2796.0754.5432.51726.851.27026.335.246.39425.57517.19823.7177.403.975209.563237.891113.952123.939210.2003.5305.50038.24024.527177.830118.8003.41058.400.10228.03012.1503.8702556.79063.32071.68069.35047.8902127.91036.84013.98017.06019.0403.96016.05014.6005.1705.9106.2103.29015.490493.460.06532.3436.0805.3301.13021.080132.216.19712.0597.1693.897.696.100.545.052.3942.4801.67923.717.8016.203247.659262.155124.661137.493261.1003.4308.54030.58027.614191.950187.7002.40063.300.24326.5702.040.0101416.11054.300110.63080.65072.320621.25041.25028.39016.76037.67015.11021.50036.3604.0202.50039.27028.770167.680606.204.01565.3244.300.8301.15028.07699.881.44114.3859.8227.33010.863.69510.050.117.39440.7599.1383.08818.33110.202197.857212.237110.421101.816203.4003.8604.34023.75023.353159.970148.0004.67068.100.16027.5301.040-1.5701237.81071.27056.410104.50064.280677.78039.09051.43022.23015.7301.70012.67011.6601.1203.37014.76012.04062.030599.829.060140.2575.7304.1201.63041.577991.046.36014.65713.9417.8096.313.6615.065.462.126134.6387.123113.25811.1583.098191.508255.335120.444134.892193.9003.3905.40035.90024.060209.110136.3004.60066.200.25525.4101.190-.5702177.91085.200223.120226.600172.690817.57096.020100.86034.22035.08010.72023.91041.2602.1007.54048.43031.440186.070524.613.06852.7926.2303.6302.06025.743157.997.21911.90125.4175.511.211.0984.534.112.3949.718.4728.500.7466.203179.107208.933105.755103.178214.9003.1908.57025.09025.012159.310174.5002.90067.700.21325.5301.980-.0101553.50073.340110.720110.490112.050679.25046.95040.08027.08023.8803.97014.31019.1703.56012.91042.03028.130181.690583.374.08360.6609.0307.2802.38013.648529.969.23711.21410.0869.1574.556.3354.121.100.3948.1902.1611.2333.1761.620204.008189.27592.78596.491205.6003.3004.92041.76022.346119.170109.3003.79071.800.13526.1101.330-.3401713.650107.19095.61089.150100.970806.56062.42044.85026.38032.1105.49020.14028.5204.67010.12047.16024.220175.990548.833.05659.4245.8805.110.88017.174129.581.35915.33615.7308.701.711.414.151.145.39443.8122.42337.4411.8802.068212.738271.504128.705142.799238.2003.4308.66027.51026.276446.640264.1002.80071.500.33025.4001.180-.2502398.38032.45071.49052.06038.2202097.61024.31010.01011.42010.8501.5904.6204.4401.3402.7606.0003.83014.540513.817.11240.2283.6005.590.52027.077158.870.2267.3815.3885.245.416.1154.534.301.3946.516.7415.310.4656.203226.032265.773125.611140.162226.6003.2708.03028.21026.338196.010208.4002.60063.100.16025.5202.870.2102463.60072.94096.13091.11068.7001438.080165.66068.05032.07041.5704.4408.76030.1001.9202.35029.22026.230244.690544.462.072115.7045.5604.270.13030.408202.962.38017.42613.7009.4543.821.1712.879.177.59231.265.95424.8771.6703.764205.794220.333107.601112.732214.9003.5706.81031.54023.441173.090168.8006.32067.400.16227.190.800-1.5102273.63073.490157.320131.450177.910754.8909.890100.70012.62042.04017.17029.96044.7403.0302.79076.89059.410537.280559.332.02423.5233.510.920.44012.43989.770.28212.6778.1158.1551.545.2291.178.279.1389.6266.8911.4341.3026.203193.194227.338114.537112.801209.1003.8105.17040.48022.933307.140334.3003.15059.500.23227.0901.960-.4306346.83069.490180.030194.110107.7305144.81062.22016.36053.64041.46013.66016.12034.2802.5402.23092.41041.040233.250563.794.05089.28215.5102.9302.38018.123194.262.37916.19213.6137.5157.847.6446.437.632.13547.2201.89736.0372.6276.658205.794259.110121.825137.285216.9003.5606.78031.99026.948147.660106.1004.74060.400.10825.1801.210.0002566.610110.520207.260251.110237.700863.990197.32070.86043.77058.80011.86066.93066.9806.6805.25044.61043.580220.580488.712.07474.0276.4907.730.77021.824417.665.28416.44212.1557.8464.289.2053.449.101.53413.800.73712.733.3306.203224.147226.399105.994120.405234.7003.6505.97039.36025.674106.610115.8003.32057.400.14725.9401.520-.0702380.810120.860138.150159.470131.5401341.120106.71078.87035.51042.27011.40018.61035.54010.4906.55033.95018.55048.950543.574.097172.6264.0805.200.39016.406427.028.57329.70424.25724.2959.968.6907.375.3881.51544.7486.61224.496.87612.764207.679212.56499.539113.025208.8003.3906.91030.23023.383278.750219.1003.84077.500.23326.6501.380-.4201638.83058.600160.810148.58059.230797.55088.56079.40034.07030.3206.19011.2208.6001.8602.47024.42017.46079.160525.820.033144.8818.3604.6001.70015.066144.729.2838.75114.4178.2062.935.3212.396.217.39414.3805.8404.2511.0203.270201.825244.512113.682130.830203.3003.6107.27027.98025.815517.450237.4002.99076.700.24725.970.900-.2901409.70073.280130.810115.850150.570479.17088.03057.02041.97026.1504.38015.94020.8501.4603.43036.19016.050122.400537.084.06449.6432.8702.480.16014.280140.946.35111.5029.3245.3732.129.1961.426.219.28830.211.32824.6142.6972.572150.337156.03880.30075.738194.6003.3808.53022.81018.515288.690251.3004.10058.500.22027.1001.520-.920851.17059.00095.66074.47047.830147.70022.81028.72014.94019.4904.30018.42023.3305.7603.98037.29033.450194.540587.293.41658.4697.1501.400.82032.02682.359.3177.3483.7783.3832.086.0951.832.159.39413.9175.3166.0111.815.775173.353197.37789.120108.257195.7003.6804.58042.74019.758793.470245.5003.35068.300.23028.0001.090-.8301116.61051.450132.55079.06048.360418.01029.25028.5809.96028.7405.40010.47032.7507.4404.76027.46024.440149.190528.331.09134.1906.2301.3901.26023.035592.199.2658.89710.3104.7111.569.1661.147.257.39415.9815.9425.1734.8656.203196.667213.216113.46999.747206.9003.3706.97029.67023.329282.090148.7003.51059.500.20028.7902.330-1.230];A=[];for i=2:size(A0,2) A=[A A0(:,i)./A0(:,1)];endDynamic_clustering(A,1);B=round(A); % A取整为B,B将写入正文.[m n]=size(A);% 标准化原始数据矩阵 A,标准化矩阵仍记为 A.%A=Standard(A);% 将标准化矩阵 A 写入 excel,文件名为 result.xls.you=fopen('result.xls','w');% 第一个问题:模糊聚类R=Fuzzy_similarity_matrix(A,1);% 再应用平方法计算R的传递闭包,仍记闭包为R.R=Transtive_closure(R);% 将传递闭包矩阵R写入resultforbook.xls.fprintf(you,' \n');fprintf(you,'模糊等价矩阵的传递闭包\n');geshi2=[]; % 写入excel的书写格式.for i=1:m-1 geshi2=[geshi2 '%f\t'];endgeshi2=[geshi2 '%f\n'];for i = 1:m fprintf(you,geshi2,R(i,:));end;% 求R的lamda截矩阵,这需要分类水平lamda:lamda=Classification_level(R);% 将分类水平 lamda 写入 result_forbook.xls.fprintf(you,' \n');fprintf(you,'分类水平\n');fprintf(you,geshi2,lamda);for p=1:length(lamda) %显示 lamda(p) 水平上分类情况. M(:,:,p)=R>=lamda(p); [cls nmb]=Computing_cls(M(:,:,p)); disp(' '); %显示一空行是为了方便阅读显示内容. disp(['在分类水平 ',num2str(lamda(p)),'上分为 ',num2str(nmb),'类: ']); cities{1}='品种1 '; cities{2}='品种2 '; cities{3}='品种3 '; cities{4}='品种4 '; cities{5}='品种5 '; cities{6}='品种6 '; cities{7}='品种7 '; cities{8}='品种8'; cities{9}='品种9 '; cities{10}='品种10 '; cities{11}='品种11 '; cities{12}='品种12 '; cities{13}='品种13 '; cities{14}='品种14 '; cities{15}='品种15 '; cities{16}='品种16 '; cities{17}='品种17 '; cities{18}='品种18 '; cities{19}='品种19 '; cities{20}='品种20 '; cities{21}='品种21 '; cities{22}='品种22 '; cities{23}='品种23 '; cities{24}='品种24 '; cities{25}='品种25 '; cities{26}='品种26 '; cities{27}='品种27 '; for i=1:nmb if length(cls{i})==1 cities{cls{i}}(end)=[]; disp(['"',cities{cls{i}},'"',' 自成一类']); else ct=[]; for t=1:length(cls{i}) ct=[ct cities{cls{i}(t)}]; end ct(end)=[]; disp([' "',ct,'"',' 归为一类']); end end %求水平lamda(p)上的 F 值--F(p). F(p)=F_statistic(M(:,:,p),A);enddisp(' ')[v,ind]=max(F);disp(['在所有分类中分为 ' num2str(ind) ' 类是最合理的.']) function S=Standard(x)% 本子程序功能是通过标定和压缩对原始数据进行标准化。n=size(x,2); mu=mean(x); sig=std(x);for j=1:n R(:,j)=(x(:,j)-mu(j))/sig(j); S(:,j)=(R(:,j)-min(R(:,j)))/(max(R(:,j))-min(R(:,j)));endfunction r=Fuzzy_similarity_matrix(x,method)% 本子程序功能是分别用7种方法建立模糊相似矩阵。[m,n]=size(x);for i=1:m for j=1:m ed(i,j)=sqrt(sum((x(i,:)-x(j,:)).^2)); hd(i,j)=sum(abs(x(i,:)-x(j,:))); endendfor i=1:m for j=1:m K(i,j)=sum(x(i,:).*x(j,:)); endendfor i=1:m K(i,i)=0;endE=max(max(ed)); H=max(max(hd)); M=max(max(K));disp(' ');if method==1 disp('夹角余弦法建立模糊相似矩阵');elseif method==2 disp('相似系数法建立模糊相似矩阵');elseif method==3 disp('欧氏距离法建立模糊相似矩阵');elseif method==4 disp('海明距离法建立模糊相似矩阵');elseif method==5 disp('指数距离法建立模糊相似矩阵');elseif method==6 disp('数量积法建立模糊相似矩阵');elseif method==7 disp('算术平均最小法建立模糊相似矩阵');endfor i=1:m for j=1:m if method==1 r(i,j)=sum(x(i,:).*x(j,:))/sqrt(sum(x(i,:).^2)*sum(x(j,:).^2)); elseif method==2 r(i,j)=sum(abs((x(i,:)-mean(x(i,:))).*(x(j,:)-mean(x(j,:)))))/sqrt(sum((x(i,:)-mean(x(i,:))).^2*sum((x(j,:)-mean(x(j,:))).^2))); elseif method==3 r(i,j)=1-ed(i,j)/E; elseif method==4 r(i,j)=1-hd(i,j)/H; elseif method==5 r(i,j)=exp(-sum(abs(x(i,:)-x(j,:)))); elseif method==6 if i==1 r(i,j)=1; else r(i,j)=sum(x(i,:).*x(j,:))/M; end elseif method==7 mink=[]; for k=1:n mink=[mink min(x(i,k),x(j,k))]; end r(i,j)=2*sum(mink)/sum(x(i,:)+x(j,:)); end endendfunction b=FSM_square(x)% 本子程序功能是求模糊相似矩阵的平方;输入参数x必须是一个模糊方阵,输出为x的平方。[m,n]=size(x);if m~=n disp('输入矩阵不是方阵,请重新输入一个方阵'); returnendfor i=1:n for j=1:m for k=1:n b(k)=min(x(i,k),x(k,j)); end xsquare(i,j)=max(b); endendb=xsquare;function bibao=Transtive_closure(x)% 本子程序功能是求模糊相似矩阵x的传递闭包,以用于模糊聚类。[m,n]=size(x);if m~=n disp('输入矩阵不是方阵,请重新输入一个方阵'); returnendxsquare=FSM_square(x);while sum(sum(x==xsquare))~=n^2; x=xsquare; xsquare=FSM_square(x);endbibao=xsquare;function A=Classification_level(x)% 本子程序功能是求动态模糊聚类的分类水平。[m,n]=size(x);B=sort(reshape(x,1,m*n));M=B(end);i=1;while B(i)<M L=find(B==B(i)); B(L(2:end))=[]; i=i+1;endL=find(B==M);B(L(2:end))=[];A=B;function [cls,nmb]=Computing_cls(x)% 本子程序功能是求存储分类的数组cls及相应分类下包含对象的数量。m=size(x,1);for i=1:m J=[]; for j=1:m if x(i,j)==1 J=[J,j]; end end cl{i}=J;endfor i=1:m for j=i+1:m if length(cl{j})==length(cl{i}) if sum(cl{j}==cl{i})==length(cl{i}) cl{i}=[]; end end endendcls=[];for i=1:m if ~isempty(cl{i}) cls=[cls cl(i)]; endendnmb=length(cls); function F=F_statistic(r,x)% 本子程序功能是求F统计量,以确定最佳分类数目。[cls,nmb]=Computing_cls(r);m=size(r,1);ubar=mean(x);for k=1:nmb s=cls{k}; if length(s)==1 ukbar(k,:)=x(s,:); else ukbar(k,:)=mean(x(s,:)); end fz(k)=length(s)*sum((ukbar(k,:)-ubar).^2)/(nmb-1); for l=1:length(s) fm0(k,l)=sum((x(s(l))-ukbar(k,:)).^2); end fm(k)=sum(fm0(k,:)/(m-nmb));endF=sum(fz)/sum(fm);function Dynamic_clustering(x,method)% 本子程序功能是动态聚类图,返回的是原始数据的动态聚类图。close all;A=Standard(x);B=Fuzzy_similarity_matrix(A,method);R=Transtive_closure(B);lamda=Classification_level(R);m=length(lamda);for i=1:m M(:,:,i)=R>=lamda(i); cls=Computing_cls(M(:,:,i)); allcls{i}=cls;endrr=[];for i=1:length(allcls)-1 ind=[]; for j=1:i ind0=[]; for k=1:i+1 ind0=[ind0 ismember(allcls{i+1}{k}(1),allcls{i}{j})]; end ind=[ind;ind0]; end tmp=allcls{i+1}; for r=1:i if sum(ind(r,:))==2 tp=ind(r,:); s=find(tp==1); allcls{i+1}{r}=tmp{s(1)}; allcls{i+1}{r+1}=tmp{s(2)}; t1=[1:r-1,r+1:i]; t2=[1:r-1,r+2:i+1]; for t=1:i-1 allcls{i+1}{t2(t)}=allcls{i}{t1(t)}; end rr=[rr r]; end endendseq0=allcls{end};seq=[];for i=1:m seq=[seq allcls{end}{i}];endfigure,hold on,title('动态聚类图');wide=30; high=25;x0=wide*(m-1); y0=high*m;par=(wide+high)/2;axis([-2.5*par,x0+1.5*par,-par,y0+par]);axis('off');lbx{1}=wide*[0:m-1];for i=2:m lbx{i}(rr(m+1-i))=(lbx{i-1}(rr(m+1-i))+lbx{i-1}(rr(m+1-i)+1))/2; for u=1:rr(m+1-i)-1 lbx{i}(u)=lbx{i-1}(u); end for v=rr(m+1-i)+1:m+1-i lbx{i}(v)=lbx{i-1}(v+1); endendfor i=1:m text((i-1)*wide-wide/9,-0.5*high,int2str(allcls{end}{i}));endtext(-3.45*par,(m+0.5)*high,'分类水平');text(-3.1*par,0.5*high,num2str(lamda(m)));text(x0+0.3*par,(m+0.5)*high,'分类数');text(x0+1.35*par,0.5*high,num2str(m));for i=1:m line([(i-1)*wide (i-1)*wide],[0 high]);endfor i=2:m text(-3.1*par,(i-0.5)*high,num2str(lamda(m+1-i))); text(x0+1.35*par,(i-0.5)*high,num2str(m+1-i)); line([lbx{i-1}(rr(m+1-i)) lbx{i-1}(rr(m+1-i)+1)],[i-1 i-1]*high); for j=1:length(lbx{i}) line([lbx{i}(j) lbx{i}(j)],[i-1 i]*high); endend
0 0
- 模糊聚类与模糊综合评价
- 模糊综合评价法
- 【数学建模】模糊综合评价代码
- 基于模糊神经网络的综合评价
- 利用模糊综合评估法构建企业管理进步综合评价模型
- 模糊综合评判
- 综合模糊查询
- 径向模糊与旋转模糊
- 模糊
- 模糊
- 模糊
- 模糊
- 模糊综合评判+C代码
- 模糊评价 和 层次分析法 概括
- 基于模糊等价关系的模糊聚类程序实现
- 模糊C均值聚类
- 模糊C均值聚类
- 模糊c均值聚类
- hdu1217 Arbitrage
- git常见错误
- 可以坚持实践为先的课外学习
- 基于平均法线实现顶点网格变形控制的总结
- Linux驱动模块编译进内核中
- 模糊聚类与模糊综合评价
- ACM校赛有感.
- JAVA设计模式初探之组合模式
- 数制转换 递归调用
- 【nyist】Personal Contest.8&&7
- 电脑清理软件
- 武大邀请赛网络赛 I Twenty-four
- android基础入门SQLite数据库操作(15)
- ios网络数据处理