2024.5.3

数学建模相对来说这次的题比较简单,我们很快写完了,下面是相关代码:

function [a,b,c,s,w,sort_w,index]=shang1(x,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');

  

ind=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; %指定各指标的正向or负向
[a,b,c,s,w,sort_w,index]=shang1(X,ind)

  这些是问题一的matlab代码

posted @ 2024-05-03 23:56  贾贾鱼  阅读(9)  评论(0)    收藏  举报