熵权法Matlab编程(刚学matlab的一个小白所编)
熵权法介绍及11行9列的数据可见文章https://wenku.baidu.com/view/c96487ee16fc700aba68fc4e.html。
程序脚本如下:
%% 导入数据
R= xlsread(‘E:\matlab作业\R.xlsx’,‘Sheet1’);
%数据量较少时可用R=[];
%% 数据标准化处理
%确定每一个指标数据中的最大值与最小值(这里就是列向量当中的最大值与最小值)
max_Xi=max(R);
min_Xi=min(R);
%求m,n(这里的n表示指标个数)
[m,n]=size(R);
%分子
fenzi_yij=R-repmat(min_Xi,m,1);
%分母
fenmu_yij=repmat(max_Xi-min_Xi,m,1);
%结果
Yij=fenzi_yij./fenmu_yij;
%% 各指标的信息熵
%求pij
%分之已知,分母求Yij的列向量的和
sum_Yij=sum(Yij,1);
Sum_Yij=repmat(sum_Yij,11,1);
pij=Yij./Sum_Yij
%求对数函数值
for i=1:m
for j=1:n
if pij(i,j)==0
lnpij(i,j)=0;
else
lnpij(i,j)=log(pij(i,j));
end
end
end
%计算Ei
Ei=-1/log(m)*sum(pij.*lnpij);
%% 确定各指标权重
Wi=(1-Ei)./(n-sum(Ei))