📄 fuzzy.m
字号:
clear;
A=[11.2,9.3,0.12,0.08;10.6,10.5,0.16,0.24;12.4,9.0,0.12,0.20;33.4,4.4,0.02,0.00;40.6,7.3,0.07,0.10;73.8,11.5,0.14,0.05;94.7,13.2,0.48,0.06;36.3,11.0,0.18,0.30;24.1,8.2,0.10,0.12;15.3,6.2,0.08,0.10];
Coi=[10,0.5,0.01,0.05];%水质标准向量
%构造F关系矩阵X
[m,n]=size(A);l=size(Coi);
for i=1:m
for j=1:l
if 0<=A(i,j)&A(i,j)<=Coi(j)
X(i,j)=1;
else
X(i,j)=Coi(j)/A(i,j);
end
end
end
%以下是求F关系X的相似矩阵R
%采用的是最大最小值法
[m,n]=size(X);
for i=1:m
for j=1:m
smin=0;smax=0;
for k=1:n
if X(i,k)<=X(j,k)
mininum=X(i,k);maxinum=X(j,k);
else
mininum=X(j,k);maxinum=X(i,k);
end
smin=smin+mininum;
smax=smax+maxinum;
end
R(i,j)=smin/(smax);
end
end
fprintf('十类水体单元的相似矩阵为');
R
%以下是求R的传递闭包Rt
Rt=R;
[m,n]=size(Rt);
while(1)
for i=1:m
for j=1:n
for k=1:m
r(k)=min(Rt(i,k),Rt(k,j));
end
C(i,j)=max(r);
end
end
if C==Rt
break;
end
Rt=C;
end
fprintf('相似矩阵的传递闭包为');
Rt
%下面求截向量
[m,n]=size(Rt);
k=1;
x(1)=Rt(1,1);
for i=1:m
for j=1:n
temp=Rt(i,j);
for l=1:k
if temp==x(l)
break;
end
end
if temp~=x(l)
k=k+1;
x(k)=temp;
end
end
end
%对截向量x按从小到大的顺序进行排列,采用冒泡排序法
[l,c]=size(x);
for i=1:c
for j=2:c
if x(j)<x(j-1)
temp=x(j);x(j)=x(j-1);x(j-1)=temp;
end
end
end
fprintf('截向量为');
x
%然后聚类
for k=1:c
TEMP=Rt;
fprintf('x=%d时的截矩阵为:\n',x(k))
for i=1:m
for j=1:n
if TEMP(i,j)>=x(k)
TEMP(i,j)=1;
else TEMP(i,j)=0;
end
end
end
TEMP
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -