Matlab应用笔记--灰色预测

注:本篇随笔依据《Matlab在数学建模上的应用》中第3章介绍来写,主要简单介绍灰色模型及其Matlab实现
(博客以及Matlab小白,若有不当欢迎指出)

灰色模型(gray model)简介

灰色模型的作用:解决数据预测问题。
灰色模型的优点:实用稳定,不仅适用于大数据量的预测,在数据量比较少时(3个以上即可)预测结果依旧准确。

Matlab中灰色模型的使用

详细流程(熟悉的话可跳过看总结)

(1)先对数据进行预处理。

预处理是指将杂乱无章的数据列通过一定的方法处理,变成有规律的时间序列数据。
常用的数据处理方式有累加和累减两种,通常用累加。
设原始数据列:x(0)=x(0)(1),x(0)(2),...,x(0)(n)
累加:x(1)(t)=k=1tx(0)(k),t=1,2,...,n

(2)建立x(1)(t)的一阶线性微分方程。

在诸多灰色模型中,单序列一阶线性微分方程模型GM(1,1)最为常用。
dx(1)dt+ax(1)=u
其中a,u为待定系数,分别称为发展系数和灰色作用量,构造矩阵a^=(au)

(3)建立累加矩阵B和常数项向量Y。

(4)最小二乘法求解灰参数a^

a^=(BTB)1BTY

(5)将灰参数a^代入模型求解。

得到:x^(1)(t+1)=(x(0)(1)ua)eat+ua

(6)还原为x^(0)序列。

x^(0)(t+1)=x^(1)(t+1)x^(1)(t)

(7)检验模型。


也可以直接作图看效果。

(8)利用模型进行预测。

大致流程(总结)

①对原始数据进行累加。(弱化随机性和波动性)
②构建累加矩阵B与常数向量。
③求解灰参数。
④将参数带入预测模型进行数据预测。

模版代码

clear
A=[1810,1938,1838,1463]; %数据(必须大于3个)
B=cumsum(A); %对向量中的元素累加(第几个等于原来的前几个之和)
n=length(A); %数据量(向量长度)
for i=1:(n-1) %求相邻数据的均值向量
C(i)=(B(i)+B(i+1))/2;
end
E=[-C;ones(1,n-1)]; %求累加矩阵B
D=A;D(1)=[];
D=D'; %求常数项列向量Y
c=(E*E')\(E*D); %求系数矩阵(列向量)a
c=c'; %转置(变为行向量)
a=c(1);b=c(2);
F=[];F(1)=A(1);
for i=2:(n+3) %还要预测接下来的3个数据
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a; %直接带入灰参数得到模型,求数据
end
G=[];G(1)=A(1);
for i=2:(n+3)
G(i)=F(i)-F(i-1); %还原序列(去累加)
end
t1=1:4;
t2=1:7;
G %显示根据灰色模型得到的数据
plot(t1,A,'o',t2,G) %作图,将原始数据与灰色模型得到的数据相比较
posted @   kksk43  阅读(968)  评论(3编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
特效
黑夜
侧边栏隐藏
点击右上角即可分享
微信分享提示