function [Wj2,T1,T2_sort,Ej] = ShangTopsis(X,Variable)
[m,n] = size(X);
X_PO = (X-min(X))./range(X); % 正向化数据
X_NE = (max(X)-X)./range(X); % 负向化数据
Pij = X_PO./sum(X_PO); % 计算m省份n指标的特征比重
logPij = log(Pij);
logPij(logPij==-inf) = 0;
Ej = (-1/log(m))*sum(Pij.*logPij); % 计算j项指标的熵值Ej
Dj = 1-Ej; % 计算j项指标的差异系数Dj
Wj = (Dj/sum(Dj))'; % 根据差异系数确定第j项指标的权重
Wj2 = [Wj;sum(Wj)];
disp("各变量权重并检验和是否为1: ")
T1 = table(Variable,Wj2);
for i = 1:n
V(:,i) = Wj(i)*X_PO(:,i); % 此处有两个方向,第一个方向为继续使用正向化数据(我个人倾向于这种,有始有终贯穿全文嘛),第二个方向为将原始数据标准化
end
PO_Ideal = max(V); % 计算正理想解
NE_Ideal = min(V); % 计算负理想解
PO_D = sqrt(sum((V-PO_Ideal).^2,2)); % 计算正理想解距离
NE_D = sqrt(sum((V-NE_Ideal).^2,2)); % 计算负理想解距离
C = NE_D./(PO_D+NE_D); % 计算贴近度
City_ID = [1:m]';
disp('排名结果(城市序号、正理想解距离、负理想解距离、贴近度): ')
T2 = table(City_ID,PO_D,NE_D,C);
T2_sort = sortrows(T2,4,'descend');
end
评论0