请参考https://blog.csdn.net/qq_36384657/article/details/98188769
mlx代码
topsis 优劣解距离法
参数说明:
分数、获奖次数、价值等 属于极大型指标(效益型)
不及格次数、被批评次数、成本等 属于极小型指标(成本型)
clc;clear;
judge1 = [89 60 74 99]'; % 分数
judge2 = [89 60 74 99; 2 0 1 3]'; % 分数 和 被批评次数
算法核心:
一个指标的情况:
(排序不就行了???)
多个指标的情况:
https://blog.csdn.net/qq_36384657/article/details/98188769
% 1.将指标【转化为极大型】 x = max - x;
judge2(:,2) = max(judge2(:,2)) - judge2(:,2);
% 2.【标准化】处理 [每个元素除以其所在列各元素平方和的开方]
judge2 = judge2 ./ sqrt( sum(judge2 .^ 2) );
% 3.【找出距离】 找出与最大最小值的距离
% 这里的最大(小)值 (max1,max2,max3,...)为各列的最大(小)值
nmax = max(judge2);
nmin = min(judge2);
distanceMax = sqrt(sum((judge2 - nmax) .^ 2 ,2)); % 减去最大值,平方,按照行求和,开根号
distanceMin = sqrt(sum((judge2 - nmin) .^ 2 ,2)); % 减去最小值,平方,按照行求和,开根号
% 4.【计算分值】 (x - min) / (max - min)
score = distanceMin ./ (distanceMax + distanceMin);
% 5.【归一化】
score = score ./ sum(score);
end
% 显示名次
[~,I] = sort(score);
disp('最终排名:');
disp([score I])