灰色关联度矩阵模型及其MATLAB实现[通俗易懂]

灰色关联度矩阵模型及其MATLAB实现[通俗易懂]灰色关联度矩阵是灰色系统另一个非常重要的领域,通常用于分析向量与向量之间或矩阵与矩阵之间的关联度,其实用性非常强。

大家好,又见面了,我是你们的朋友全栈君。

灰色关联度模型

引入

灰色关联度矩阵是灰色系统另一个非常重要的领域,通常用于分析向量与向量之间或矩阵与矩阵之间的关联度,其实用性非常强。

基本原理

(1)基本定义
假设有一组参考数列:
x j = ( x j ( 1 ) , x j ( 2 ) , x j ( 3 ) , . . . , x j ( n ) ) . j = 1 , 2 , 3 , . . . , s x_{j}=(x_{j}(1),x_{j}(2),x_{j}(3),…,x_{j}(n)). j=1,2,3,…,s xj=(xj(1),xj(2),xj(3),...,xj(n)).j=1,2,3,...,s

比较数列:
x i = ( x i ( 1 ) , x i ( 2 ) , x i ( 3 ) , . . . , x i ( n ) ) . i = 1 , 2 , 3 , . . . , t x_{i}=(x_{i}(1),x_{i}(2),x_{i}(3),…,x_{i}(n)). i=1,2,3,…,t xi=(xi(1),xi(2),xi(3),...,xi(n)).i=1,2,3,...,t

由以上两个数列,定义关联度矩阵如下:
灰色关联度就在
(2)模型说明
①变量 ζ j i ( k ) ζ_{ji}(k) ζji(k)表示的是第 i i i个比较数列与第 j j j个参考数列第 k k k个样本之间的关联系数。
m i n m i n ∣ x j ( k ) − x i ( k ) ∣ min min|x_{j}(k)-x_{i}(k)| minminxj(k)xi(k) m a x m a x ∣ x j ( k ) − x i ( k ) ∣ max max|x_{j}(k)-x_{i}(k)| maxmaxxj(k)xi(k)表示的是参考数列矩阵与比较数列矩阵数值作差之后的最小值和最大值。把 m i n m i n ∣ x j ( k ) − x i ( k ) ∣ min min|x_{j}(k)-x_{i}(k)| minminxj(k)xi(k) m a x m a x ∣ x j ( k ) − x i ( k ) ∣ max max|x_{j}(k)-x_{i}(k)| maxmaxxj(k)xi(k)耦合到变量中可以保证 ζ j i ( k ) ζ_{ji}(k) ζji(k)之值位于[0,1]区间,同时上下对称的结构可以消除量纲不同和数值悬殊的问题。
∣ x j ( k ) − x i ( k ) ∣ |x_{j}(k)-x_{i}(k)| xj(k)xi(k)式被称之为“Hamming”距离,Hamming距离的倒数被称之为反倒数距离,灰色关联度的本质就是通过反倒数的大小来判定关联程度:假设有曲线 x i x_{i} xi x j x_{j} xj上面的点 ( k , x i ( k ) ) (k,x_{i}(k)) (k,xi(k)) ( k , x j ( k ) ) (k,x_{j}(k)) (k,xj(k)),这两个点的Hamming距离越大,表示两条曲线距离越大,倒数也就越小。反过来,倒数越大,表示两个曲线之间的距离越小,因为曲线已经消除了量级之间的差异,则Hamming距离越小的曲线形态就越相似。因此,灰色关联度的本质其实是依据曲线态势相近程度来分辨数列的相关度。
④分辨率 ρ ρ ρ取值在[0,1]之间

(3)定义数列相关度
z ( 1 ) ( k ) = x ( 1 ) ( k ) + x ( 1 ) ( k − 1 ) 2 , k = 2 , 3 , 4 z^{(1)}(k)=\frac{x^{(1)}(k)+x^{(1)}(k-1)}{2},k=2,3,4 z(1)(k)=2x(1)(k)+x(1)(k1)k=2,3,4

则称新数列 z ( 1 ) = ( z ( 1 ) ( 2 ) , z ( 1 ) ( 3 ) , . . . , z ( 1 ) ( n ) ) z^{(1)}=(z^{(1)}(2),z^{(1)}(3),…,z^{(1)}(n)) z(1)=(z(1)(2),z(1)(3),...,z(1)(n)) x ( 1 ) x^{(1)} x(1)的紧邻均值数列。
(4)定义GM(1,1)的灰微分方程
由于 ζ j i ( k ) ζ_{ji}(k) ζji(k)只能反映出点与点之间的相关性,相关性信息分散,不方便刻画数列之间的相关性,需要把它整合起来,所以我们在此,定义相关度:
相关度
如果把 x i x_{i} xi x j x_{j} xj之间的相关度写成矩阵形式,则有
关联度的矩阵形式
根据这个矩阵我们就可以很清楚得出,待比较数列从列可以看出其作用大小,参考数列从行可以看出其受影响程度的大小,而依据矩阵数值大小可以分析出比较数列矩阵中那些数列起到主要作用。比如某一列数值明显大于其他列,这样的数列叫做优势子因素,反之为劣势子因素;如果某一行数值明显大于其他行则称之为优势母因素,优势母因素比较敏感,容易受到子因素的驱动影响。

MATLAB源码

%灰色关联度矩阵模型
clc;
close;
clear all;
% 控制输出结果精度
format short;
% 原始数据,其中前五项为子因素,后两项为母因素
x=[
10	10	10	12	12	12	12	12	15	15	15	15	12	12	12	15	15	15	15	20	20	20	10	10	10	7	7	15	15	15	13	13	13	13	13	13
1216.482	612.364	477.838	988.53	482.685	468.074	1263.494	1235.787	422.27	1276.28	494.07	464.21	454.431	736.462	530.722	507.105	1067.189	911.603	519.956	1703.432	1570.14	521.364	984.01	158.825	199.623	1536.96	402.327	305.36	1012.77	982.12	500	520	1100	1783.644	404.951	584.652
910	910	910	707	707	707	707	707	1196	1196	1196	1196	1262	1262	1262	1004	1004	1004	1004	870	870	870	1023	1023	1023	1398	1398	1361	1361	1361	1702	1702	1702	1702	1702	1702
804.35	804.35	804.35	877.89	877.89	877.89	877.89	877.89	785.66	785.66	785.66	785.66	788.43	788.43	788.43	818.99	818.99	818.99	818.99	841.59	841.59	841.59	874.38	874.38	874.38	823.76	823.76	784.29	784.29	784.29	764.43	764.43	764.43	764.43	764.43	764.43
990.24	990.24	990.24	948.08	948.08	948.08	948.08	948.08	747.03	747.03	747.03	747.03	809.27	809.27	809.27	909.25	909.25	909.25	909.25	869.5	869.5	869.5	925.45	925.45	925.45	774.6	774.6	782.25	782.25	782.25	703.67	703.67	703.67	703.67	703.67	703.67
20	20	20	26.5	26.5	26.5	26.5	26.5	21.8	21.8	21.8	21.8	22.5	22.5	22.5	17.98	17.98	17.98	17.98	16.7	16.7	16.7	22	22	22	19.6	19.6	30.5	30.5	30.5	22.8	22.8	22.8	22.8	22.8	22.8
23.65	23.65	23.65	28	28	28	28	28	22.45	22.45	22.45	22.45	23.45	23.45	23.45	20	20	20	20	17	17	17	22.45	22.45	22.45	20	20	31.5	31.5	31.5	23	23	23	23	23	23
];
n1=size(x,1);
% 数据标准化处理
for i = 1:n1
x(i,:) = x(i,:)/x(i,1);
end
% 保存中间变量,亦可省略此步,将原始数据赋予变量data
data=x;

%% 分离数据
% 分离参考数列(母因素)
consult=data(6:n1,:);
m1=size(consult,1);
% 分离比较数列(子因素)
compare=data(1:5,:);
m2=size(compare,1);

for i=1:m1
for j=1:m2
t(j,:)=compare(j,:)-consult(i,:);
end
min_min=min(min(abs(t')));
max_max=max(max(abs(t')));
% 通常分辨率都是取0.5
resolution=0.5;
% 计算关联系数
coefficient=(min_min+resolution*max_max)./(abs(t)+resolution*max_max);
% 计算关联度
corr_degree=sum(coefficient')/size(coefficient,2);
r(i,:)=corr_degree;
end

% 输出关联度值并绘制柱形图
r
bar(r,0.90);
axis tight;
legend('第一行','第二行','第三行','第四行','第五行');% 图例
grid on;% 加入网格

% 去掉X轴上默认的标签
set(gca,'XTickLabel','');
%  设定X轴刻度的位置,这里有2个母因素
n=2;

% 这里注意:x_range范围如果是[1 n]会导致部门柱形条不能显示出来,所以范围要缩一点
x_value = 1:1:n;
x_range = [0.6 n+.4];
% 获取当前图形的句柄
set(gca,'XTick',x_value,'XLim',x_range);

% 在X轴上标记2个母因素
profits={'第六行','第七行'};
y_range = ylim;
% 用文本标注母因素名称
handle_date = text(x_value,y_range(1)*ones(1,n)+.018,profits(1:1:n));
% y轴标记
ylabel('影响程度');
title('各项子因素对母因素的影响作用');

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146322.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象

    【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象前面我们已经介绍过【SpringBoot】十七、SpringBoot中整合Redis,我们可以看出,在SpringBoot对Redis做了一系列的自动装配,使用还是非常方便的一、背景1、思考‘通过我们前面的学习,我们已经可以往Redis中存入字符串,那么我们要往Redis中存入Java对象该怎么办呢?2、方案我们可以将Java对象转化为JSON对象,然后转为JSON字符串,存入Redis,那么我们从Redis中取出该数据的时候,我们也只能取出字符串,并转

  • js生成二维码_js生成二维码并保存

    js生成二维码_js生成二维码并保存js生成二维码一、一个简单的示例前段时间项目中需要开发扫描二维码查看信息的功能,在网上查了一些资料,把用过的方法进行总结需要导入一个qrcode的js插件。一、一个简单的示例如下:(仅供参考)<%–CreatedbyIntelliJIDEA.User:ASUSauthor:xumzDate:2021/2/27Time:10:33搬运请备注TochangethistemplateuseFile|Settings|Fil

    2022年10月18日
  • Ubuntu18.04.3虚拟机安装步骤(图文教程,非常详细!!!)

    Ubuntu18.04.3虚拟机安装步骤(图文教程,非常详细!!!)原创:丶无殇2019-9-6虚拟机的安装步骤就不教学了!自行百度!接下来教学ubuntu18.04.3desktop_amd64版本的安装和配置教程软件下载地址详细介绍:http://bencky.ml/linux下载速度很快:25MB/s左右一、ubuntu安装教…

  • warning: #1300-D: XXX inherits implicit virtual 报警

    warning: #1300-D: XXX inherits implicit virtual 报警在KeilMDK里使用了C++,其中用到了基类和派生类。编译的时候出现了大量warning: #1300-D:XX_function inheritsimplicitvirtual的警告信息。由于对C++不熟,花了好半天时间去找消除警告信息的方法。后面发现是这样的。在基类中,定义了虚成员函数。如下:classDriver{public:virtual…

  • ICMP报文分析

    ICMP报文分析

  • delphi有办法旋转或翻转图片么?

    delphi有办法旋转或翻转图片么?

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号