灰色关联度分析 (GRA) MATLAB算法实现
项目简介
本项目旨在利用 MATLAB 编程环境完整实现灰色关联度分析法(Grey Relational Analysis, GRA)。这是一种多因素统计分析方法,特别适用于解决数据量小、信息不确定性强的系统分析问题。通过量化待识别对象(比较序列)与研究对象(参考序列)之间的几何形状相似程度,该算法能够计算出关联度,从而判断各影响因素对主行为的贡献大小或关联紧密程度。
本程序不仅实现了核心算法逻辑,还包含了数据模拟、预处理、计算以及详细的可视化展示功能,帮助用户直观地识别系统的主要影响因子。
功能特性
- 全流程自动化处理:涵盖了从数据加载、无量纲化、各级差值计算、关联系数计算到最终关联度排序的完整流程。
- 模拟数据生成:程序内置了模拟数据集(对应某地区GDP与各类产业、投资、消费等指标),包含10个样本点(年份)和6个指标维度,无需外部文件即可直接运行演示。
- 支持均值化处理:实现了数据的无量纲化标准化,采用“均值化”方法消除不同物理量纲带来的不可比性。
- 动态参数配置:支持自定义分辨系数(默认为0.5),适应不同的分析需求。
- 结果可视化:自动生成包含两个子图的图表,分别展示标准化后的数据走势对比和关联度排序柱状图。
- 详细的控制台输出:运行过程中会在命令行窗口实时输出中间参数(如两级极差)和最终的详细排名表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本(代码使用基础函数,对版本兼容性要求较低)。
- 工具箱:无需特定工具箱,仅依赖 MATLAB 基础数学和绘图模块。
算法实现与逻辑细节
程序采用单一脚本结构,依次执行以下七个关键步骤,逻辑严密且符合灰色系统理论标准:
1. 数据准备与初始化
程序首先初始化工作环境,并生成一个 10行 × 6列 的模拟数据矩阵。
- 数据结构:行代表年份(2015-2024),列代表指标。
- 序列划分:自动将第1列提取为参考序列(母序列,代表系统特征行为,如GDP),将第2至6列提取为比较序列(子序列,代表相关因素)。
- 参数设定:设定分辨系数 rho = 0.5,用于调节区分度。
2. 数据无量纲化 (标准化)
由于原始数据单位不同(如亿元、万人等),直接比较无意义。程序采用
均值化方法进行处理:
- 对每一列数据,计算其算术平均值。
- 将该列所有元素除以该平均值,得到无量纲化后的标准化矩阵。
- *代码中保留了初值化的注释逻辑,但实际执行的是均值化逻辑。*
3. 计算绝对差序列
计算各比较序列与参考序列在各个时间点上的绝对差值,构建差值矩阵。在此基础上,程序计算出两个关键的全局参数:
- 两级最小差 (Min-Min):所有序列在所有时刻差值中的最小值。
- 两级最大差 (Max-Max):所有序列在所有时刻差值中的最大值。
4. 计算关联系数
依据灰色关联理论公式,利用上述计算得到的差值矩阵、两级极差和分辨系数,逐点计算关联系数。该系数描述了比较序列与参考序列在特定时刻的从属程度。
5. 计算灰色关联度
采用
等权平均法求解关联度。将某一个比较序列在所有时间点上的关联系数求取算术平均值,得到该序列对参考序列的最终灰色关联度。
6. 排序与输出
根据计算出的灰色关联度数值大小,对各影响因素进行降序排列。程序会在控制台打印格式化报表,显示排名、对应的原始列索引以及具体的关联度数值,方便用户快速定位核心因子。
7. 可视化绘图
程序最后生成一个综合图表窗口,包含两个子图:
- 走势对比图 (上方):绘制标准化后的参考序列(黑色实线)和所有比较序列(彩色虚线)的折线图,直观展示几何形状的贴近程度。
- 关联度排序图 (下方):绘制柱状图,按关联度从高到低排列。每个柱体对应一个因素,颜色不同,且柱上方标注了具体的关联度数值。X轴标签动态对应排序后的序列名称。
使用方法
- 启动 MATLAB 软件。
- 将包含程序代码的脚本文件放置于当前工作路径下。
- 直接运行主函数
main。 - 观察命令行窗口输出的计算结果与排名。
- 查看弹出的图形窗口,分析数据走势与关联度排序。
自定义数据说明:
若需分析自己的数据,可在代码的“数据准备”部分,将 raw_data 变量的赋值改为读取 Excel 文件(如 xlsread)或直接替换矩阵数值。请确保第一列为参考序列,后续列为比较序列。