Matlab灰色预测模型
灰色预测模型(Grey Prediction Model)是一种处理少量、不完全信息的预测方法,尤其适用于数据量少(≥4个)且趋势不明显的场景。
核心模型:GM(1,1)
通过累加生成序列挖掘数据内在规律
核心模型原理

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




创建一个文件名为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));



浙公网安备 33010602011771号