数学建模学习:灰色关联分析

article/2025/5/18 8:21:33

一、灰色关联分析

1.概述

一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。在众多的因素中,哪些是主要因素,哪些是次要因素;哪些因素对系统发展影响大,哪些因素对系统发展影响小;哪些因素对系统发展起推动作用需强化发展,哪些因素对系统发展起抑制作用需加以抑制……这些都是系统分析中需要普遍关心的问题。例如粮食生产系统中,人们希望提高粮食产量,而影响粮食总产量的因素是多方面的,有播种面积以及水利、化肥、土壤、种子、劳力、气候、耕作技术和政策环境等。为了实现少投入多产出,并取得良好的经济效益、社会效益和生态效益,就必须进行系统分析。

2.数理统计缺点

数理统计中的回归分析、方差分析、主成分分析等都是用来进行系统分析的方法。这些方法都有下述不足之处:
(1)要求有大量数据,数据量少就难以找到统计规律;
(2)要求样本服从某个典型的概率分布,要求各因素数据与系统特征数据之间呈线性关系且各因素之间彼此无关,这种要求往往难以满足;
(3)计算量大,一般要靠计算机帮助;(现在也不算缺点了哈)
(4)可能会出现量化结果于定性分析结果不符的现象,导致系统的关系和规律遭到歪曲和颠倒。

尤其是我国统计数据十分有限,而且现有数据灰度较大,再加上人为的原因,许多数据都出现几次大起大落,没有典型的分布规律。因此,采用数理统计方法往往难以奏效。

3.灰色关联优点

灰色关联分析方法弥补了采用数理统计方法作系统分析所导致的遗憾。它对样本量的多少和样本有无规律都同样适用,而且计算量小,十分方便,更不会出现量化结果与定性分析结果不符的情况。
灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其连系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。

4.灰色关联度的计算

分别求两极最小值和两极最大值, x 0 x_0 x0为因变量, x i x_i xi为自变量,也就是求出绝对值差的矩阵的最小值和最大值
a = min ⁡ i min ⁡ k ∣ x 0 ( k ) − x i ( k ) ∣ a=\min _{i} \min _{k}\left|x_{0}(k)-x_{i}(k)\right| a=iminkminx0(k)xi(k)
b = max ⁡ i max ⁡ k ∣ x 0 ( k ) − x i ( k ) ∣ b=\max _{i} \max _{k}\left|x_{0}(k)-x_{i}(k)\right| b=imaxkmaxx0(k)xi(k)

我们定义gama为
y ( x 0 ( k ) , x i ( k ) ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b y\left(x_{0}(k), x_{i}(k)\right))=\frac{a+ρb}{\left|x_{0}(k)-x_{i}(k)\right|+ρb} y(x0(k),xi(k)))=x0(k)xi(k)+ρba+ρb

( ρ 为 分 辨 率 , 一 般 设 为 0.5 ) (ρ为分辨率,一般设为0.5) ρ0.5
我们定义灰色关联度为
Y ( x 0 , x i ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) Y\left(x_{0}, x_{i}\right)=\frac{1}{n} \sum_{k=1}^{n} y\left(x_{0}(k), x_{i}(k)\right) Y(x0,xi)=n1k=1ny(x0(k),xi(k))

二、灰色关联应用

1.进行系统分析

下表为某地区国内生产总值的统计数据(以百万元计),问该地区从2000年到2005年之间哪一种产业对GDP总量影响最大。

在这里插入图片描述

(1)画统计图
我们可以先用Excel作各个企业和国内生产总值作时间序列曲线图

在这里插入图片描述

首先,我们可以发现四个变量都呈上升趋势,其次第二产业的增幅比较明显,第二产业和第三产业的差距在后三年相差更大

(2)确定分析数列
母数列(又称参考数列、母指标):能反映系统行为特征的数据序列——类似于因变量Y,此处记作x0
子数列(又称比较数列、子指标):影响系统行为的因素组成的数据序列——类似于自变量X,此处记作(x1,x2……xm)
本例中,国内生产总值就是Y,第一、第二和第三产业就是X

(3)对数据进行预处理:(两个目的:去量纲、缩小变量范围简化计算)
对母序列和子序列的每个指标进行预处理,先求出每个指标的均值,再利用该指标中的每个元素都除以其均值。

Mean = mean(gdp);  % 求出每一列的均值以供后续的数据预处理
gdp = gdp ./ repmat(Mean,size(gdp,1),1);  %size(gdp,1)=6, repmat(Mean,6,1)可以将矩阵进行复制,复制为和gdp同等大小,然后使用点除(对应元素相除),这些在第一讲层次分析法都讲过
disp('预处理后的矩阵为:'); disp(gdp)

由此我们可以得到的预处理的数据
在这里插入图片描述

(4)计算子序列中的各个指标与母序列的关联系数和灰色关联度

Y = gdp(:,1);  % 母序列
X = gdp(:,2:end); % 子序列
absX0_Xi = abs(X - repmat(Y,1,size(X,2)))  % 计算|X0-Xi|矩阵(在这里我们把X0定义为了Y)
a = min(min(absX0_Xi))    % 计算两级最小差a
b = max(max(absX0_Xi))  % 计算两级最大差b
rho = 0.5; % 分辨系数取0.5
gamma = (a+rho*b) ./ (absX0_Xi  + rho*b)
disp('子序列中各个指标的灰色关联度分别为:')disp(mean(gamma))

由此我们可以得到各个指标与母序列的灰色关联度

在这里插入图片描述

(6)通过比较三个子序列和母序列的灰色关联度可以得到结论
该地区在2000年至2005年间的国内生产总值受到第三产业的影响最大(其灰色关联度最大)

2.用于综合评价

下表为不同河流的含氧量、PH值、细菌个数和植物性营养物量的统计数据,问水质情况最好的河流
注意:含氧量越高越好,PH值越接近7越好,细菌个数越少越好,植物性营养物量介于10-20之间最好

在这里插入图片描述

(1)对指标进行正向化
由题意可知,含氧量为极大型指标,PH值为中间型指标,细菌个数为极小型指标,植物性营养物质为区间型指标

%%极小型转极大型
function [posit_x] = Min2Max(x)posit_x = max(x) - x;%posit_x = 1 ./ x;    %如果x全部都大于0,也可以这样正向化
end%%中间型转极大型
function [posit_x] = Mid2Max(x,best)M = max(abs(x-best));posit_x = 1 - abs(x-best) / M;
end%%区间型转极大型
function [posit_x] = Inter2Max(x,a,b)r_x = size(x,1);  % row of x M = max([a-min(x),max(x)-b]);posit_x = zeros(r_x,1);   for i = 1: r_xif x(i) < aposit_x(i) = 1-(a-x(i))/M;elseif x(i) > bposit_x(i) = 1-(x(i)-b)/M;elseposit_x(i) = 1;endend
end

(2)对正向化的指标进行预处理

%% 对正向化后的矩阵进行预处理
Mean = mean(X);  % 求出每一列的均值以供后续的数据预处理
Z = X ./ repmat(Mean,size(X,1),1);  
disp('预处理后的矩阵为:'); disp(Z)

(3)将预处理后的矩阵每一行取最大值构成母序列(虚拟的):

%% 构造母序列和子序列
Y = max(Z,[],2);  % 母序列为虚拟的,用每一行的最大值构成的列向量表示母序列
X = Z; % 子序列就是预处理后的数据矩阵

(4)计算得分并排序

%% 计算得分
absX0_Xi = abs(X - repmat(Y,1,size(X,2)))  % 计算|X0-Xi|矩阵
a = min(min(absX0_Xi))    % 计算两级最小差a
b = max(max(absX0_Xi))  % 计算两级最大差b
rho = 0.5; % 分辨系数取0.5
gamma = (a+rho*b) ./ (absX0_Xi  + rho*b)  % 计算子序列中各个指标与母序列的关联系数
weight = mean(gamma) / sum(mean(gamma));  % 利用子序列中各个指标的灰色关联度计算权重
score = sum(X .* repmat(weight,size(X,1),1),2);   % 未归一化的得分
stand_S = score / sum(score);   % 归一化后的得分
[sorted_S,index] = sort(stand_S ,'descend') % 进行排序

当得出的结果与熵权法+topsis相比时,可以发现两者有相同的趋势,但两个曲线较大的出入,但我们如果只用topsis而并没有对子序列赋予权重,得出的结果与灰色分析基本一致
在这里插入图片描述
在这里插入图片描述

三、灰色关联分析思考

1.什么时候使用标准化回归,什么时候用灰色关联分析

当样本个数n较大时,一般使用标准化回归,当样本个数n较小时,一般使用灰色关联分析

2.如果母序列中有多个指标,应该怎么分析

应该分开计算并分析母序列和各个子序列的灰色关联度

3.什么时候需要构造母序列

当用于评价类问题时,我们需要选出预处理后的矩阵的每一行的最大值作为母序列

4.灰色关联分析在什么比赛适用

灰色关联分析是国人提出的,不适用美赛,但适用于国内比赛,例如五一杯等等比赛


http://chatgpt.dhexx.cn/article/twtDjfDB.shtml

相关文章

灰色关联分析笔记

什么时候用灰色关联分析&#xff1f; 灰色关联分析 是根据因素之间发展趋势的相似或相异程度&#xff0c;亦即“灰色关联度”&#xff0c;作为衡量因素间关联程度的一种方法 【若两个因素变化的趋势具有一致性&#xff0c;即同步变化程度较高&#xff0c;即可谓二者关联程度较…

MATLAB学习笔记_Day03灰色关联分析和灰色预测模型

学习视频&#xff1a;【零基础教程】老哥&#xff1a;数学建模算法、编程、写作和获奖指南全流程培训&#xff01; 文章目录 1. 灰色关联分析与预测模型适用范围&#xff1a;1.1 灰色预测的概念1.2 灰色关联度与优势分析1.3 灰色预测模型1.4 灰色模型GM(1,1)1.5 灰色预测步骤 1…

灰色系统理论与灰色关联分析模型

灰色系统理论与灰色关联分析模型 Author:丸子 Written on: 220211 Notes:包括灰色系统知识和灰色关联分析模型两部分 笔记课程来自b站网课老哥带你学数模书本为《数学建模算法与应用&#xff08;第3版&#xff09;》&#xff0c;司守奎编著第424页 文章目录 灰色系统理论与灰色…

Python 灰色关联度 灰色预测模型

灰色关联度 灰色关联度常用于分析影响因子与被影响因子的关联&#xff0c;是水论文的好东西 如果数据的量纲不统一的话&#xff0c;需要先进行归一化处理 import numpy as npdef gray_correlation(refer, data, rho0.5): refer: 参照数列 (列向量)data: 比较数列 (以列为单位…

备战数学建模15-灰色关联分析与灰色预测模型

目录 一、灰色系统理论与灰色关联分析 1-灰色预测的概念 2-灰色关联度与优势分析 3-灰色关联分析案例分析 4-灰色生成数列 二、灰色预测模型 1-灰色模型GM 2-灰色模型GM的建模步骤 3-灰色预测经典案例1 4-灰色预测模型经典案例2 一、灰色系统理论与灰色关联分析 1-灰…

C语言:关键字----switch、case、default(开关语句)

C语言&#xff1a;基础开发----目录 C语言&#xff1a;关键字—32个(分类说明) 有32个关键字详细说明&#xff0c;还有跳转链接&#xff01; 一、开关语句----介绍 开关语句&#xff0c;包括以下四种关键字&#xff1a; switch&#xff1a;开关语句case&#xff1a; 开关语句…

C语言关键字auto,case,default,switch应该如何使用

前言&#xff1a;本文章主要用于个人复习&#xff0c;追求简洁&#xff0c;感谢大家的参考、交流和搬运&#xff0c;后续可能会继续修改和完善。 因为是个人复习&#xff0c;会有部分压缩和省略。 一、auto 1.c语言中&#xff0c;关键字auto用于声明一个变量为自动变量&#x…

C语言-switch-case语句与多分支结构

一、switch-case语句 1. switch语句中的每个语句段中都使用break语句 switch-case语句的一般形式为&#xff1a; switch (表达式){case 常量表达式1: 语句段1;break;case 常量表达式2:语句段2;break;...case 常量表达式n:语句段n;break;default:语句段n1;break;}这是switch-c…

C语言——switch case 语句判断学生成绩

C语言——switch case 语句判断学生成绩 switch case 讲解: switch&#xff08;&#xff09;&#xff0c;在括号里输入所定义的变量&#xff0c;接着在&#xff08;&#xff09;后面输入一个{}大括号&#xff0c;把每一个分支语句放在大括号中。 switch()写法: int main()…

C语言--switch case 语句,case 后没有语句

背景&#xff1a;在看 wireshark 的解析协议部分的源码时&#xff0c;发现很多的 switch case 语句&#xff0c;case 后没有语句 的情况&#xff0c;随处可见的这种情况&#xff0c;产生疑惑&#xff0c;报文解析就是很好的例子。 例如&#xff1a;wireshark-3.2.17/epan/diss…

补充switch语句的内容和逗号运算符(C语言case后没有break的switch语句,会继续执行后面的语句再退出)

补充switch语句的内容和逗号运算符 C语言case后没有break的switch语句&#xff0c;会继续执行后面的语句再退出补充逗号运算符 C语言case后没有break的switch语句&#xff0c;会继续执行后面的语句再退出 对于switch语句&#xff0c;我们在使用的时候都会注意使用的规范&#…

c语言 case break,C语言中switch...case语句中break的重要性

在C语言中switch...case语句是经常用到的&#xff0c;下面我介绍一下在使用该语句时候需要注意的一个细节问题。话不多说&#xff0c;直接举例子&#xff1a; 例子1&#xff1a; switch(fruit) { case 1:printf("apple"); break; case 2:printf("banana");…

C语言CASE语句嵌套,C语言中switch case语句的嵌套

给一个含有嵌套的switch case的一段完整代码&#xff1a; #include int main() { int n1; int m2; switch(n) { case 1: m; case 2: n; case 3: switch(n) { case 1: n; case 2: m; n; break; } case 4: m; break; default: break; } printf("%d %d",m,n); return 0…

c语言 switch案例,c语言switch case语句使用例子

c语言switch case语句使用例子 发布时间&#xff1a;2020-04-23 11:48:53 来源&#xff1a;亿速云 阅读&#xff1a;421 作者&#xff1a;小新 这篇文章主要为大家详细介绍了c语言switch case语句使用例子&#xff0c;文中示例代码介绍的非常详细&#xff0c;具有一定的参考价值…

c语言的case语句怎么用,c语言的switchcase语句用法

凡是使用过的人都会有同2113样的感觉—5261—C语言的使用灵活这个特点既是优点又是4102缺点&#xff0c; 因为对1653精通C语言的用户来讲&#xff0c; 灵活就意味着编程可以无拘无束&#xff0c; 甚至随心所欲&#xff1b; 但对初学者或者是尚未摸着规律的用户来说&#xff0c;…

case是c语言变量名吗,case是什么意思_c语言中case是什么意思

c语言中case是什么意思 是程序的入口,一般结合switch使用 举个例子: int a=2; switch(a){ case 1:prinf("1");break; case 2:prinf("2");break; default:prinf("3"); } 就表示根据a的值进行判断,a的值与 case后面的哪个值相等,就执行哪个cas…

【C语言】case 关键字

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

c语言库函数总结----math.h库

思维导图大纲 前言 上回总结了string.h常用的字符串操作函数,这次总结一下另外的一个库函数math.h和数字运算有关联的库。 double acos(double x) 函数原型:double acos(double x) 功能:返回以弧度表示的 x 的反余弦。arcos(x);//时间:2019年11月15日 //作者:Kroner //编…

c语言实现库函数

目录 一.strlen函数 1.描述 2.实现 1.计数的方法 2.函数递归的方法 3.指针 - 指针方法 二.strcmp函数 1.描述 2.实现 三.strcpy函数的实现 1.描述 2.实现 四.strcat函数的实现 1.描述 2.实现 五.strstr函数的实现 1.描述 2.实现 1.BF算法实现 2.kmp算法的实现…

C语言 库函数:qsort 详解

目录 1.qsort的介绍与使用方法 2.介绍void*​ 3.举例使用qsort​ 4. qsort的模拟实现&#xff0c;了解其运作原理​ 1.qsort的介绍与使用方法 2.介绍void* 3.举例使用qsort #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include…