2024.5.5

问题三的代码:

function [s,w,a,b,c,sort_w,index]=shang3(x,y,ind)
%实现用熵值法求各指标(列)的权重及各数据行的得分
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%ind指示向量,指示各列正向指标还是负向指标,1表示正向指标,2表示负向指标
%s返回各行(样本)得分,w返回各列权重
[n,m]=size(x); % n个样本, m个指标
%%数据的归一化处理
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');
d=[4,1.5,1.5,1,2.5];
e=[32,10,10,2,20];
allp=10;
p=[];
su=[];
su2=[];
su3=[];
xxx=[];
for k=1:3
     A=['第',num2str(k),'组全体科技成果的分数:'];
     su(k)=0;
     su3(k)=0;
     xx=[];
     xxx(k)=0;
     for i=(k-1)*5+1:(k-1)*5+5
         B=['第',num2str(k),'组的第',num2str(i-(k-1)*5),'人的年度个人成果分数:'];
         su2(i)=0;
         xx(i)=y(i,1);
         xxx(k)=(xxx(k)+xx(i));
         for j=1:m
             su(k)=(su(k)+x(i,j)*w(j));
             su2(i)=(su2(i)+x(i,j)*w(j));
         end
         B=[B,num2str(su2(i))];
         B=[B,' '];
         disp(B);
     end
     A=[A,num2str(su(k))];
     disp(A);
     D=['第',num2str(k),'组的团队总绩效:'];
     for i=(k-1)*5+1:(k-1)*5+5
         C=['第',num2str(k),'组的第',num2str(i-(k-1)*5),'人的个人年度总绩效:'];
         p(i)=xx(i)/e(i-(k-1)*5)*d(i-(k-1)*5)+su2(i)/su(k)*allp;
         su3(k)=(su3(k)+p(i));
         C=[C,num2str(p(i))];
         C=[C,' '];
         disp(C);
     end
     D=[D,num2str(su3(k))];
     D=[D,' '];
     disp(D);
     disp(' ');
end

dp=[2.3,2,2.1,37.4,2.2];
alls=0;
E=['最优团队绩效情况下个人经费绩效分数:'];
for i=1:5
    alls=(alls+dp(i)/e(i)*d(i)+su2(i)/su(1)*allp);
    E=[E,num2str(dp(i)/e(i)*d(i))];
    E=[E,' '];
    disp(alls);
end
disp(E);
    
    

  

ind=[1 1 1 1 1 1 1 1 1];
[s,w,a,b,c,sort_w,index]=shang3(B3,B1,ind)

  

posted @ 2024-05-05 17:09  贾贾鱼  阅读(6)  评论(0)    收藏  举报