%输入
x=[
369 371 365 387
371 407 387 442
430 375 363 443
408 378 365 449
393 387 437 447
418 396 372 446
];
% 函数shangm, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个组, 每列对应一个成分指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % n=响应面/实验组数, m=成分指标
%% 数据的归一化处理
[X,ps]=mapminmax(x',0,1);
psymin=0002; % 归一化后的最小值
psymax=0996; % 归一化后的最大值
psyrange=psymax-psymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
X=X'; % X为归一化后的数据
%% 计算第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);
for j=1:m
e(j)=-ksum(p(:,j)log(p(:,j)));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d/sum(d) % 求权值w
y(:,1)=x(:,1)w(1)+x(:,2)w(2);%输出
y
function shang(x)
[n,m]=size(x);
k=1/log(n);
X=zeros(n,m);
for j=1:m
for i=1:n
c=sort(x(:,j));
big=x(n,j);
small=x(1,j);
X(i,j)=(x(i,j)-small)/(big-small)+1;
end
end
p=[];
for j=1:m
th=0;
for t=(X(:,1))'
th=th+t;
end
Ph=X(:,j)/th;
p=[p Ph];
end
e=[];
for j=1:m
eg=0;
for i=1:n
eh=-kp(i,j)log(p(i,j));
eg=eg+eh;
end
e=[e,eg];
end
E=0;
for j=1:m
E=E+e(j);
end
g=[];
for j=1:m
gh=(1-e(j))/(m-E);
g=[g,gh];
end
Eh=0;
for nh=g
Eh=Eh+nh;
end
w=[];
for j=1:m
wh=g(j)/Eh;
w=[w,wh];
end
s=[];
for i=1:n
sh=w(i)p(i,:);
shen=0;
for she=sh
shen=shen+she;
end
s=[s ,shen];
end
以上就是关于matlab—熵权法全部的内容,包括:matlab—熵权法、利用matlab编程,写一个不少于50个英文单词的句子,每个单词一组,并计算信源熵。周五要交真的很、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)