TOPSIS方法Matlab复现代码
原文地址:基于语言直觉模糊集的应急物流预案决策
%% 求综合矩阵每个属性的最大最小值
C = num2cell(A,2)
D = reshape(C,4,4)
[n,m] = size(D)
for i=1:16
Sco(i) = (16+D{i}(1)+D{i}(2)-D{i}(3)-D{i}(4))/4;
end
Z = reshape(Sco,4,4);
max_Z = max(Z);
min_Z = min(Z);
%% 求每个方案与正理想值之间的距离
% 得正理想值得位置
[r,c]=find(Z == max_Z)
% 得出每列理想值
for i=1:4
Max_Z(i)=D(r(i),c(i));
end
Max_Zz = repmat(Max_Z,n,1);
% 求每列评价信息与理想值之间的距离
for i = 1:16
D_P(i) =(abs(D{i}(1)-Max_Zz{i}(1))...
+abs(D{i}(2)-Max_Zz{i}(2))...
+abs(D{i}(3)-Max_Zz{i}(3))...
+abs(D{i}(4)-Max_Zz{i}(4))...
+abs(D{i}(2)-Max_Zz{i}(2)+D{i}(4)-Max_Zz{i}(4))...
+abs(D{i}(1)-Max_Zz{i}(1)+D{i}(3)-Max_Zz{i}(3)))/32;
end
D_P=reshape(D_P,4,4)
D_Pf=mean(D_P,2)
%% 求每个方案与负理想值之间的距离
[r,c]=find(Z == min_Z)
for i=1:4
Min_Z(i)=D(r(i),c(i));
end
Min_Zz = repmat(Min_Z,n,1);
for i = 1:16
D_N(i) =(abs(D{i}(1)-Min_Zz{i}(1))...
+abs(D{i}(2)-Min_Zz{i}(2))...
+abs(D{i}(3)-Min_Zz{i}(3))...
+abs(D{i}(4)-Min_Zz{i}(4))...
+abs(D{i}(2)-Min_Zz{i}(2)+D{i}(4)-Min_Zz{i}(4))...
+abs(D{i}(1)-Min_Zz{i}(1)+D{i}(3)-Min_Zz{i}(3)))/32;
end
D_N=reshape(D_N,4,4)
D_Nf=mean(D_N,2)
%% 计算方案x的贴近度
CO = D_Nf./(D_Nf+D_Pf)