灰色关联法 —— matlab

目录

1.简介

2.算法详解

2.1 数据标准化

2.2 计算灰色相关系数

2.3 计算灰色关联度系数 

3.实例分析

3.1 读取数据

3.2 数据标准化

3.3 绘制 x1,x4,x5,x6,x7 的折线图

3.4 计算灰色相关系数

完整代码


1.简介

        对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。因此,灰色关联分析方法,是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法

        灰色关联分析可以用于衡量因素相关程度的同时,也有论文将其用于综合评价,其原理思想和TOPSIS法是比较相似的。 

2.算法详解

2.1 数据标准化

 因为每个指标的数量级不一样,需要把它们化到同一个范围内再比较。标准化的方法比较多,这里仅用最大最小值标准化方法。

        设标准化后的数据矩阵元素为rij,由上可得指标正向化后数据矩阵元素为 (Xij)'

2.2 计算灰色相关系数

我们常见的灰色相关系数表达式如下:

   Xo(k)为参考列,p为分辨系数。它的范围为(0~1),它的作用为控制区分度,它的值越小,区分度越大,它的值越大,区分度越小。  常常取0.5。乍一看这个公式还是有些难懂,接下来详细介绍一下它的原理。

2.3 计算灰色关联度系数 

  • 参考向量的选择

        例如研究x2指标与x1指标之间的灰色关联度。所以将x1列作为参考向量,即要研究与谁的关系,就将谁作为参考。设参考向量为Y1=x1,生成新的数据矩阵 X1=x2.

  • 生成绝对值矩阵 

设生成的绝对值矩阵为A

A=[X1-Y1],亦是A=[x2-x1]

设dmax为绝对值矩阵A的最大值,dmin为绝对值矩阵A的最小值。

  • 计算灰色关联矩阵

设灰色关联矩阵为B

  • 计算灰色关联

3.实例分析

其中指标,x1:货物运输量;x2:港口货物吞吐量;x3:货物周转量;x4:GDP;x5:财政收入x6:城市居民人均可支配收入;x7:农村居民人均净收入。现研究x4-x7指标与x1指标之间的灰色关联度。数据表格如下:

年份x1x2x3x4x5x6x7
2007225782756949872567.7267.981.54291.172
2008256982948450483131348.511.85461.2514
2009278963158951293858.2429.12.03691.0254
2010295403489455694417.7541.292.25891.189
2011310583647857835158.1647.252.42761.4213
2012359803869560456150.1736.452.56781.5304
2013394834074662597002.88502.85461.7421

3.1 读取数据

data=xlsread('D:\桌面\huiseguanlian.xlsx')

返回:

3.2 数据标准化

%数据标准化
data1=mapminmax(data',0.002,1) %标准化到0.002-1区间

 返回:

3.3 绘制 x1,x4,x5,x6,x7 的折线图

figure(1)
t=[2007:2013];
plot(t,data1(:,1),'LineWidth',2)
hold on 
for i=1:4
    plot(t,data1(:,3+i),'--')
    hold on
end
xlabel('year')
legend('x1','x4','x5','x6','x7')
title('灰色关联分析')

返回:

从图中可以看出,这几个指标的趋势大致相同

3.4 计算灰色相关系数

3.4.1 得到其他列和参考列相等的绝对值

%得到其他列和参考列相等的绝对值
for i=4:7
    data1(:,i)=abs(data1(:,i)-data1(:,1));
end

3.4.2 得到绝对值矩阵的全局最大值和最小值

%得到绝对值矩阵的全局最大值和最小值
data2=data1(:,4:7);
d_max=max(max(data2));
d_min=min(min(data2));

3.4.3 定义分辨系数

a=0.5

3.4.4 计算灰色关联矩阵

data3=(d_min+a*d_max)./(data2+a*d_max);
xishu=mean(data3);
disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
disp(xishu)

返回:

完整代码

clc;clear;
%读取数据
data=xlsread('D:\桌面\huiseguanlian.xlsx');
%数据标准化
data1=mapminmax(data',0.002,1); %标准化到0.002-1区间
data1=data1';
%%绘制 x1,x4,x5,x6,x7 的折线图
figure(1)
t=[2007:2013];
plot(t,data1(:,1),'LineWidth',2)
hold on 
for i=1:4
    plot(t,data1(:,3+i),'--')
    hold on
end
xlabel('year')
legend('x1','x4','x5','x6','x7')
title('灰色关联分析')

%%计算灰色相关系数
%得到其他列和参考列相等的绝对值
for i=4:7
    data1(:,i)=abs(data1(:,i)-data1(:,1));
end

%得到绝对值矩阵的全局最大值和最小值
data2=data1(:,4:7);
d_max=max(max(data2));
d_min=min(min(data2));
%灰色关联矩阵
a=0.5;   %分辨系数
data3=(d_min+a*d_max)./(data2+a*d_max);
xishu=mean(data3);
disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
disp(xishu)
  • 30
    点赞
  • 371
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
灰色关联度是通过灰色关联分析计算得出的,可以使用Matlab进行计算。以下是一个Matlab代码的示例,可以根据自己的数据进行修改: ```matlab clc; clear; % 读取数据 data = xlsread('算例1.xlsx'); % 数据标准化 data1 = mapminmax(data', 0.002, 1); data1 = data1'; % 绘制 x1,x4,x5,x6,x7 的折线图 figure(1) t = \[2007:2013\]; plot(t, data1(:,1), 'Color', 'r', 'LineWidth', 1.5) hold on for i = 1:4 plot(t, data1(:,3+i), '--', 'LineWidth', 1.2) hold on end xlabel('year') legend('x1', 'x4', 'x5', 'x6', 'x7') title('灰色关联分析') % 计算灰色相关系数 data2 = data1(:,4:7); d_max = max(max(data2)); d_min = min(min(data2)); a = 0.5; % 分辨系数 data3 = (d_min + a * d_max) ./ (data2 + a * d_max); xishu = mean(data3); disp('x4,x5,x6,x7与x1之间的灰色关联度分别为:') disp(xishu) ``` 这段代码会读取名为"算例1.xlsx"的数据文件,并进行标准化处理。然后绘制x1、x4、x5、x6、x7的折线图,并计算灰色相关系数。最后输出x4、x5、x6、x7与x1之间的灰色关联度。请注意,你需要将代码中的数据文件名和数据列数根据实际情况进行修改。 #### 引用[.reference_title] - *1* *2* *3* [【数学建模】灰色关联Matlab代码实现)](https://blog.csdn.net/weixin_46039719/article/details/126913761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值