matlab—熵权法

matlab—熵权法,第1张

%输入

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个英文单词的句子,每个单词一组,并计算信源熵。周五要交真的很、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10104781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存