2023年12月15日发(作者:高考数学试卷构成)
数学建模常用模型01:.灰色预测法
给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎
涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)
PS:巨方便简单上手,貌似现在是免费
官网:
基于灰色建模理论的灰色预测法,按照其预测问题的特征,可分为五种基本类型,即数列预测、灾变预测、季节灾变预测、拓扑预测和系统
综合预测。这五种类型的预测方法,都是区域开发研究中重要而且常用的预测方法。本节只对数列预测法进行介绍。
灰色预测模型使用范围:
①数据样本点个数少,6-15个
②数据呈现指数或曲线的形式
③只适合做中短期预测,不适合长期预测。
数列预测就是对某一指标的发展变化情况所作的预测,其预测的结果是该指标在未来各个时刻的具体数值。譬如,在地理学研究中,人口数
量预测、耕地面积预测、粮食产量预测、工农业总产值预测,等等,都是数列预测。
数列预测的基础,是基于累加生成数列的GM(1,1)模型。
设
一般而言,
对其进行预测。
如果对作依次累加生成处理,即
是所要预测的某项指标的原始数据。
是一个不平稳的随机数列,对于这样一个随机数列,如果数据趋势无规律可循,则无法用回归预测法
则得到一个新的数列。这个数列与原始数列
相比较,其随机性程度大大弱化,平稳程度大大增加。对于这样的新数列,其变化趋势可以近似地用如下微分方
程描述:
在(1)式中,a和u可以通过如下最小二乘法拟合得到:
在(2)式中,YM为列向量YM=[x(0)(2),x(0)(3),…,x(0)(M)]T;B为构造数据矩阵:
微分方程(1)式所对应的时间响应函数为:
(3)式就是数列预测的基础公式,由(3)式对一次累加生成数列的预测值
可以求得原始数的还原值:
在(4)式中,t=1,2,…,M,并规定。原始数据的还原值与其观测值之间的残差值ε(0)(t)和相对误差值q(t)如下:
对于预测公式(3),我们所关心的问题是它的预测精度。这一预测公式是否达到精度要求,可按下述方法进行精度检验。
首先计算:
其次计算:方差比c=s2/s1
及小误差概率:
一般地,预测公式(3)的精度检验可由表10-2给出。如果p和c都在允许范围之内,则可以计算预测值。否则,需要通过对残差序列
的分析对(3)式进行修正,灰色预测常用的修正方法有残差序列建模法和周斯分析法两种。
表1 灰色预测精度检验等级标准
二、引入残差模型的数列预测
当灰色预测精度检验等级标准超出所允许的范围时,需引入残差模型对GM(1,1)模型进行修正。具体模型如下:
原始残差序列(预测数列与原始数列只差)
使用该数据序列 建立残差GM(1,1)模型,
引入残差模型的影响,得新的预测序列
表2 城市交通噪声数据/dB(A)
序号
1
2
3
4
年份
1986
1987
1988
1989
71.1
72.4
72.4
72.1
序号
5
6
7
年份
1990
1991
1992
71.4
72.0
71.6
该例题matlab源代码如下:
clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]\';%注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n) %计算级比
range=minmax(lamda\') %计算级比的范围
x1=cumsum(x0); %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=BY
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1));%求微分方程的符号解
xt=vpa(x,6)%以小数格式显示微分方程的解
yuce1=subs(x,t,[0:n-1]);%式1 为提高预测精度,先计算预测值,再显示微分方程的解。%%%这里,把[0:n-1]修改就可以了,如果预测后5年的,就改成n+4。
yuce1=double(yuce1);% 符号数转换成数值类型,否则无法做差分运算
yuce=[x0(1),diff(yuce1)] %差分运算,还原数据
yuce2=subs(x,t,[0:n+4]);%为提高预测精度,先计算预测值,再显示微分方程的解。
Yuce2=double(yuce2);%符号数转换成数值类型,否则无法做差分运算
yucexin=[x0(1),diff(yuce2)] %差分运算,还原数
epsilon=x0\'-yuce %计算残差
delta=abs(epsilon./x0\') %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda\' %计算级比偏差值
%【直接把式1 总n-1修改,运算会提示错误,但是不影响,如果想消除错误提示,可以添加黄色区域的,计算出两个结果,一个结果是不预测的一个结果是预测的。】
这里再举一个例子:
假如有[71.1 72.4 72.4 72.1 71.4 72.0 71.6]这么一组数字,可以是连续几年的某商店收入,我们用灰色预测可以
预测出这组数据下一年的数值,通过把预测出的数据加入数组中,进而我们可以做到连续几年的预测
实现代码如下:
clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]\';%注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n); %计算级比
range=minmax(lamda\'); %计算级比的范围
x1=cumsum(x0); %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=BY
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1));%求微分方程的符号解
xt=vpa(x,6)%以小数格式显示微分方程的解
yuce1=subs(x,t,[0:n-1]);%为提高预测精度,先计算预测值,再显示微分方程的解
yuce1=double(yuce1);%符号数转换成数值类型,否则无法做差分运算
yuce=[x0(1),diff(yuce1)]; %差分运算,还原数据
epsilon=x0\'-yuce; %计算残差
delta=abs(epsilon./x0\'); %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda\';%计算级比偏差值
更多推荐
预测,数据,精度,计算
发布评论