模糊数学实验指导书
写实验报告注意事项:
统一用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);
}
结果: