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)

  

posted @ 2024-05-04 21:51  贾贾鱼  阅读(15)  评论(0)    收藏  举报