数学建模:灰色关联分析

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

灰色关联分析法

算法流程

  1. 建立一个m行 n列的矩阵 X X X ,其中 m 表示评价对象, n表示评价指标
  2. 首先进行矩阵的归一化 ,得到归一化后的矩阵 d a t a data data
  3. 获取参考向量,即获取归一化后的矩阵的最大参考指标行 ,假设为 Y Y Y,即得到所有n个指标的最大值。
    1. 如果n表示评价指标,m表示评价对象,矩阵为 n ∗ m n*m n∗m ,则我们应该得到一个最大的参考指标列
  4. 生成绝对值矩阵 A A A

A = ∣ X 1 − Y 1 ∣ A = ∣ x 4 − x 1 , x 5 − x 1 , x 6 − x 1 , x 7 − x 1 ∣ \begin{aligned}A&=|X_1-Y_1|\\A&=|x_4-x_1,x_5-x_1,x_6-x_1,x_7-x_1|\end{aligned} AA=∣X1−Y1∣=∣x4−x1,x5−x1,x6−x1,x7−x1∣

  1. 计算绝对值矩阵的最大值 d m a x d_{max} dmax和最小值 d m i n d_{min} dmin
  2. 计算灰色关联矩阵,假设为 B B B :其中 ρ \rho ρ 为一个分辨系数,设置为 0.5 为最佳。

B i j = d m i n + ρ d m a x A i j + ρ d m a x B_{ij}=\frac{d_{min}+\rho d_{max}}{A_{ij}+\rho d_{max}} Bij=Aij+ρdmaxdmin+ρdmax

  1. 分别计算最大与最小灰色关联度 ξ \xi ξ ,因此得到 ξ m i n \xi_{min} ξmin 与 ξ m a x \xi_{max} ξmax

ξ j = ∑ i = 1 m B i j m \xi_j=\frac{\sum_{i=1}^mB_{ij}}m ξj=m∑i=1mBij

  1. 计算评价总分:每个对象的 S c o r e j Score_j Scorej 如果与最大灰色关联度 ξ m a x \xi_{max} ξmax 越大,或者与最小灰色关联度 ξ m i n \xi_{min} ξmin 越大,则评价得分越高

S c o r e j = 1 1 + ( ξ j ( m i n ) / ξ j ( m a x ) ) 2 Score_j=\frac{1}{1+(\xi_j^{(min)}/\xi_j^{(max)})^2} Scorej=1+(ξj(min)/ξj(max))21

代码实现

matlab 复制代码
function [Score] = mfunc_GreyCorrelationAnalysis(data)
		% data表示一个 m * n 列的原始数据矩阵

    % 标准化mapminmax是对行操作的,因此转置一下,如果使用zscore(data)标准化则无须转置,但是无法标准化到0,1
    data1=mapminmax(data',0,1);%标准化到0.002-1区间
    % 
    data1=data1'; % mapminmax在再转置回来
    %
    V_max=max(data1);%最大参考指标行,指标最大
    V_min=min(data1);%最小参考指标行,指标最小

    % 与最大值的灰色关联度
    data2=abs(data1-V_max);
    %得到绝对值矩阵的全局最大值和最小值
    d_max=max(max(data2));
    d_min=min(min(data2));
    % 计算灰色关联矩阵
    a=0.5;   %分辨系数默认为0.5
    data3=(d_min+a*d_max)./(data2+a*d_max);
    %  计算灰色关联度
    xi_max=mean(data3'); %计算每个评价对象的灰色关联度,求mean平均值

    % 与最小值的灰色关联度
    data2=abs(data1-V_min);
    %得到绝对值矩阵的全局最大值和最小值
    d_max=max(max(data2));
    d_min=min(min(data2));
    data3=(d_min+a*d_max)./(data2+a*d_max);
    xi_min=mean(data3');

    % 综合评分
    %与最大相关系数越大,最小相关系数越小得分大
    Score=1./(1+(xi_min./xi_max)).^2;
    for i=1:length(Score)
        fprintf('第%d个投标者评分为:%4.2f\n',i,Score(i));   
    end
end
相关推荐
点灯小铭16 小时前
基于MATLAB的车牌识别系统
开发语言·单片机·数码相机·matlab·毕业设计·课程设计
茜茜西西CeCe16 小时前
数字图像处理-图像的基本运算
图像处理·人工智能·计算机视觉·matlab·图像的基本运算
lingchen19061 天前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
星马梦缘1 天前
Matlab机器人工具箱使用5 轨迹规划
matlab·机器人·轨迹规划·空间插值
机器学习之心2 天前
MATLAB基于GM(灰色模型)与LSTM(长短期记忆网络)的组合预测方法
matlab·lstm
星马梦缘2 天前
Matlab机器人工具箱7 搬运动画展示
matlab·机器人·仿真·逆解
chao1898442 天前
基于MATLAB的线性判别分析(LDA)人脸识别实现
开发语言·matlab
机器学习之心2 天前
基于CNN的航空发动机剩余寿命预测 (MATLAB实现)
人工智能·matlab·cnn
wheeldown2 天前
【数学建模】数学建模 + 算法实战:精细网格搜索破解烟幕遮蔽时间优化难题
数学建模
战术摸鱼大师2 天前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制