模糊数学实验指导书 写实验报告注意事项: 统一用Word文档保存,文件名为:0x14xxxxx[y],共12个字符,其中xxxxx为你的学号后5位数,y为实验序号(1,2,…,6). Word文档第一行为你的姓名与学号,其次拷贝实验名称、目的、学时与内容,然后注明实验日期,再其次是你所做的具体内容.可参考后面的范例. 本实验主要采用MATLAB软件. 你所做的具体内容除结果或说明外,都用文本格式编辑. 不得拷贝或抄袭他人的结果(包括教材上的例子和其他文本格式的范例). 提示:MATLAB软件包中有模糊工具箱(C:\MATLAB6p5\toolbox\fuzzy). 实验一 模糊统计与模糊分布 实验目的: 会使用数学软件MATLAB进行模糊统计,掌握得到模糊分布(隶属函数)近似解析表达式的方法. 实验学时:4学时 实验内容: ⑴ 根据模糊集的数据统计区间(例如随机产生“青年人”的年龄区间),绘制模糊统计频率直方图. ⑵ 根据上述数据,导出该模糊集隶属函数的近似解析表达式,说明你的方法的可行性(在同一坐标系中绘制模糊统计频率直方图与模糊集隶属函数的图形,给出残差平方和). 实验二 模糊聚类与模糊识别 实验目的: 掌握模糊相似矩阵的建立方法与最大隶属原则,会求传递闭包矩阵;会使用数学软件MATLAB进行模糊矩阵的有关运算. 实验学时:4学时 实验内容: ⑴ 根据已知数据进行数据标准化. ⑵ 根据已知数据建立模糊相似矩阵,并求出其传递闭包矩阵. ⑶ (可选做)根据模糊等价矩阵绘制动态聚类图. ⑷ (可选做)根据原始数据或标准化后的数据和⑶的结果确定最佳分类. ⑸ 根据已知数据用最大隶属原则进行模糊识别. 实验三 求解模糊线性规划 实验目的: 掌握将模糊线性规划转化为一般线性规划的方法,会使用数学软件Lindo求解一般线性规划. 实验学时:4学时 实验内容: 将已知模糊线性规划问题用C语言编程生成Lindo软件的数据格式,再用Lindo软件求解. 下面是实验报告样式 [姓名] [学号] 实验一 模糊统计与模糊分布 实验目的: 会使用数学软件MATLAB进行模糊统计,掌握得到模糊分布(隶属函数)近似解析表达式的方法. 实验学时:4学时 实验内容: ⑴ 根据模糊集的数据统计区间(例如随机产生“青年人”的年龄区间),绘制模糊分布图. ⑵ 根据上述数据,导出该模糊集隶属函数的近似解析表达式,说明你的方法的可行性(在同一坐标系中绘制模糊分布图与模糊集隶属函数的图形,给出残差平方和,用F分布检验). 实验日期:200x年x月x日 操作步骤: ⑴ 随机产生模糊集的数据统计区间,论域[a,b],绘制模糊分布图. n=20;a=12;b=40;A=rand(2,n); for i=1:1:2*n A(i)=a+A(i)*(b-a);% 取整数A(i)=a+round(A(i)*(b-a)); end for i=1:1: n if A(1,i)>A(2,i) % 调整区间的上下限 xxxxx=A(1,i); A(1,i)=A(2,i); A(2,i)=xxxxx; end end A%显示模糊集A的数据 A1=b;A2=a; for i=1:1: n if(A(1,i)<A1)A1=A(1,i); %A的最小值 end if(A(2,i)>A2)A2=A(2,i); %A的最大值 end end x=A1:(A2-A1)/100:A2; Ax=[]; for i=1:1:length(x) Ax(i)=0; for j=1:n if(x(i)>=A(1,j)&x(i)<=A(2,j)) Ax(i)= Ax(i)+1; end end Ax(i)=Ax(i)/n; end plot(x,Ax) 结果: ⑵ 模糊集A隶属函数的近似解析表达式,在同一坐标系中绘制模糊分布图与模糊集隶属函数的图形,并给出残差平方和,用F分布检验. 以下仅给出多项式回归并用F分布检验的方法,供参考 x0=37.0:0.5:43.0; y0=[3.40 3.00 3.00 2.27 2.10 1.83 1.53 1.70 1.80 1.90 2.35 2.54 2.90]; x=x0';%转置 y=y0';%转置 m=2;n=length(x); xs=polyfit(x,y,m)%方法1多项式系数行向量降幂排列 yy=0;jxj=[]; for i=1:n jxj(i)=xs(m+1); for k=1:m jxj(i)=jxj(i)+xs(k)*x(i)^(m-k+1); %解析解 end yy=yy+y(i); end jxj plot(x,jxj,x,y,'-+') X(n,m+1)=1; %定义n行m+1列矩阵X X(:,1)=1; %X的第1列全为1 for i=1:m X(:,i+1)=x.^i; %X的第i+1列=x的i次幂 end b=inv(X'*X)*X'*y%方法2多项式系数列向量升幂排列 yy=yy/n;%计算y的均值 Syy=0; for i=1:n Syy=Syy+(y(i)-yy)*(y(i)-yy);%计算总和 end Q=(y-X*b)'*(y-X*b) %计算残差平方和 Ftjl=((Syy-Q)/m)/(Q/(n-m-1)) %计算F统计量 Ffbz=Ftjl/10; while fcdf(Ffbz,m-1,n-m-1)<0.99 Ffbz=Ffbz+0.1; %查表F分布值 end Ffbz [姓名] [学号] 实验二 模糊聚类与模糊识别 实验目的: 掌握模糊相似矩阵的建立方法与最大隶属原则,会求传递闭包矩阵;会使用数学软件MATLAB进行模糊矩阵的有关运算. 实验学时:4学时 实验内容: ⑴ 根据已知数据进行数据标准化. ⑵ 根据已知数据建立模糊相似矩阵,并求出其传递闭包矩阵. ⑶ (可选做)根据模糊等价矩阵绘制动态聚类图. ⑷ (可选做)根据原始数据或标准化后的数据和⑶的结果确定最佳分类. ⑸ 根据已知数据用最大隶属原则进行模糊识别. 实验日期:200x年x月x日 操作步骤: ⑴ 数据标准化—平移极差变换. A=[1.0 3.5 1.0 0.0 2.0 2.5 2.0 2.0 2.0 3.5 1.0 1.0 3.0 3.0 3.0 1.0 3.0 3.0 1.0 1.0 5.0 0.5 5.0 2.0 6.0 1.5 4.0 0.0 6.0 1.5 4.0 1.0 5.0 3.0 2.0 2.0 4.0 3.0 1.0 2.0]; n=10;m=4; a1=0;a2=0; for i=1:m a1=A(1,i); a2=A(1,i); for j=1:n if(a1>A(j,i))a1=A(j,i); end if(a2<A(j,i))a2=A(j,i); end end for j=1:n A(j,i)=(A(j,i)-a1)/(a2-a1); end end A 结果: ⑵ 用数量积法建立模糊相似矩阵,并求出其传递闭包矩阵. c=0;s=0; for i=1:n for j=1:n s=0; for k=1:m s=s+abs(A(i,k)*A(j,k)); end if(c<s)c=s; end end end c R(n,n)=1; for i=1:n for j=1:n s=0; for k=1:m s=s+abs(A(i,k)*A(j,k)); end if(j~=i)R(i,j)=s/c; else R(i,j)=1; end end end R tR(n,n)=1; s=0; while s<n*n for i=1:n for j=1:n tR(i,j)=0; for k=1:n if(R(i,k)<R(k,j))s=R(i,k);%先取小 else s=R(k,j); end if(tR(i,j)<s)tR(i,j)=s;%后取大 end end end end for i=1:n for j=1:n if(R(i,j)~=tR(i,j))R(i,j)=tR(i,j); else s=s+1; end end end end tR 结果: [姓名] [学号] 实验三 求解模糊线性规划 实验目的: 掌握将模糊线性规划转化为一般线性规划的方法,会使用数学软件Lindo求解一般线性规划. 实验学时:4学时 实验内容: 将已知模糊线性规划问题用C语言编程生成Lindo软件的数据格式,再用Lindo软件求解. 实验日期:200x年x月x日 操作步骤: 将模糊线性规划问题转化为普通线性规划问题,并用Lindo软件求解. 用C语言编程生成Lindo软件的数据格式 #include<stdio.h> #include<math.h> void main() { double c[]={1,-4,6};//目标系数 double A[3][3]={1,1,1,1,-6,1,1,-3,-1};//技术系数矩阵 double b[]={8,6,-4};//目标右端常数 double fc=38;//第一个线性规划问题的最优值 double dc=8.25;//第一、二个线性规划问题的最优值之差 double d[]={2,1,0.5};//伸缩指标 char opt=1;//0表示min;1表示max char cont[]={-1,1,0};//约束条件-1表示≤;0表示=;1表示≥ int m=3,n=3;//m约束条件个数;n变量个数 FILE *fp; int i,j; fp=fopen("xxxx.txt","w"); if(opt)fprintf(fp,"Max "); else fprintf(fp,"min "); for(j=0;j<n;j++) { if(c[j]==0)continue; if(j&&c[j]>0)fprintf(fp,"+"); else if(c[j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(c[j]),j+1); } fprintf(fp,"\ns.t. "); for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(A[i][j]==0)continue; if(j&&A[i][j]>0)fprintf(fp,"+"); else if(A[i][j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(A[i][j]),j+1); } if(cont[i]==-1)fprintf(fp,"<"); else if(cont[i]==0)fprintf(fp,"="); else fprintf(fp,">"); fprintf(fp,"%6.4f\n",b[i]); } fprintf(fp,"\n\n\n"); if(opt)fprintf(fp,"Max "); else fprintf(fp,"min "); for(j=0;j<n;j++) { if(c[j]==0)continue; if(j&&c[j]>0)fprintf(fp,"+"); else if(c[j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(c[j]),j+1); } fprintf(fp,"\ns.t. "); for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(A[i][j]==0)continue; if(j&&A[i][j]>0)fprintf(fp,"+"); else if(A[i][j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(A[i][j]),j+1); } if(cont[i]==-1)fprintf(fp,"<%6.4f\n",b[i]+d[i]); else if(cont[i]==0) { fprintf(fp,"<%6.4f\n",b[i]+d[i]); for(j=0;j<n;j++) { if(A[i][j]==0)continue; if(j&&A[i][j]>0)fprintf(fp,"+"); else if(A[i][j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(A[i][j]),j+1); } fprintf(fp,">%6.4f\n",b[i]-d[i]); } else fprintf(fp,">%6.4f\n",b[i]-d[i]); } fprintf(fp,"\n\n\n"); fprintf(fp,"Max lmd"); fprintf(fp,"\ns.t. "); for(j=0;j<n;j++) { if(c[j]==0)continue; if(j&&c[j]>0)fprintf(fp,"+"); else if(c[j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(c[j]),j+1); } if(opt)fprintf(fp,"-%6.4flmd>%6.4f\n",dc,fc); else fprintf(fp,"+%6.4flmd<%6.4f\n",dc,fc); for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(A[i][j]==0)continue; if(j&&A[i][j]>0)fprintf(fp,"+"); else if(A[i][j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(A[i][j]),j+1); } if(cont[i]==-1)fprintf(fp,"+%6.4flmd<%6.4f\n",d[i],b[i]+d[i]); else if(cont[i]==0) { fprintf(fp,"+%6.4flmd<%6.4f\n",d[i],b[i]+d[i]); for(j=0;j<n;j++) { if(A[i][j]==0)continue; if(j&&A[i][j]>0)fprintf(fp,"+"); else if(A[i][j]<0)fprintf(fp,"-"); fprintf(fp,"%6.4fx%d",fabs(A[i][j]),j+1); } fprintf(fp,"-%6.4flmd>%6.4f\n",d[i],b[i]-d[i]); } else fprintf(fp,"-%6.4flmd>%6.4f\n",d[i],b[i]-d[i]); } fclose(fp); } 结果: