五、 代码总结
- 关于熵权法代码:
function [W] = Entropy_Method(Z) % 计算有n个样本,m个指标的样本所对应的的熵权 % 输入 % Z : n*m的矩阵(要经过正向化和标准化处理,且元素中不存在负数) % 输出 % W:熵权,1*m的行向量 %% 计算熵权 [n,m] = size(Z); D = zeros(1,m); % 初始化保存信息效用值的行向量 for i = 1:m x = Z(:,i); % 取出第i列的指标 p = x / sum(x); % 注意,p有可能为0,此时计算ln(p)*p时,Matlab会返回NaN,所以这里我们自己定义 一个函数 e = -sum(p .* mylog(p)) / log(n); % 计算信息熵 D(i) = 1- e; % 计算信息效用值 end W = D ./ sum(D); % 将信息效用值归一化,得到权重 end
2.关于蒙特卡罗法代码:
%% 蒙特卡洛模拟:指标的标准差和信息熵成反比 n = 30; % 样本个数 N = 100; % 试验的次数 result = zeros(N,2); % 初始化用来保存信息熵和标准差的矩阵,横坐标表示信息熵,纵坐标表示标 准差 for i = 1:N x = rand(n,1); % 随机生成n个位于区间[0,1]上面的样本 (4) p = x / sum(x); e = -sum(p .* mylog(p)) / log(n); % 计算信息熵 sd = std(x); % 计算标准差(5) result(i,1) = e; result(i,2) = sd; end plot(result(:,1),result(:,2),'o') %(3) xlabel('信息熵') ylabel('标准差') [r,p] = corrcoef(result(:,1),result(:,2)) % 计算相关系数和对应的p值(相关系数5)