灰色系统 GM(1,1) 预测模型 MATLAB 实现
项目介绍
本项目实现了一个经典的灰色预测 GM(1,1) 模型。该模型专门针对“小样本、贫信息”的不确定性系统建模,通过对原始序列进行累加处理,揭示数据内部隐含的演变规律。该算法在资源环境、经济预测及工业指标分析等样本量较少且分布规律不明显的场景中具有显著优势。
功能特性
- 自动化预处理:内置级比检验逻辑,用于评估原始序列是否满足建模的前提条件。
- 核心算法实现:完整实现了 1-AGO(累加生成)、均值背景值构造以及基于最小二乘法的参数估计。
- 多维精度评价:提供平均相对误差分析与后验差检验(C 检验),并根据标准自动判定模型精度等级(一级至四级)。
- 趋势预测:支持自定义未来周期的外推预测。
- 专业可视化:生成包含原始数据、拟合曲线及预测趋势的对比图,并嵌入相对误差分布的子图,直观展现模型性能。
系统要求
- 环境:MATLAB R2016b 或更高版本。
- 工具箱:无需额外工具箱,基于 MATLAB 基础函数库开发。
详细实现逻辑
模型运行遵循以下标准灰色建模流程:
- 输入与初步检验:
接收非负的原始时间序列数据,计算级比(相邻数据比例),并根据公式计算级比容许覆盖范围。如果数据未通过检验,程序将发出警告,提醒用户模型精度可能受离群值影响。
- 累加生成 (AGO):
对原始序列进行一阶累加生成,通过消除原始数据的波动性,使其呈现明显的指数增长规律,为建立微分方程奠定基础。
- 数据矩阵构造与参数估计:
-
均值生成:对累加序列计算紧邻均值生成序列,用作微分方程的背景值。
-
最小二乘法 (OLS):构造数据向量 $Y_m$ 与矩阵 $B$,求解法方程。通过 $(B^T B)^{-1} B^T Y_m$ 计算核心参数:发展系数 $a$ 和灰色作用量 $b$。
- 时间响应方程求解:
利用求得的参数构建 GM(1,1) 的白化微分方程解析解,计算累加序列的拟合值。
- 累减还原 (IAGO):
对预测的累加序列进行一阶累减操作,将数据还原回原始量级,得到针对历史数据的拟合值以及针对未来时段的预测值。
- 误差评估与结果展示:
计算残差与相对误差。通过计算原始序列标准差与残差标准差的比值(后验差比值 C),结平均相对误差,给出该预测模型的综合精度评价。
关键实现细节
- 发展系数 $a$ 与内涵项 $b$:
这两个参数决定了模型的趋势。$a$ 反映了系统的发展态势(增长或衰退的速率),$b$ 反映了系统内部的转化关系。
- 精细化可视化设计:
代码在图形窗口中同时绘制了实线点图(原始值)、虚线星号图(拟合值)以及不同颜色标识的方块图(未来预测值)。此外,利用 axes 函数在主图内部嵌入了一个柱状图,实时反映每个时间点的百分比误差分布。
- 精度判定标准:
代码严格遵循灰色系统理论评价标准:
- 一级(显好):$C leq 0.35$ 且 平均相对误差 $leq 1%$。
- 二级(良好):$C leq 0.50$ 且 平均相对误差 $leq 5%$。
- 三级(合格):$C leq 0.65$ 且 平均相对误差 $leq 10%$。
- 四级(不合格):超出上述范围。
使用方法
- 在代码开头定义待预测的原始数据向量
x0。 - 设置需要预测的未来周期数
predict_num。 - 运行程序,在 MATLAB 命令行窗口查看参数估计结果、误差分析表及精度等级。
- 观察自动生成的图形界面,评估拟合曲线与实际观测值的重合度及其外推趋势。