Matlab灰色预测模型

灰色预测模型(Grey Prediction Model)是一种处理少量、不完全信息的预测方法,尤其适用于数据量少(≥4个)且趋势不明显的场景。

核心模型:GM(1,1)
通过累加生成序列挖掘数据内在规律

核心模型原理

image

  • 变量右上方的(0)和(1)是用来表示不同数据的不同生成阶次

image

image

image

image

创建一个文件名为gm11.m

function [pred, params] = gm11(x0, predict_step)
% GM(1,1)灰色预测模型
% 输入:
%   x0 - 原始数据序列 (行向量,长度≥4)
%   predict_step - 预测步数
% 输出:
%   pred - 预测值(包括历史拟合值 + 未来预测值)
%   params - 模型参数 [a, b]

n = length(x0);
if n < 4
    error('数据量不足!至少需要4个数据点。');
end

% 1. 累加生成 (AGO)
x1 = cumsum(x0);

% 2. 构建矩阵B与Y
B = [-0.5*(x1(1:end-1) + x1(2:end))', ones(n-1,1)]; 
Y = x0(2:end)';

% 3. 最小二乘估计参数
params = (B' * B) \ (B' * Y); 
a = params(1);
b = params(2);

% 4. 计算时间响应式
k = 0:n+predict_step-1;
x1_hat = (x0(1) - b/a) * exp(-a*k) + b/a;

% 5. 累减还原 (IAGO)
x0_hat = [x1_hat(1), diff(x1_hat)]; 
pred = x0_hat;

% 6. 可视化结果
figure;
plot(1:n, x0, 'ro-', 'LineWidth', 1.5, 'MarkerSize', 8); hold on;
plot(1:n+predict_step, pred, 'b--', 'LineWidth', 1.5);
legend('原始数据', '预测数据', 'Location', 'best');
title('GM(1,1)灰色预测');
xlabel('时间点'); ylabel('值');
grid on;
hold off;
end

再创建一个文件调用灰色预测模型
如下

% 示例数据:某产品年度销量
x0 = [71.1, 72.4, 72.4, 72.1, 71.4];  % 原始数据
predict_step = 3;  % 预测未来3步

% 调用模型
[pred, params] = gm11(x0, predict_step);

% 显示结果
fprintf('发展系数 a = %.4f\n', params(1));
fprintf('灰色作用量 b = %.4f\n', params(2));
fprintf('未来%d步预测值: ', predict_step);
disp(pred(end-predict_step+1:end));

image

image

posted @ 2025-07-15 17:18  屈臣  阅读(61)  评论(0)    收藏  举报