MATLAB小技巧(34)TOPSIS法
前言
MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!
TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。TOPSIS法是一种逼近于理想解的排序法,该方法只要求各效用函数具有单调递增(或递减)性就行。TOPSIS法是多目标决策分析中一种常用的有效方法,又称为优劣解距离法。
其基本原理,是通过检测评价对象与最优解、最劣解的距离来进行排序,若评价对象最靠近最优解同时又最远离最劣解,则为最好;否则不为最优。其中最优解的各指标值都达到各评价指标的最优值。最劣解的各指标值都达到各评价指标的最差值。
TOPSIS法其中“理想解”和“负理想解”是TOPSIS法的两个基本概念。所谓理想解是一设想的最优的解(方案),它的各个属性值都达到各备选方案中的最好的值;而负理想解是一设想的最劣的解(方案),它的各个属性值都达到各备选方案中的最坏的值。方案排序的规则是把各备选方案与理想解和负理想解做比较,若其中有一个方案最接近理想解,而同时又远离负理想解,则该方案是备选方案中最好的方案。TOPSIS法仿真示例分享给大家,MATLAB版本为MATLAB2015b。
一. MATLAB仿真
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:topsis
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-28
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% I. 清空环境变量
clear all
clc
tic
df=[0.0200 0.0900 4.0000 3.4500 0.7000 12.8200 0.6348 0.3313 0.3403
0.4000 0.5000 7.9200 6.1900 0.4373 3.8300 0.3719 0.2886 0.2980
0.5300 17.1400 11.1300 8.6800 -0.3160 0.0400 0.4687 0.3397 0.3000
0.6100 2.3200 10.7700 9.9500 0.3434 0.7900 0.0634 0.2861 0.2436
1.3400 10.5000 14.8300 9.2100 0.1319 0.0140 0.0809 0.2406 0.2129
0.0800 0.9500 13.8500 8.5800 -0.4055 -0.7100 0.0462 0.1870 0.2113
0.3300 1.4700 13.0400 8.3700 0.3829 2.3300 0.4312 0.2337 0.2432
0.6200 14.2000 13.8700 6.5400 0.4495 4.9700 0.1362 0.2389 0.2438
0.8700 13.0700 16.6100 9.9700 -0.0836 0.3100 0.1548 0.2504 0.2371
1.0900 15.3800 15.0500 10.1500 0.3605 0.4400 -0.0148 0.2223 0.2045 ];
factor=[0.078 0.152 0.068 0.038 0.153 0.033 0.129 0.208 0.141];%因子分析的权重
low=df(:,1:6);
low1=1./low;
mid=df(:,7:9);
mid1=0.25./(0.25+abs(0.25-mid));
x=[low1,mid1];
y=[];
[m,n]=size(x);
for i=1:n
y(:,i)=x(:,i)/sum([x(:,i)]);
%?原始矩阵归一化
end
for i=1:n
w(i)=max(y(:,i));%最大指标
b(i)=min(y(:,i));%最小指标
end
D1=zeros(m,1);
D2=zeros(m,1);
for i=1:m
for j=1:n
ma(i,j)=(y(i,j)-w(j))^2;%计算到最优值距离
mi(i,j)=(y(i,j)-b(j))^2;%计算到最劣值距离
D1(i,1)=D1(i,1)+ma(i,j)*factor(j);
D2(i,1)=D2(i,1)+mi(i,j)*factor(j);
end
D1(i,1)=sqrt(D1(i,1));%求D+
D2(i,1)=sqrt(D2(i,1));%求D-
end
for i=1:m
c(i)=D2(i,1)/(D1(i,1)+D2(i,1));%求C值
end
cc=c';
[e,g]=sort(c,'descend');%排序
zhpx= [e;g]'%排序整理
toc
二. 仿真结果
zhpx =
0.8446 5.0000
0.7129 4.0000
0.7053 10.0000
0.7021 7.0000
0.6937 2.0000
0.6874 1.0000
0.6829 8.0000
0.4724 6.0000
0.4368 3.0000
0.0147 9.0000
时间已过 0.022196 秒。
三. 小结
优劣解距离法(TOPSIS)的仿真示例,后期可能会用到,这里做个笔记。每天学一个MATLAB小知识,大家一起来学习进步阿!