数学建模:TOPSIS分析

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

TOPSIS分析法

算法流程

  1. 假设有m个评价对象,n个评价指标,首先需要进行指标的正向化
    1. 极大型
    2. 极小型
    3. 单点型
    4. 区间型
  2. 然后对正向化后的矩阵进行标准化 ,得到 Z Z Z 矩阵:假设 X X X 为正向化后的矩阵,则 Z Z Z 是标准化后的矩阵:

X = [ x 11 x 11 . . . x 1 n x 21 x 22 . . . x 2 n ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 . . . x m n ] ; X=\begin{bmatrix}x_{11}&x_{11}&...&x_{1n}\\x_{21}&x_{22}&...&x_{2n}\\\vdots&\vdots&\ddots&\vdots\\x_{m1}&x_{m2}&...&x_{mn}\end{bmatrix}; X= x11x21⋮xm1x11x22⋮xm2......⋱...x1nx2n⋮xmn ;

Z i j = x i j ∑ i = 1 n x i j 2 Z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^nx_{ij}^2}} Zij=∑i=1nxij2 xij

  1. 得到标准化后的矩阵后,我们要进行打分:计算出第 i i i个评价对象与最大值的距离 D i + D^{+}_i Di+ ,和最小值的距离 D i − D^{-}_i Di−
    1. 计算带组合权重的 TOPSIS 分析法还需要 D i + D^{+}_i Di+ D i − D^{-}_i Di− 分别再乘以权重 W W W
      然后再开方。

Z = [ z 11 z 11 . . . z 1 n z 21 z 22 . . . z 2 n ⋮ ⋮ ⋱ ⋮ z m 1 z m 2 . . . z m n ] ; Z=\begin{bmatrix}z_{11}&z_{11}&...&z_{1n}\\z_{21}&z_{22}&...&z_{2n}\\\vdots&\vdots&\ddots&\vdots\\z_{m1}&z_{m2}&...&z_{mn}\end{bmatrix}; Z= z11z21⋮zm1z11z22⋮zm2......⋱...z1nz2n⋮zmn ;

最大值 ( z 1 + , z 2 + . . . z n + ) = ( max ⁡ { z 11 , z 21 , . . . , z m 1 } , max ⁡ { z 12 , z 22 , . . . , z m 2 } , . . . , max ⁡ { z 1 n , z 2 n , . . . , z m n } ) ∣ 最大值(z^{+}1,z^{+}2 ...z^{+}n) = \left.\left(\max\begin{Bmatrix}z{11},z{21},...,z{m1}\end{Bmatrix},\max\begin{Bmatrix}z_{12},z_{22},...,z_{m2}\end{Bmatrix},...,\max\begin{Bmatrix}z_{1n},z_{2n},...,z_{mn}\end{Bmatrix}\right)\right| 最大值(z1+,z2+...zn+)=(max{z11,z21,...,zm1},max{z12,z22,...,zm2},...,max{z1n,z2n,...,zmn})

最小值 ( z 1 − , z 2 − . . . z n − ) = ( min ⁡ { z 11 , z 21 , . . . , z m 1 } , min ⁡ { z 12 , z 22 , . . . , z m 2 } , . . . , min ⁡ { z 1 n , z 2 n , . . . , z m n } ) ∣ 最小值(z^{-}1,z^{-}2 ...z^{-}n) = \left.\left(\min\begin{Bmatrix}z{11},z{21},...,z{m1}\end{Bmatrix},\min\begin{Bmatrix}z_{12},z_{22},...,z_{m2}\end{Bmatrix},...,\min\begin{Bmatrix}z_{1n},z_{2n},...,z_{mn}\end{Bmatrix}\right)\right| 最小值(z1−,z2−...zn−)=(min{z11,z21,...,zm1},min{z12,z22,...,zm2},...,min{z1n,z2n,...,zmn})

D i + = ∑ j = 1 m ( z j + − z i j ) 2 D_{i}^{+}=\sqrt{\sum_{j=1}^{m}(z_{j}^{+}-z_{ij})^{2}} Di+=j=1∑m(zj+−zij)2

D i − = ∑ j = 1 m ( z j − − z i j ) 2 {\cal D}{i}^{-}=\sqrt{\sum{j=1}^{m}(z_{j}^{-}-z_{ij})^{2}} Di−=j=1∑m(zj−−zij)2

  1. 计算出第 i i i 个评价对象未归一化后的得分: S i S_i Si ,很明显 0 < = S i < = 1 0<= S_i <=1 0<=Si<=1,且 S i S_i Si 越大 D i + D^{+}_i Di+ 越小,越接近最大值

S i = D i − D i + + D i − S_i=\frac{D_i^-}{D_i^++D_i^-} Si=Di++Di−Di−

  1. 计算归一化后的得分:即每分数除以所有分数之和:

s t a n d _ S = S i ∑ i = 1 n S i stand\S=\frac{S_i}{\sum{i=1}^nS_i} stand_S=∑i=1nSiSi

程序代码

matlab 复制代码
function [score]=mfunc_TOPSIS(data,W)  
    % TOPSIS方法:求解每个对象的综合评价得分
    % paramts: 
    %      data: 原始数据矩阵,(m,n) m为评价对象,n为评价指标
    %      W: 每个指标的初始权重
    % returns:
    %      Score:每个评价对象的综合得分

    %X输入的数据,W各指标的权重
    [n,~]=size(data);
    %Z=zscore(X);
    Z = data ./ repmat(sum(data.*data) .^ 0.5, n, 1); %矩阵标准化
    V_D = sum(((Z - repmat(max(Z),n,1)) .^ 2 ) .* repmat(W,n,1) ,2) .^ 0.5; 
    V_X = sum(((Z - repmat(min(Z),n,1)) .^ 2 ) .* repmat(W,n,1) ,2) .^ 0.5; 
    S = V_X ./ (V_D+V_X); %未归一化得分
    Score_S = S / sum(S); %归一化得分,即为每个企业的投资风险评分,值越大,投资风险也越大
    % score=Score_S;
    score=100*Score_S/max(Score_S);
end
相关推荐
远望清一色10 小时前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
顶呱呱程序15 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
简简单单做算法17 小时前
基于Retinex算法的图像去雾matlab仿真
算法·matlab·图像去雾·retinex
其实吧31 天前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
阑梦清川1 天前
数学建模启发式算法篇(一)---遗传算法
算法·数学建模·启发式算法
Matlab程序猿小助手1 天前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
IT猿手2 天前
基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码
人工智能·深度学习·神经网络·算法·matlab·cnn
其实吧32 天前
基于MATLAB的运动车辆跟踪检测系统
开发语言·matlab
梦里水乡8572 天前
基于MATLAB的农业病虫害识别研究
开发语言·matlab
墨痕_7772 天前
论文阅读笔记Dense Passage Retrieval for Open-Domain Question Answering
matlab