【转自】TOPSIS方法介绍及代码

1.TOPSIS方法及程序

正理想解:各指标属性达到最满意的解。
负理想解:各指标属性达到最不满意的解。

1.1TOPSIS方法步骤

在这里插入图片描述
Step1:计算规范决策矩阵。规范值为:.
在这里插入图片描述
Step2:计算加权规范决策矩阵
在这里插入图片描述
Step3:确定正理想解和负理想解
在这里插入图片描述
Step4:计算某个方案与正理想解和负理想解的分离度:
在这里插入图片描述
Step5:计算备选方案与正理想解的相对接近度
在这里插入图片描述
Step6:根据 ,由大到小对备选方案排序。

1.2应用算例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序运行结果:
在这里插入图片描述

1.3程序实现

主程序main.m

clc,
clear all;
load sj.mat
X = shuju;% 第2/3/4列进行数据预处理
[n,m] = size(X);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标'])

%% 第一步:正向化(极小型、中间型、区间型转极大型)
%极小型转化为极大型
x1 =  X(:,1);
posit_x1 = 1/x1;
X1 = posit_x1';

%功率越大越好,归一化处理
x2 =  X(:,2);
posit_x2 = (max(x2) - x2)/(max(x2)-min(x2));

%价格越低越好
x3 =  X(:,3);
posit_x3 = (max(x3) - x3)/(max(x3)-min(x3));
% X3 = posit_x3';

%中间型转化为极大型
best1 = 0.7;
x4 =  X(:,4);
M1 = max(abs(x4-best1));
posit_x4 = 1 - abs(x4-best1) / M1;
X4 = posit_x4';

best2 = 0.7;
x5 =  X(:,5);
M2 = max(abs(x5-best2));
posit_x5 = 1 - abs(x5-best2) / M2;
X5 = posit_x5';

best3 = 0.7;
x6 =  X(:,6);
M3 = max(abs(x6-best3));
posit_x6 = 1 - abs(x6-best3) / M3;
X6 = posit_x6';
X = [X1 posit_x2 posit_x3 posit_x4 posit_x5 posit_x6 ];
disp('正向化后的矩阵 X =  ')
disp(X)

%%  第二步:对正向化矩阵标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)

%%  第三步:计算与最大值和最小值的距离,并计算得分

D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分

disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend');
disp('标准化后得分为:')
disp(sorted_S)
disp('对应的下标为:')
disp(index)

%%  最后,绘图柱状图
clf,
figure(1);
k = 1:1:4;
plot(k,stand_S,'r','LineWidth',2,'MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor',[0.5,0.5,0.5]);
set(gca,'XLim',[0 4]);%X轴的数据显示范围
set(gca,'XTick',[0:1:4]);%设置要显示坐标刻度
% set(gca,'YLim',[95 101]);%X轴的数据显示范围
% set(gca,'YTick',[95:1:101]);%设置要显示坐标刻度
grid on
figure(2);
b=bar(k,stand_S,0.5);
set(gca,'XLim',[0 4.5]);%X轴的数据显示范围
grid on;
% set(gca,'XTickLabel',{'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20'})


【转自】很实用的学习方法,掌握一个个知识点进而提升自己的实力!

猜你喜欢

转载自blog.csdn.net/qq_42249050/article/details/106183293