Matlab计算熵权法

如需转载,请注明来源,谢谢合作。
若本文对您有一点点的帮助,欢迎点赞、评论和关注。您的鼓励和支持是我继续学习和分享的动力。
熵权法是一种根据包含各个变量的变异程度进行赋权的方法,是一种客观赋权法。而直接给定变量权重或者专家打分给出权重则属于主观赋权法。熵权法的思想是:变量数值变化越大,变异程度越大,则其权重应该更大;反之权重则越小。这是较为合理的。
熵权法计算过程不难,运用excel也可计算。但其本身较为繁杂,需要做多个变量甚至多个个体时,matlab就显示了矩阵运算快速、准确和方便的特点。作者也提供了利用excel和matlab计算的对比案例数据,供大家参考、理解和交流。
https://pan.baidu.com/s/16583MuoxgehtnpCrUisXGg(请关注作者,并在下方评论留下邮箱向作者获取密码)

熵权法的计算公式:

这里写图片描述

熵权法matlab程序:

%{选择下面一行,F9运行。新建空矩阵R,将51年*6个变量(x1到x6)的数据粘贴入矩阵R
R=[] 
%}clear
%1
[rows,cols]=size(R);   % 输入矩阵的大小,rows为对象个数,cols为指标个数
k=1/log(rows);         % 求k
Rmin = min(R);
Rmax = max(R);
A = max(R) - min(R);
y = R - repmat(Rmin,51,1);
%y(i,j) = (R - repmat(Rmin,51,1))/(repmat(A,51,1));
for j = 1 : size(y,2)
     y(:,j) = y(:,j)/A(j)
end
%2 求Y(i,j)
S = sum(y,1)
Y = zeros(rows,cols); 
for i = 1 : size(Y,2)
    Y(:,i) = y(:,i)/S(i)
end
%3
lnYij=zeros(rows,cols);  % 初始化lnYij
% 计算lnYij
for i=1:rows
    for j=1:cols
        if Y(i,j)==0
            lnYij(i,j)=0;
        else
            lnYij(i,j)=log(Y(i,j));
        end
    end
end
ej=-k*(sum(Y.*lnYij,1)); % 计算熵值Hj
%4
weights=(1-ej)/(cols-sum(ej));
%5
F = zeros(rows,cols);
for k = 1 : size(R,2)
     F(:,k) = weights(k)*y(:,k)
end
format long
F = sum(F,2)  %F即为对6个变量进行熵权法客观赋权后,计算获得的51年来的综合评分

对比提供的excel后发现,matlab极为快速、准确、方便对繁杂的熵权法进行了运算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章