MATLAB小技巧(34)TOPSIS法

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小知识,大家一起来学习进步阿!

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125464592
今日推荐