数学建模: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
相关推荐
lingchen19063 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
星马梦缘6 小时前
Matlab机器人工具箱使用5 轨迹规划
matlab·机器人·轨迹规划·空间插值
机器学习之心11 小时前
MATLAB基于GM(灰色模型)与LSTM(长短期记忆网络)的组合预测方法
matlab·lstm
星马梦缘15 小时前
Matlab机器人工具箱7 搬运动画展示
matlab·机器人·仿真·逆解
chao18984416 小时前
基于MATLAB的线性判别分析(LDA)人脸识别实现
开发语言·matlab
机器学习之心19 小时前
基于CNN的航空发动机剩余寿命预测 (MATLAB实现)
人工智能·matlab·cnn
wheeldown21 小时前
【数学建模】数学建模 + 算法实战:精细网格搜索破解烟幕遮蔽时间优化难题
数学建模
战术摸鱼大师1 天前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
CS数模1 天前
2025高教社杯全国大学生数学建模竞赛(B题)深度剖析| 碳化硅外延层厚度 |数学建模完整代码+建模过程全解全析
数学建模
数学建模小secret1 天前
2025 数学建模高教社杯 国赛(A题)| 无人机干扰弹 | 建模秘籍&文章代码思路大全
数学建模·无人机