% % X    数据矩阵
% % n 数据矩阵行数即评价对象数目
% % m 数据矩阵列数即经济指标数目
% % B 乘以熵权的数据矩阵
% % Dist_max D+ 与最大值的距离向量
% % Dist_min D- 与最小值的距离向量
% % e 熵值列表
% % d 信息熵冗余度
% % w 权值表
% % stand_S 归一化矩阵
% % sorted_S 按照降序排列的数据矩阵 %% 第一步:把数据复制到工作区,并将这个矩阵命名为X
clear;clc
load jingjizhibiao.mat; [n,m] = size(X);
disp(['共有' num2str(n) '个地区, ' num2str(m) '个经济指标']) ; %% 第二步:熵权法赋权
%%计算第j个指标下,第i个样本占该指标的比重p(i,j)
for i=:n
for j=:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%%计算第j个指标的熵值e(j)
k=/log(n);
for j=:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(,m)-e; %计算信息熵冗余度
w=d./sum(d); %求权值w
disp('最后的权重为 ; w =')
w
B=X.* repmat(w,n,);%%每个元数据乘以对应指标的熵权值, disp('加入熵权的矩阵 B = ');
disp(B); clear i j;%%释放无关变量
% % Z = B ./ repmat(sum(B.*B) .^ 0.5, n, );
% % disp('标准化矩阵 Z = ')
% % disp(Z) %% 第三步 计算与最大值的距离和最小值的距离,并算出得分,(topsis分析) Dist_max = sum([(B - repmat(max(B),n,)) .^ ],) .^ 0.5; % D+ 与最大值的距离向量
Dist_min = sum([(B - repmat(min(B),n,)) .^ ],) .^ 0.5; % D- 与最小值的距离向量
disp('D + 为')
Dist_max disp('D - 为')
Dist_min S = Dist_min ./ (Dist_max+Dist_min); % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend')

matlab

05-11 14:11