徐伟
熵权法的Matlab实现
2021-9-27 14:53
阅读:624

       编程目的       

       本程序是根据[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.

转载本文请联系原作者获取授权,同时请注明本文来自徐伟科学网博客。

链接地址:http://wap.sciencenet.cn/blog-216525-1305891.html?mobile=1

收藏

分享到:

下一篇
当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?