【数学建模】--灰色关联分析

news2024/10/3 8:20:05

系统分析:

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

数理统计的不足之处:

灰色关联的基本思想:

灰色关联分析原理:灰色关联分析(Grey Relational Analysis)是一种用于研究变量之间关联性的方法,特别适用于样本数据较少、样本特征缺失或数据质量不高的情况下。它是由灰色系统理论发展而来,旨在分析和描述变量之间的关联程度。

在灰色关联分析中,首先将各个变量的数据进行数值化,常采用标准化或归一化的方法,将变量的取值范围转化为[0, 1]之间。然后,通过计算变量之间的关联度,确定它们之间的关联程度。

灰色关联分析的步骤主要包括以下几个方面:

1.数据标准化:将原始数据进行标准化处理,通常采用归一化或标准化方法,使得各个变量具有相同的数值范围。

2.构建关联系数矩阵:计算各个变量之间的关联系数,一般采用灰色关联度或灰色斜率关联度。关联系数表示了变量之间的相对关联程度。

3.确定关联度序列:根据计算得到的关联系数,确定关联度序列,即将各个变量按照关联度的大小排序。

4.确定关联度权重:根据关联度序列,计算关联度权重,即各个变量在总关联系数中的贡献比例。

5.计算灰色关联度:通过将各个变量的关联系数与关联度权重相乘,并进行累加,计算出灰色关联度。灰色关联度可以反映变量之间的关联程度。

通过灰色关联度的计算,可以得到各个变量之间的关联情况,进而进行数据分析和决策支持。灰色关联分析常被应用于多个领域,包括经济、管理、环境、工程等,用于评估指标之间的关联强度、寻找关键因素等。

需要注意的是,灰色关联分析的结果是相对的,不具备精确的定量意义,应结合实际问题和其他分析方法进行综合评估和判断。

例题以及Excel的实操:在excel中选择数据-插入-推荐图标-修改信息。

2.确定分析数列:

母序列:能反映系统特征值的数据序列,类似于因变量Y,此处记为X0

子序列:有影响系统行为的因素组成的数据序列。类似于自变量x,此处记为(x1,x2……xm)

3.对变量进行预处理:

目的:去量纲,缩小变量范围简化计算。

方法:每个元素/所在列的列向量的均值。

4.计算子序列中各个指标与母序列的关联系数

先求每子列元素与母列之间差的绝对值,在求出矩阵中所有元素的最小值a和最大值b。且取分辨系数p/rho=0.5

在通过公式计算

5.求灰色关联度:

公式:每列子序列与母序列关联系数的均值。

6.分析结果进行总结。

MATLAB代码实现:

参考代码:

%% 灰色关联分析用于系统分析例题的讲解
clear;clc
load gdp.mat  % 导入数据 一个6*4的矩阵
% 不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量,并把Excel的数据粘贴过来
% 注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内
Mean = mean(gdp);  % 求出每一列的均值以供后续的数据预处理
gdp = gdp ./ repmat(Mean,size(gdp,1),1);  %size(gdp,1)=6, repmat(Mean,6,1)可以将矩阵进行复制,复制为和gdp同等大小,然后使用点除(对应元素相除),这些在第一讲层次分析法都讲过
disp('预处理后的矩阵为:'); disp(gdp)
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))

讨论:

灰色分析用于综合评价问题:

步骤:

MATLAB代码实现:

这里的代码和博主之前TOPSIS算法一文:数学建模——TOPSIS法_Wei&Yan的博客-CSDN博客

前面的操作都一致,只是在最后添加上了灰色相关分析的方法

步骤:

  1. 先对矩阵进行预处理:每个元素/所在列的均值
  2. 构造母序列和子序列

母序列:取每一行的max构成一个列向量

子序列:预处理后的矩阵

3.计算灰色关联度

先求每个元素与母序列差的绝对值矩阵,再求两级最大/小差。

最后利用公式求灰色关联度

4.求权重:每列的均值/每列均值的和

5.求得分:(矩阵中每个元素*其所在列的权重)的矩阵的列和。(得到一个)

6.归一化得分:每个元素/向量和

图形对比:

参考代码:

这里只参考了主函数加上带有灰色相关分析的代码,其他自定义函数可参考博主原来的文章TOPSIS算法:数学建模——TOPSIS法_Wei&Yan的博客-CSDN博客

%% 灰色关联分析用于综合评价模型例题的讲解
clear;clc
load data_water_quality.mat
% 不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量,并把Excel的数据粘贴过来
% 注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内

%%  判断是否需要正向化
[n,m] = size(X);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) 
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0:  ']);   %1

if Judge == 1
    Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]
    disp('请输入需要处理的这些列的指  标类型(1:极小型, 2:中间型, 3:区间型) ')
    Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]:  '); %[2,1,3]
    % 注意,Position和Type是两个同维度的行向量
    for i = 1 : size(Position,2)  %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数
        X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
    % Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数
    % 第一个参数是要正向化处理的那一列向量 X(:,Position(i))   回顾上一讲的知识,X(:,n)表示取第n列的全部元素
    % 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)
    % 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
    % 该函数有一个返回值,它返回正向化之后的指标,我们可以将其直接赋值给我们原始要处理的那一列向量
    end
    disp('正向化后的矩阵 X =  ')
    disp(X)
end

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

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

%% 计算得分
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') % 进行排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每天一道leetcode:516. 最长回文子序列(动态规划中等)

今日份题目: 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例1 输入:s "bbb…

Nginx环境搭建以及Docker环境部署

目录 Nginx环境搭建 1.首先创建Nginx的目录并进入 2.下载Nginx的安装包 可以通过FTP工具上传离线环境包,也可通过wget命令在线获取安装包 没有wget命令的可通过yum命令安装 3.解压Nginx的压缩包 4.下载并安装Nginx所需的依赖库和包 安装方式一 安装方式二 --- 也…

hello world, this is my time

case1 2023-08-11 00:19:12 其实我这个人吧, 没事做也会刷点b站和抖音, 而且我经常看罗翔老师讲, 什么是爱, 他说爱是责任, 爱是不离不弃, 爱是有耐心, 爱是安慰, 爱也是陪伴, 爱同时也是一种共生的关系, 两个人彼此之间共生, 互相都希望彼此可以好好的生活下去, 看见对方活的比…

Git全栈体系(六)

第十章 自建代码托管平台-GitLab 一、GitLab 简介 GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。GitLab 由乌克…

红帽停止公开Linux操作系统(RHEL)源代码,甲骨文等企业成立协会

根据报道,红帽(Red Hat)在8月11日宣布停止公开企业级Linux操作系统(RHEL)的源代码后,甲骨文、SUSE和CIQ昨日联合发布了一份声明。声明宣布成立了Open Enterprise Linux Association(OpenELA&…

安全测试中常见的业务安全问题

“在测试过程中,特殊的操作往往容易触发异常场景,而这些异常场景也很容易引起安全问题!” 常见的安全漏洞就不多说了,这里主要介绍常见的业务安全问题及修复建议。 01 刷短信 问题描述: 当发送短信的请求接口只需要…

用最少数量的箭引爆气球——力扣452

文章目录 题目描述解法一题目描述 解法一 int findMinArrowShots(vector<vector<int>>& nums){if(num

什么,你说你不会通过jdbc一次性创建10个数据库???

小朋友你是否有很多问号&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 1、在资源文件中建一个文件&#xff0c;填入连接数据库的基本信息。 2、通过反射拿到资源文件。…

LeetCode150道面试经典题--判断子序列(简单)

1.题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序…

leetcode19. 删除链表的倒数第 N 个结点

题目&#xff1a;leetcode19. 删除链表的倒数第 N 个结点 描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 让前面的节点比后面的节点先走n1步&#xff0c;因为从链表的尾节点的下一个节点开始&…

【数据结构】“单链表”的练习题(二)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

linux学习(进程创建)[8]

创建进程 myproc.c #include <stdio.h> #include <unistd.h>int main() {printf("我是父进程\n");pid_t id fork();if(id < 0){printf("创建子进程失败\n");return 1;}else if(id 0){while(1){printf("我是子进程&#xff1a; pid…

Java基础入门篇——数组初识

一、数组 1.假设某公司有100个员工&#xff0c;需要统计某公司员工的工资情况&#xff0c;首先需要声明100个变量来分别记每个员工的工资&#xff0c;那么如果按照之前的做法&#xff0c;可能定义的结构如下所示&#xff1a; int a1,a2,a3,......a100; 要求你输出这100个员工…

如何将maven部署在Idea的教学,和idea介绍

目录 一.idea介绍&#xff0c;以及一些基本特点&#xff01; 1.1idea介绍 1.2idea特点 1.3.idea和eclipse区别 1.4idea安装 4.1下载网址 4.2下载后安装&#xff08;见图片&#xff09; 1.5 Idea的一些操作更改 5.1主题颜色 5.2设置鼠标悬浮提示 5.3显示方法分隔符 5.4忽…

如何解决新学期分班查询公布难题?试试这个方法

作为教师&#xff0c;我们常常需要进行学生分班管理&#xff0c;这项工作繁琐但至关重要。为了提高工作效率&#xff0c;我们可以利用现代技术开发一款学生分班查询系统。本文将介绍如何设计和开发这个系统。 首先&#xff0c;我们可以选择使用易查分这样的工具来帮助我们管理…

[git] git基础知识

git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 git易于学习&#xff0c;性能极快 什么是版本控制&#xff1f; 版本控制是一种记录文件内容变化&#xff0c;以便将来查阅特定版本修订情况&#xff0c;可以记录文件修改历史…

(学习笔记-进程管理)多线程冲突如何解决

对于共享资源&#xff0c;如果没有上锁&#xff0c;在多线程的环境里&#xff0c;很有可能发生翻车。 竞争与合作 在单核 CPU 系统里&#xff0c;为了实现多个程序同时运行的假象&#xff0c;操作系统通常以时间片调度的方式&#xff0c;让每个进程每次执行一个时间片&#xf…

现在国家正规相亲平台有哪些?盘点五款安全值得使用的相亲软件

随着互联网的普及&#xff0c;越来越多的人选择通过相亲软件寻找自己的另一半。但是&#xff0c;在众多相亲软件中靠谱的相亲软件有哪些呢&#xff0c;该如何选择&#xff1f;本文将盘点几款安全靠谱的相亲软件&#xff0c;可以了解看看哪个适合你。 第一款&#xff1a;一伴婚…

恭喜又一白鲸开源成员成为 Apache SeaTunnel PMC Member

个人简介 王海林 白鲸开源研发工程师GitHub ID&#xff1a;hailin0做过性能监控、数据开发平台等&#xff0c;目前聚焦在数据集成同步及其周边生态的研发 问&#xff1a;作为白鲸开源的一员&#xff0c;您为社区做出过哪些贡献&#xff1f;具体方案&#xff08;代码类&#x…

OpenStack-Y版安装部署

OpenStack-Y版安装部署 目录 OpenStack-Y版安装部署 1、环境准备 1.1 环境简介1.2 配置hosts解析(所有节点)1.3 配置时间同步1.4 安装openstack客户端(控制节点执行)1.5 安装部署MariaDB(控制节点执行)1.6 安装部署RabbitMQ(控制节点执行)1.7 安装部署Memcache(控制节点执行)2、…