2024.5.4
数学建模问题二的代码:
function [a,b,s,w,X,index]=shang2(x,ind)
%实现用熵值法求各指标(列)的权重及各数据行的得分
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%ind指示向量,指示各列正向指标还是负向指标,1表示正向指标,2表示负向指标
%s返回各行(样本)得分,w返回各列权重
[n,m]=size(x); % n个样本, m个指标
%%数据的归一化处理
c=[];
sort_w=[];
su=0;
su2=0.0;
ss=[];
sort_ss=[];
index2=[];
xxx=[];
allw=[35,28,22,15];
for i=1:m
if ind(i)==1 %正向指标归一化
X(:,i)=guiyi(x(:,i),1,0.002,0.996); %若归一化到[0,1], 0会出问题
else %负向指标归一化
X(:,i)=guiyi(x(:,i),2,0.002,0.996);
end
end
%%计算第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)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; %计算信息熵冗余度
w=d./sum(d); %求权值w
s=100*w*X'; %求综合得分
a=sum(s);
b=100*w*X'/a;
c=100*w*X'*50/a;
[sort_w,index]=sort(w,'descend');
for k=1:4
xx=[0,0,0,0,0];
su=0;
su2=0.0;
A=['第',num2str(k),'组包含的作品种类:'];
for i=1:m
for j=(k-1)*5+1:(k-1)*5+5
su=su+x(j,index(i));
su2=su2+x(j,index(i))*w(index(i));
xx(j-(k-1)*5)=(xx(j-(k-1)*5)+x(j,index(i))*w(index(i)));
if su>=20
break;
end
end
if su>=20
for o=1:i
A=[A,num2str(index(o))];
A=[A,' '];
end
H=['组内队员分数(1-5):'];
I=['组内队员占奖金权重(1-5):'];
for j=(k-1)*5+1:(k-1)*5+5
H=[H,num2str(xx(j-(k-1)*5))];
H=[H,' '];
xxx(j)=xx(j-(k-1)*5)/su2;
I=[I,num2str(xxx(j))];
I=[I,' '];
end
disp(A);
B=['最后一个作品到第几人结束:',num2str(j-(k-1)*5)];
disp(B);
C=['该组总分数为:',num2str(su2)];
disp(C);
[sort_xx,index3]=sort(xx,'descend');
D=['组内排名:',num2str(index3(1)),' ',num2str(index3(2)),' ',num2str(index3(3)),' ',num2str(index3(4)),' ',num2str(index3(5))];
disp(D);
disp(H);
disp(I);
ss(k)=su2;
break;
end
end
disp(' ');
end
disp(' ');
E=['组间分数排名(1-4):'];
F=['组间排名(组号):'];
G=['各组奖金(1-4)(单位:万元):'];
[sort_ss,index2]=sort(ss,'descend');
t=0;
for o=1:length(sort_ss)
E=[E,num2str(sort_ss(o))];
F=[F,num2str(index2(o))];
E=[E,' '];
F=[F,' '];
for r=1:4
if index2(r)==o
for e=(o-1)*5+1:(o-1)*5+5
xxx(e)=(xxx(e)*allw(r));
end
G=[G,num2str(allw(r))];
G=[G,' '];
end
end
end
disp(E);
disp(F);
disp(G);
for k=1:4
A=['第',num2str(k),'组组员的奖金(单位:万元):'];
for e=(k-1)*5+1:(k-1)*5+5
A=[A,num2str(xxx(e))];
A=[A,' '];
end
disp(A);
end
Ind=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; %指定各指标的正向or负向 [a,b,S,W,X,index]=shang2(B2,Ind)

浙公网安备 33010602011771号