%1.读取和预处理数据:
clc
close all
clc,clear
data = xlsread("E:\数学建模\个人资料\2020年C题\企业指标","result"); % 读取数据,其中xlsread("文件所在位置“,”工作表名称“)
data1 = data(:,2:12); % 删除企业代号,即是从第2列到12列,而第1列是企业代号,故是删除企业代号
result = zeros(123,3); %创建一个123行3列的零矩阵来存储结果
%2.归一化处理:
for i = 1:11
maxx = max(data1(:,i)); %取每一列的最大值放入maxx
minn = min(data1(:,i)); %取每一列的最小值放入minn
if i == 4 || i == 5
data1(:,i) = (maxx - data1(:,i)) / (maxx - minn); % 负向指标归一化
else
data1(:,i) = (data1(:,i) - minn) / (maxx - minn); % 正向指标归一化
end
%这段条件语句用于处理特定的指标,即第 4 和第 5 列的数据。具体来说,这些列被视为负向指标。因此,需要用不同的归一化方法进行处理。负向指标的含义是,数值越小越好,比如污染指数、事故率等;而正向指标的含义是,数值越大越好,比如利润、产量等
end
%通过遍历每一列数据,对正向和负向指标分别进行归一化处理,使数据在0到1之间
%3.熵权法确定权重:
X = data1; % 保存一下方便后面topsis代码书写
data1(find(data1 == 0)) = [0.0001];
data1(find(data1 == 1)) = [0.9999]; %也可以不用[],这里表示把表data1中的所有0改写成0.0001,所有的1改写成0.9999,这样做的目的是:防止 e = p.*log(p) 无意义
summ = sum(data1); %把data1按行求和
p = data1 ./ summ; %./表示的是每个对应位置的元素相除,故其必须是相同大小的矩阵,即如A为5*5矩阵,则与它./的矩阵B也必须是5*5的矩阵
e = p .* log(p); %计算熵值,表示的公式是:eij=pijlog(pij)其中,pij 是数据点 (i, j)在其对应指标中的比重。
k = -1 / log(123); %k 是一个常数,通常取 k=−1/log(n),n 是样本数量。
Ej = sum(e) * k; %对每个指标的所有数据点的熵值贡献求和,得到每个指标的总熵值,其中乘以 k是为了使熵值规范化,使其在 0 和 1 之间。
Dj = 1 - Ej; %计算每个指标的信息效用性,而因为Dj
表示该指标提供的信息量。熵值 EjE_jEj 越小,说明该指标的信息量越大,所以 Dj=1−Ej。
w = Dj / sum(Dj); %计算每个指标的权重 wj,使得所有权重之和为 1
%4.TOPSIS 方法计算风险程度:
for i = 1:11
X(:,i) = X(:,i) / sqrt(sum(X(:,i).^2));
end % 正向化矩阵标准化:这一步是对原始数据矩阵 XXX 进行标准化处理。对每一个指标列(假设共有11个指标),将每一个值除以该列所有值的平方和的平方根。这种处理消除了指标之间的量纲差异。
R = w .* X; % 构造加权规范阵
r_max = max(R); % 每个指标的最大值
r_min = min(R); % 每个指标的最小值
d_z = sqrt(sum((R - repmat(r_max, size(R,1), 1)).^2, 2)); % d+ 向量,dz 表示每个方案到理想解的欧氏距离;
d_f = sqrt(sum((R - repmat(r_min, size(R,1), 1)).^2, 2)); % d- 向量 ,dfd_fdf 表示每个方案到负理想解的欧氏距离。
s = d_f ./ (d_z + d_f); % 1 - 风险程度
%s 是每个方案的可靠性程度,即方案越接近负理想解且越远离理想解,其可靠性程度越低;
%f是每个方案的风险程度,计算公式为:f=1−s。
result(:,1) = data(:,1);
result(:,2) = f; % 风险程度
result(:,3) = s; % 可靠性程度
%对标准化矩阵进行加权处理。
%计算每个企业的正理想解(最优)和负理想解(最差)距离,并得出综合得分 s
和风险程度 f
。
%5.绘制图像:
plotyy(result(:,1), data(:,12), result(:,1), s);%plotyy
用于创建带有两个 y 轴的图形,其中一个表示企业编号与某个数据列(如利润)的关系,%另一个表示企业编号与可靠性程度的关系。