用MATLAB实现topsis评价法

2023-11-21 22:40
文章标签 matlab 实现 评价 topsis

本文主要是介绍用MATLAB实现topsis评价法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近将topsis评价方法用matlab实现了,就此分享一下具体操作方法,以供大家参考纠正。

1 将topsis的评价流程及函数方程列出

1.1 对各评价对象的参数矩阵进行同向化处理。

一般选择正向化处理,下面列举一些网络上其他博主的公式,以供参考使用。

1.1.1 极大型指标正向化

极大型指标所指意思为,这个指标越大越好,例如(升学率,毕业率等)

Xp=\frac{X-Xmin}{Xmax-Xmin}

X:各极大型属性指标的参数;

Xmax:X参数中的最大参数;

Xmin:X参数中的最小参数;

1.1.2 极小型指标正向化

同极大型指标,即此指标越小越好,例如(挂科率)

Xp=\frac{Xmax-X}{Xmax-Xmin}

公式中各变量意义同1.1.1

1.1.3 中间值型指标正向化

中间值型指标所指意思是,此指标取其中某一个值是最好的,例如(黄金比例)

Xp=1-\frac{\left | X-Xbest \right |}{\left | X-Xbest \right |max}

Xbest:此指标最优值;

1.1.4 区间型指标正向化

区间型指标所指意思为,此指标在某一个区间是最好的,例如(人的体温)

设最优区间[a,b],参数M为

M=max\left \{ a-min\left \{X \right \} ,max\left \{ X \right \}-b\right \}

Xp=\left\{\begin{matrix} 1-\frac{1-X}{M} &X<a \\ 1& a\leqslant X\leqslant b\\ 1-\frac{X-b}{M}& X>b \end{matrix}\right.

将所有指标的参数都进行了同向化处理后,得到一个m×n的同向化矩阵。

1.2 对同向化举证进行归一化处理

Z=\frac{Xp}{\sqrt{\sum_{i=1}^{n}Xp^{2}}}

Z:归一化处理后的m×n矩阵;

1.3 每个参数在Z中所对应的最大值和最小值

Zmax=[max(Z(:,1)),max(Z(:,2)),max(Z(:,3)),max(Z(:,4)),...,max(Z(:,n))];

Zmin=[min(Z(:,1)),min(Z(:,2)),min(Z(:,3)),min(Z(:,4)),...,min(Z(:,n))];

得到两个最大值和最小值向量Zmax和Zmin。

1.4 计算各评价指标的权重

根据专家经验列出一个各评价指标的重要程度矩阵,计算各指标权重ωj。

具体方法可根据AHP(层次分析法)中求权重的方法,这里不列出。

1.5 计算各指标与最优,最差方案的接近程度

Dplus\; i =\sqrt{\sum_{j=1}^{n}\omega j(Zmax\; j-Zij)^{2})}

Dminus\; i =\sqrt{\sum_{j=1}^{n}\omega j(Zmin\; j-Zij)^{2})}

Dplus:指标与最优方案的接近程度;

Dminus:指标与最差方案的接近程度;

ωj:各指标权重;

j:矩阵列数;

i:矩阵行数;

1.6 计算各评价对象与最优方案的接近程度

Si=\frac{Dminus}{Dplus+Dminus}

Si:接近程度向量;

Si越趋近于1,代表此方案越优秀。

2 topsis程序

%初始矩阵
A=[4.69,6.59,51,11.94;2.03,7.86,19,6.46;9.11,6.31,46,8.91;8.61,7.05,46,26.43;7.13,6.5,50,23.57;2.39,6.77,38,24.62;7.69,6.79,38,6.01;9.3,6.81,27,31.57;5.45,7.62,5,18.46;6.19,7.27,17,7.51;7.93,7.53,9,6.52;4.4,7.28,17,25.3;7.46,8.24,23,14.42;2.01,6.4,23,17.91;7.73,6.14,52,15.72;6.35,7.58,25,29.46;8.29,8.41,39,12.02;3.54,7.27,54,3.16;7.44,6.26,8,28.41];
%提取1至4列
B=A(:,1);
C=A(:,2);
D=A(:,3);
E=A(:,4);
%找出1,3,4列最大值和最小值
MAX1=max(B);MAX3=max(D);MAX4=max(E);
MIN1=min(B);MIN3=min(D);MIN4=min(E);
%第2列的最优值为7
BEST=7;
%第4列的最优区间[10,20]
a=10;b=20;
M=max(a-MIN4,MAX4-b);
%矩阵正向化,其中的BP、CP、DP、EP代表每一个指标的参数正向化后的向量
BP=(B-MIN1)/(MAX1-MIN1);
CP=1-((abs(C-BEST))/(max(abs(C-BEST))));
DP=(MAX3-D)/(MAX3-MIN3);
%计算EP
e1=((E<a).*E);
e2=(E>=a&E<=b);
e3=((E>b).*E);
for i=1:length(e1)if e1(i)~=0e1(i)=1-((a-e1(i))/M);end
end
for i=1:length(e3)if e3(i)~=0e3(i)=1-((e3(i)-b)/M);end
end
EP=e1+e2+e3;
%得到正向化矩阵AP
AP=[BP,CP,DP,EP];
%对AP矩阵进行归一化处理,得到矩阵Z
Z=AP./((sum(AP.^2)).^(1/2));
%Z中每一列的最大值和最小值(计算最优方案和最劣方案)
ZMAX=[max(Z(:,1)),max(Z(:,2)),max(Z(:,3)),max(Z(:,4))];
ZMIN=[min(Z(:,1)),min(Z(:,2)),min(Z(:,3)),min(Z(:,4))];
%计算权重,假设其4个因素的重要程度判断矩阵为VERDICT
VERDICT=[1,1,7,5;1,1,7,5;1/7,1/7,1,1/3;1/5,1/5,3,1];
n=4;
%几何平均计算各行向量的权重
Mn=prod(VERDICT,2); 
Mnn=Mn.^(1/n);
%进行归一化
%得到权重Wn
Wn=Mnn/sum(Mnn);
%计算判断矩阵的最大特征值
Aw=VERDICT*Wn;
H=Aw./Wn;
Lambdamax=(1/n)*sum(H);
CI=(Lambdamax-n)/(n-1);
RI=[0,0,0.52,0.89,1.12,1.26,1.36,1.41,1.46,1.49,1.52,1,54,1.56,1.58,1.59];
CR=CI/RI(n);
if    CR<0.1disp('CR<0.1,该矩阵的一致性可以接受')
elsedisp('CR>=0.1,该矩阵的一致性不可接受,需要修改')
end
%计算各评价对象与最优方案、最劣方案的接近程度
%先将Wn列向量转化为行向量,方便计算
Wn=reshape(Wn,1,4);
%将Wn、ZMAX、ZMIN向量复制,形成一个与Z矩阵同行列的矩阵,方便计算
repmat(Wn,19,1);
repmat(ZMAX,19,1);
repmat(ZMIN,19,1);
Dplus=(sum((Wn.*((ZMAX-Z).^2)),2)).^0.5;
Dminus=(sum((Wn.*((ZMIN-Z).^2)),2)).^0.5;
%计算各评价对象与最优方案的贴近程度
Si=Dminus./(Dplus+Dminus)
%Si越趋近于1越优秀

对于matlab的语言,我也只是会粗浅的运用,其中不对的地方望大家纠正。

关于topsis评价法的相关流程和公式,多为参考的网上其他博主的文章,matlab中的代码是自己敲的,此文章的目的为让自己再熟悉一下topsis评价法,也为初学matlab编程的朋友做一个参考。

3 期望

对于topsis方法中,计算各指标与最优,最差方案的接近程度的方法,我是避开了调用矩阵中的元素来作为变量,直接生成一个以矩阵和向量为变量的函数,然后用循环来得出最后的Dplus和Dminus,用的将向量复制成一个同类型矩阵,然后对应元素做运算,我总感觉这样有点low。

希望得到大神指导,如何使向量中的元素作为变量参与函数计算,并进行循环,最后得到一个结果向量。

4 参考文章

https://zhuanlan.zhihu.com/p/37738503

https://yucohny.blog.csdn.net/article/details/113242618?spm=1001.2014.3001.5506

这篇关于用MATLAB实现topsis评价法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/405605

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机