function [s,w]=shang(x)
x=[13.24 6.98 109.27 9.24 42.8 272 50.22
10.92 4.99 103.30 8.52 30.5 229 53.78
14.23 7.39 102.65 11.47 37.5 620 55.01
10.22 3.20 98.23 13.99 43.3 167 46.30
10.80 6.10 118.62 8.27 32.9 597 68.00
13.18 6.95 104.91 9.32 38.8 391 49.32
13.52 6.63 105.29 10.87 41.2 318 49.28
6.49 0.26 102.74 12.16 28.9 297 67.05
16.44 11.47 104.5 6.87 38.9 13 40.08
12.98 5.80 104.68 9.22 45.6 199 40.02
17.29 14.23 105.76 10.06 36.16 1092 88.27
];
% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % n=23个国家, m=5个指标
%% 数据的归一化处理
% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[X,ps]=mapminmax(x',0,1);
ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
X=X'; % X为归一化后的数据, 23行(国家), 5列(指标)
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m