[n,m] = size(Z); D = zeros(1,m); Z=Z./repmat(sum(Z),n,1) for i=1:m e = -sum(Z(:,i) .* mylog(Z(:,i)))/ log(n) D(i)=1-e; end W = D ./ sum(D);
其中Z是Topsis法生成的标准化之后的矩阵
由于ln0!=0,所以这里我们要写一个当数据为0时ln值=0的函数
% 重新定义一个mylog函数,当输入的p中元素为0时,返回0 function [lnp] = mylog(p) n = length(p); % 向量的长度 lnp = zeros(n,1); % 初始化最后的结果 for i = 1:n % 开始循环 if p(i) == 0 % 如果第i个元素为0 lnp(i) = 0; % 那么返回的第i个结果也为0 else lnp(i) = log(p(i)); end end end
为了帮助大家回顾理论知识,这里将上一讲的理论部分呈现给大家
本篇文章是学习清风老师网课后的总结,希望对大家有所帮助
数学建模.熵权法代码
最新推荐文章于 2024-09-24 16:25:47 发布