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'})
【转自】很实用的学习方法,掌握一个个知识点进而提升自己的实力!