模糊数学
什么是模糊数学?
还是看题吧—>
求R的传递闭包:
R=[1 0.2 0.8 0.5 0.3; 0.2 1 0.1 0.2 0.4; 0.8 0.1 1 0.3 0.1; 0.5 0.2 0.3 1 0.6; 0.3 0.4 0.1 0.6 1]; %传递闭包求法 a=size(R); B=zeros(a); flag=0; while flag==0 for i= 1: a for j= 1: a for k=1:a B( i , j ) = max(min( R( i , k) , R( k, j) ) , B( i , j ) ) ;%R 与 R 内积,先取小再取大 end end end if B==R flag=1; else R=B;%循环计算 R 传递闭包 end end
模糊综合评判
function[B]=fuzzy_zhpj(model,A,R) %模糊综合评判 B=[]; [m,s1]=size(A); [s2,n]=size(R); if(s1~=s2) disp('A的列不等于R的行'); else if(model==1) %主因素决定型 for(i=1:m) for(j=1:n) B(i,j)=0; for(k=1:s1) x=0; if(A(i,k)
j)) x=A(
i,k);
else x=R(k,
j);
end
if(B(
i,
j)
i,
j)=x;
end
end
end
end
elseif(model==
2)
%主因素突出型
for(
i=
1:m)
for(
j=
1:n) B(
i,
j)=
0;
for(k=
1:s1) x=A(
i,k)*R(k,
j);
if(B(
i,
j)
i,
j)=x;
end
end
end
end
elseif(model==
3)
%加权平均型
for(
i=
1:m)
for(
j=
1:n) B(
i,
j)=
0;
for(k=
1:s1) B(
i,
j)=B(
i,
j)+A(
i,k)*R(k,
j);
end
end
end
elseif(model==
4)
%取小上界和型
for(
i=
1:m)
for(
j=
1:n) B(
i,
j)=
0;
for(k=
1:s1) x=
0; x=min(A(
i,k),R(k,
j)); B(
i,
j)=B(
i,
j)+x;
end B(
i,
j)=min(B(
i,
j),
1);
end
end
elseif(model==
5)
%均衡平均型 C=
[]; C=sum(R);
for(
j=
1:n)
for(
i=
1:s2) R(
i,
j)=R(
i,
j)/C(
j);
end
end
for(
i=
1:m)
for(
j=
1:n) B(
i,
j)=
0;
for(k=
1:s1) x=
0; x=min(A(
i,k),R(k,
j)); B(
i,
j)=B(
i,
j)+x;
end
end
end
else
disp(
'模型赋值不当');
end
end
end
只要把模型代入到代码里并且选择你想要的model即可。
模糊聚类
(一)基于择近原则的模糊聚类
代码如下:
function [ y ] = fuz_closing( A,B,type )%反映模糊集A和B的贴近程度 %UNTITLED6 此处显示有关此函数的摘要 % 此处显示详细说明 [m,n]=size(A); switch type case 1 %海明贴近度 y=1-sum(abs(A-B))/n; case 2 %欧式贴进度 y=1-(sum(A-B).^2)^(1/2)/sqrt(n); case 3 %格贴近度 y1=max(min(ones(m,n)-A,ones(m,n)-B)); %ones(m,n)-A等于A^c y2=max(min(A,B)); y=min(y1,y2); end %贴进度越大越接近 end
没错了就是这种题目,解法代码如下:
%用于评判属于哪个水平 A=[0.4 0.3 0.2 0.1 0.2]; B=[0.5 0.5 0.6 0.4 0.3; 0.3 0.3 0.4 0.2 0.2; 0.2 0.2 0.3 0.1 0.1; 0.1 0.1 0.2 0.1 0; 0.1 0.1 0.1 0.1 0]; for i=1:5 haiming(i)=fuz_closing(A,B(i,:),1); oushi(i)=fuz_closing(A,B(i,:),2); ge(i)=fuz_closing(A,B(i,:),3); end haiming; %输出海明法 oushi; %输出欧式法 ge; %输出格法
然后的出三个评判结果,数值最高的在哪个位置就是哪个等级—>所以不同的评判标准有可能星级不同~
(二)基于模糊等价关系的聚类
这个需要步骤哟~
第一步:样本数据归一化
%需要写三个函数: %第一个: function [ B ] = fco( Q,R ) %实现模糊合成 [n,m]=size(Q); [m,l]=size(R); B=zeros(n,l); for i =1:n for k=1:l B(i,k)=max(min([Q(i,:);R(:,k)'])); end end end %第二个函数: function [ B,k ] = tran_R( R ) %求R的传递闭包 %UNTITLED11 此处显示有关此函数的摘要 % k为满足R^2k=R^k的最小自然数k a=length(R); B=zeros(a,a); flag=0; k=1/2; while flag==0 B=fco(R,R); %模糊合成运算 k=2*k; if B==R flag=1; else R=B; %循环计算R的传递闭包 end end end %第三个函数: function [R] = fuz_distance( x,type ) %x为归一化的数据矩阵(必须处理过哟),type选择计算相似度的方法 % 返回模糊矩阵的相似矩阵R %距离法的选择参数c和a,需要根据具体情况修改以保证R(i,j)属于[0,1] [n,m]=size(x); c=0.1; a=1; for i =1:n for j=1:n switch type case 1 %夹角余弦法 R(i,j)=(x(i,:)*x(j,:)')/(norm(x(i,:),2)); case 2 %相关系数法 Dxi=abs(x(i,:)-mean(x(i,:))); Dxj=abs(x(j,:)-mean(x(j,:))); R(i,j)=(Dxi*Dxj')/(norm(Dxi,2)*norm(Dxj,2)); case 3 %海明距离法 d=sum(abs(x(i,:)-x(j,:))); R(i,j)=1-c*d^a; case 4 %欧式距离法 d=norm(x(i,:)-x(j,:),2); R(i,j)=1-c*d^a; case 5 %切比雪夫距离法 d=max(abs(x(i,:)-x(j,:))); R(i,j)=1-c*d^a; case 6 %最大最小(贴近度)法 R(i,j)=sum(min([x(i,:);x(j,:)]))/sum(max([x(i,:);x(j,:)])); case 7 %算术平均最小(贴近度)法 R(i,j)=2*sum(min([x(i,:);x(j,:)]))/sum(x(i,:)+x(j,:)); case 8 %几何平均最小(贴近度)法 R(i,j)=sum(min([x(i,:);x(j,:)]))/sum(sqrt(x(i,:).*x(j,:))); end end end end
第三步:求出R的传递闭包t(R)
选取适合的lambda,利用lambda-截矩阵进行分类
代码如下:
function [ y ] = fuz_lamda( X,m ) %用lamda-截矩阵法将样本分成m类 lamda=unique(X)'; X(find(X
=lamda(m)))=1; y=X; end
接下来我们解一题试试:
整理来自~
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215065.html原文链接:https://javaforall.net

