数学建模—TOPSIS法

数学建模—TOPSIS法

定义

​ TOPSIS法可翻译为逼近理想解排序法,国内常简称为优劣解距离法。TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。

​ 那如何计算指标呢?

​ 那么我们假设只有一个指标计算得分,例如

姓名成绩
小王99
小陈100
小李60
小明72

将此数据转化为矩阵
[ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 z n 2 ⋯ z n m ] \left[ \begin{array}{l} z_{11}& z_{12}& \cdots& z_{1m}\\ z_{21}& z_{22}& \cdots& z_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ z_{n1}& z_{n2}& \cdots& z_{nm}\\ \end{array} \right] z11z21zn1z12z22zn2z1mz2mznm

topsis中参数的定义

定义最大值
z + = ( z 1 + , z 2 + , . . . , z m + ) = ( max ⁡ { z 11 , z 21 , . . . , z n 1 } , max ⁡ { z 12 , z 22 , . . . , z n 2 } , . . . , max ⁡ { z 1 m , z 2 m , . . . , z n m } ) z^+=\text{(}z_{1}^{+},z_{2}^{+},...,z_{m}^{+}\text{)}=\left( \max \left\{ z_{11},z_{21},...,z_{n1} \right\} ,\max \left\{ z_{12},z_{22},...,z_{n2} \right\} ,...,\max \left\{ z_{1m},z_{2m},...,z_{nm} \right\} \right) \\ z+=z1+,z2+,...,zm+=(max{z11,z21,...,zn1},max{z12,z22,...,zn2},...,max{z1m,z2m,...,znm})
定义最小值
z − = ( z 1 − , z 2 − , . . . , z m − ) = ( min ⁡ { z 11 , z 21 , . . . , z n 1 } min ⁡ { z 12 , z 22 , . . . , z n 2 } , . . . , min ⁡ { z 1 m , z 2 m , . . . , z n m } ) z^-=\text{(}z_{1}^{-},z_{2}^{-},...,z_{m}^{-}\text{)}=\left( \min \left\{ z_{11},z_{21},...,z_{n1} \right\} \min \left\{ z_{12},z_{22},...,z_{n2} \right\} ,...,\min \left\{ z_{1m},z_{2m},...,z_{nm} \right\} \right) z=z1,z2,...,zm=(min{z11,z21,...,zn1}min{z12,z22,...,zn2},...,min{z1m,z2m,...,znm})
定义第i(i=1,2,… ,n)个评价对象与最大值的距离
D i + = ∑ m j = 1 ( Z j + − z i j ) 2 D_{i}^{+}=\sqrt{\sum{\begin{array}{c} m\\ j=1\\ \end{array}\left( Z_{j}^{+}-z_{ij} \right) ^2}} Di+=mj=1(Zj+zij)2
定义第i(i=1,2,… ,n)个评价对象与最小值的距离
D i − = ∑ m j = 1 ( Z j − − z i j ) 2 D_{i}^{-}=\sqrt{\sum{\begin{array}{c} m\\ j=1\\ \end{array}\left( Z_{j}^{-}-z_{ij} \right) ^2}} Di=mj=1(Zjzij)2
那么,我么可一计算得出第i(i=1,2,… ,n)个评价对象未归一化的得分:
S i = D i − D i + + D i − S_i=\frac{D_{i}^{-}}{D_{i}^{+}+D_{i}^{-}} Si=Di++DiDi
很明显,S越大D+越小,即最接近最大值

那我们举个例子

姓名成绩与同学发生吵架的次数正向化吵架次数
小明8921
小王6003
小张7412
小陈9930
指标类型级大型极小型极大型

先对指标矩阵进行标准化,标准化处理的计算公式

假设有n个要评价的对象,m个评价指标(经过正向化)构成的正向化矩阵如下:
X = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 z n 2 ⋯ z n m ] X=\left[ \begin{array}{l} z_{11}& z_{12}& \cdots& z_{1m}\\ z_{21}& z_{22}& \cdots& z_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ z_{n1}& z_{n2}& \cdots& z_{nm}\\ \end{array} \right] X= z11z21zn1z12z22zn2z1mz2mznm
那么,对其标准化的矩阵记为Z,Z中的每一个元素:
m i j = z i j / ∑ n i = 1 x i j 2 m_{ij}=z_{ij}/\sqrt{\sum{\begin{array}{c} n\\ i=1\\ \end{array}x_{ij}^{2}}} mij=zij/ni=1xij2
那么通过matlab:
[ 89 1 60 3 74 2 99 0 ] ⟹ [ 0.5437 0.2673 0.3665 0.8018 0.4520 0.5345 0.6048 0 ] \left[ \begin{array}{l} 89& 1\\ 60& 3\\ 74& 2\\ 99& 0\\ \end{array} \right] \Longrightarrow \left[ \begin{array}{l} 0.5437& 0.2673\\ 0.3665& 0.8018\\ 0.4520& 0.5345\\ 0.6048& 0\\ \end{array} \right] 896074991320 0.54370.36650.45200.60480.26730.80180.53450
代码如下:

x = [89,1;60,3;74,2;99,0]
[n,m]=size(x)
x./repmat(sum(x.*x).0.5,n,1)
%关于repmat函数的使用,在博主的matlab使用中已经提过

那如何计算该例子得分呢?

姓名成绩与同学发生吵架的次数
小明0.54370.2673
小王0.36650.8018
小张0.45200.5345
小陈0.60480

最大值:[0.6048,0.8018] 最小值:[0.3665,0]

根据matlab可计算

姓名D+D-未归一化的的得分归一化后的得分得分
小明0.53800.32060.37340.18573
小王0.23820.80180.77090.38341
小张0.30780.54130.63750.31702
小陈0.80180.23820.22910.11394

代码:

x = [89 1;6,3;74,2;99,0]
[n,m] = size(x)
Z = x./repmat(sum(x.*x).0.5,n,1)
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-

计算步骤

第一步:将原始矩阵正向化

在这里插入图片描述

极小型—> 极大型 max-x

中间型—>极大型
在这里插入图片描述

在这里插入图片描述

区间型—>极大型

在这里插入图片描述

第二步:正向化矩阵标准化

注:例题中有说明

第三步:计算得分并归一化

注:例题中有说明

作业题:
在这里插入图片描述

注:下期会进行讲解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chen_XL1207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值