数学建模——熵权法Matlab编程计算权重根据2020年美赛f题,利⽤熵权法和Matlab计算出各指标的权重 ⾸先对数据进⾏归⼀化
function y=guiyi(x,type,ymin,ymax)
[n,m]=size(x);
y=zeros(n,m);
for i=1:n
美帝国的崩溃电子书for j=1:m
y(i,j)=x(i,j)/sum(x(:,j));%归⼀化⽅法
end
end
然后对进⾏熵权法的计算
仪表设备
function [s,w]=shang(x,ind)
帅同社区论坛%s返回各⾏(样本)得分,w返回各列权重
[n,m]=size(x); % n个样本, m个指标
X=guiyi(x,1,0.002,0.996);
%%计算第j个指标下,第i个样本占该指标的⽐重p(i,j)
for i=1:n
学术论文for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%%计算第j个指标的熵值e(j)
k=1/log(n);
e=ones(1,m);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end连枷胸
江苏电视台少儿频道d=ones(1,m)-e; %计算信息熵冗余度
w=d./sum(d); %求权值w
s=100*w*X'; %求综合得分
由于在2020年美赛F题中选取的指标均为正向,因此本次代码没有考虑负向指标
最后运⾏main.m
x=xlsread('data.xlsx'); % 读⼊数据
Ind=[1 1 1 1 1 1 1 1 1 1]; %指定各指标的正向or负向,正向全为1,负向为2,有⼏个指标就有⼏列
[s,w]=shang(x,Ind)
注意:读取数据时,数据⽂件和以上两个函数⽂件需放在同⼀⽂件夹下