目录
一、实验目的………………………………………………2
二、实验环境………………………………………………2
三、实验内容………………………………………………2
1、实际问题…………………………………………………2
2、问题分析…………………………………………………4
3、实验原理及步骤…………………………………………4
四、实验结果…………………………………………………6
五、结果分析…………………………………………………8
六、程序源码…………………………………………………8
一、实验目的
1、应用模糊数学分析实际问题,掌握分析数据的方法。
2、用模糊聚类方法分析数据,并解决实际问题。
3、熟悉Matlab程序,编程实现模糊聚类分析。
二、实验环境
Matlab7.1
三、实验内容
1、实际问题
小学生毕业班成绩总评中模糊聚类分析方法:根据后屯小学2011年六年(2)班 9月份毕业成绩汇总表,对新毕业的小学生们的毕业成绩评价工作,并据此选出7名优秀毕业生。从应用数学角度来看,评价本质上是一项排名工作。为了是使排名录取更趋科学、合理、可信,我们综合决策过程中的模糊信息,建立模糊数学模型,利用模糊聚类分析方法,根据聚类结果来确定每位学生的排名结果。针对毕业生4科成绩表(如下)建立模型,分析结果。
function F_Jlfx(bzh,cs,X)%定义函数
X=F_JlSjBzh(bzh,X);%标准化准换
R=F_JlR(cs,X);%模糊聚类分析建立模糊相似矩阵
fprintf('得到模糊相似矩阵如下:\n');
R
[m,n]=size(R);
if(m~=n||m==0)return;end
F_JlDtjl(R);
function[X]=F_JlSjBzh(cs,X)%定义函数
if(cs==2)%平移·极差变换
for(k=1:m)xmin=X(1,k);xmax=X(1,k);
for(i=1:n)
if(xmin>X(i,k))xmin=X(i,k);end
if(xmax<X(i,k))xmax=X(i,k);end
end
for(i=1:n)X(i,k)=(X(i,k)-xmin)/(xmax-xmin);end
end
function[R]=F_JlR(cs,X)%定义函数
[n,m]=size(X);%获得矩阵的行列数
cs=8;
R=[];
if(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
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(10000*R(i,j))/10000;%保留四位小数
R(j,i)=R(i,j);
end
js0=0;
while(1)%求传递闭包
R1=Max_Min(R,R);
js0=js0+1;
if(R1==R)
break;
else
R=R1;
end
end
lmd(1)=1;k=1;
for(i=1:n)for(j=i+1:n)pd=1;%找出所有不同元素
for(x=1:k)if(R(i,j)==lmd(x))pd=0;break;end;end
if(pd)k=k+1;lmd(k)=R(i,j);end
end;
end
for(i=1:k-1)
for(j=i+1:k)
if(lmd(i)<lmd(j))%从大到小排序
x=lmd(j);
lmd(j)=lmd(i);
lmd(i)=x;
end;
end;
end
for(x=1:k)%按lmd(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)>=lmd(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;
lmd(fl)=lmd(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)>=lmd(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)>=lmd(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
end
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(lmd(x)));
js0=1;js1=0;
if(x==1)
for(i=1:flsz(x))
js1=flqksz(min(i,2),x)-1;
if(js1)
line([linesz(min(max(js0,1),9)),linesz(min(9,max(js0+js1,1)))],[y,y]);
end
line([(linesz(min(9,max(js0+js1,1)))+linesz(min(9,max(js0,1))))/2,(linesz(min(9,max(js0+js1,1)))+linesz(min(9,max(js0,1))))/2],[y,y-Gd]);
linesz(min(9,i))=(linesz(min(9,max(js0+js1,1)))+linesz(min(9,max(js0,1))))/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(j,x-1);
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
end