Rivers分享 http://blog.sciencenet.cn/u/sdssxwfd

博文

熵权法的Matlab实现

已有 8549 次阅读 2021-9-27 14:53 |个人分类:数学模型|系统分类:科研笔记

       编程目的       

       本程序是根据[1]中关于熵权法的内容编写的,熵权法的理论请参考[1]中第十五章。为方便不会编程的同学,特编写成了一个函数,只要按要求输入决策矩阵,就可以输出规范化矩阵与各方案的权重,从而根据各方案的权重做出决策。

       使用说明与免责

      程序中只讨论了效益型与成本型属性,其他的属性请根据自己的实际需要,修改本程序中的部分语句即可。只讨论了规范化矩阵的归一化。矩阵的最大化和模一化方法都没有讨论,如果要讨论这两个方法也可通过修改其中的语句实现。

       对参加数学建模比赛的同学请不要复制本程序代码放入你们论文的附录中,而是把它作为一个参考文献,直接使用,同时在参考文献中标注,否则可能出现代码重复。对于由于复制本代码而造成的论文出现重复率高的问题,本人不负责。

      本人不保证本程序一定适合你们的问题,如果运行多次不能满足要求请更换程序或自己编写相关代码。


function [R,z]=entropymethod(A)

%A为决策矩阵,特别要求:前几列为成本型,后面全部为效益型,

%R为规范矩阵,z为各方案的权重,

%20210927

clc;

[m,n]=size(A);

disp('*****************************************************')

disp('使用本程序时请先把效益型与成本型属性分开,')

disp('把成本型属性全部放在决策矩阵的前几列!!!');

disp('记住属性原来的位置');

disp('*****************************************************')

pause

modi=input('如果已完成上述操作请按1继续,按2退出:');

if modi==2

   R=[];z=[];

    return

end

costcl=input('请输入成本属性的列数(如果没有成本型属性请输入0):');

for i=1:costcl

    R(:,i)=min(A(:,i))./A(:,i);  %按rij=min(rij)/rij规范化

end

for i=costcl+1:n

    R(:,i)=A(:,i)/max(A(:,i));   %按rij=rij/max(rij)规范化

end

for i=1:m

    for j=1:n

        r(i,j)=R(i,j)/sum(R(:,j));

    end

end

for i=1:m

    for j=1:n

        r1(i,j)=r(i,j)*log(r(i,j));

        if r(i,j)==0

            r1(i,j)=0;

        else

            r1(i,j)=r(i,j)*log(r(i,j));

        end

        e(j)=-1/log(n)*sum(r1(:,j));

    end

end

for j=1:n

    w(j)=(1-e(j))/sum(1-e);

end

z=(r*w')';







参考文献

[1]刘保东,宿洁,陈建良.  数学建模基础教程.北京:高等教育出版社,2015,9.



https://blog.sciencenet.cn/blog-216525-1305891.html

上一篇:Matlab课件
下一篇:[转载]python 合并多个EXCEL文件
收藏 IP: 61.179.124.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 08:57

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部