灰色预测MATLAB程序
灰色预测原理及实例
灰色预测理论
陈文广
www.t青he岛m理eg工al大le学ry.管co理m学院
灰色系统的定义
白色系统是指一个系统的内部特征是完全已知的,即系统的信 息是完全充分的。
黑色系统是指一个系统的内部信息对外界来说是一无所知的, 只能通过它与外界的 联系来加以观测研究。
灰色系统是指“部分信息已知,部分信息未知”的“小样 本”,“贫信息”的不确定性系统,它通过对“部分”已知信息的 生成、开发去了解、认识现实世界,实现对系统运行行为和演 化规律的正确把握和描述.
左邻级比生成x(0) (n),则称x(0) (1)和x(0) (n)为级比生成
母板日期
青岛理工大学 C管om理pa学ny院Logo
2 灰色系统的模型
1. 建模原理 给定观测数据列
x
(
0)
经一{x次(累0) 加(1得),
x(0)
(2),
,
x(0)
(N)
}
x(1) {x(1) (1), x(1) (2), , x(1) (N ) }
u a
.
对等间隔取样的离散值 (注意到 t0 1)则为
x(1) (k 1) [x(1) (1) u ]eak u .
a
a
(2.4)
灰色建模的途径是一次累加序列(2.2)通过最小二乘法来 估计常数a与u.
母板日期
青岛理工大学 C管om理pa学ny院Logo
2 灰色系统的模型
因x(1) (1) 留作初值用,故将 x(1) (2), x(1) (3),..., x(1) (N ) 分别代入方程(2.3),
6 3+8+10+7 34.
母板日期
青岛理工大学 C管om理pa学ny院Logo
Matlab灰色预测模型GM(1,1)代码
s=0;xx0(1)=X0(1);
for jj=2:1:m2;
xx0(jj)=xx1(jj)-xx1(jj-1);
end
disp('GM(1,1)对数列进行预测结果');xx0
disp('数列1原始观测数据');X0
disp('a');AU(1)
disp('u');AU(2)
z=z+x(i,:);
be(i,:)=z;
end
for i=2:n %对原始数列平行移位
y(i-1,:)=x(i,:);
end
for i=1:n-1 %计算数据矩阵B的第一列数据
c(i,:)=-0.5*(be(i,:)+be(i+1,:));
% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是 GM(1,1)。
% 原始数据的处理方法是一次累加法。
y=input('请输入数据 ');
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i);
disp(['再下个拟合值为',num2str(ys(n+2))]);
x(0)={x(0)(1),x(0)(2),……,x(0)(N)}=
{ 724.57, 746.62, 778.27, 800.8, 827.75,871.1, 912.37, 954.28, 995.01, 1037.2}
function c7fun73
【数学建模】灰色预测模型(预测)
【数学建模】灰色预测模型(预测)文章目录•一、算法介绍•o 1.灰色预测模型o 2.灰色系统理论o 3. 针对类型o 4. 灰色系统o 5. 灰色生成o 6. 累加生成o7. GM(1,1)模型o▪推导▪精度检验▪精度检验等级参照表•二、适用问题•三、算法总结•o 1. 步骤•四、应用场景举例•o 1. 累加生成o 2. 建立GM(1,1)模型o 3. 检验预测值•五、MATLAB代码•六、实际案例•七、论文案例片段(待完善)灰色预测模型主要针对数学建模问题中的一些小的子问题进行求解,如果想直接使用请跳转至——四、五另外之前看过一篇比较完整的【数学建模常用算法】之灰色预测模型GM,作者:張張張張视频回顾一、算法介绍1.灰色预测模型灰色预测模型(Gray Forecast Model)是通过少量的、不完全的的信息,建立数学模型并做出预测的一种预测方法.当我们应用运筹学的思想方法解决实际问题,制定发展战略和政策、进行重大问题的决策时,都必须对未来进行科学的预测.预测是根据客观事物的过去和现在的发展规律,借助于科学的方法对其未来的发展趋势和状况进行描述和分析,并形成科学的假设和判断。
2.灰色系统理论灰色系统理论是研究解决灰色系统分析、建模、预测、决策和控制的理论.灰色预测是对灰色系统所做的预测。
目前常用的一些预测方法(如回归分析等),需要较大的样本,若样本较小,常造成较大误差,使预测目标失效。
灰色预测模型所需建模信息少,运算方便,建模精度高,在各种预测领域都有着广泛的应用,是处理小样本预测问题的有效工具。
3. 针对类型灰色系统理论是由华中理工大学邓聚龙教授于1982年提出并加以发展的。
二十几年来,引起了不少国内外学者的关注,得到了长足的发展。
目前,在我国已经成为社会、经济、科学技术在等诸多领域进行预测、决策、评估、规划控制、系统分析与建模的重要方法之一。
特别是它对时间序列短、统计数据少、信息不完全系统的分析与建模,具有独特的功效,因此得到了广泛的应用.4. 灰色系统灰色系统是黑箱概念的一种推广。
Matlab灰色预测工具箱
Matlab灰色预测工具箱——走过数模2009-07-02 23:05灰色预测几乎是每年数模培训必不可少的内容,相对来说也是比较简单,这里写了四个函数,方便在Matlab里面调用,分1),新陈代谢GM(1,1),Verhust自己写得难免有所疏忽,需要的朋友自己找本书本来试验一下。
Gm(1,1)function [px0,ab,rel]=gm11(x0,number)%[px0,ab,rel]=gm11(x0,number)%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比)%默认的number参数为原数组大小if nargin==1number=max(size(x0));endn=max(size(x0));x1=zeros(size(x0));for k=1:nfor i=1:kx1(k)=x1(k)+x0(i);endendz=zeros(size(x0));for k=2:nz(k)=0.5*(x1(k)+x1(k-1));endy=x0';y(1)=[];b(:,1)=-z';b(:,2)=1;b(1,:)=[];ab=inv(b'*b)*b'*y;a=ab(1);b=ab(2);px0(1)=x0(1);%求还原值系列for k=1:number-1px0(k+1)=(1-exp(a)) * ( x0(1)-b/a ) * exp(-a*k);endtemp=px0(1:n);x0;temp=(temp-x0)./x0; %相对误差temp(1)=[]; %删除第一个为零的误差temp=abs(temp);rel=sum(temp)/(n-1)*100;残差Gm(1,1)function [px0,ab,rel]=ccgm11(x0,number)%[px0,ab,rel]=gm11(x0,number)%px0为残差预测数列,ab为求得的系数,rel为平均相对误差(为百分比) %默认的number参数为原数组大小if nargin==1number=max(size(x0));endn=max(size(x0)); %数组大小..[px0,ab,rel]=gm11(x0,number);wucha=x0-px0(1:n);i=n;%求后面的同号的数目.while(wucha(i)*wucha(i-1)>0 & i>=2)i=i-1;endstart=i;length=n-i+1;new=wucha(start:n);if length>=4pwucha=gm11(new);px0(start:n)=px0(start:n)+pwuchaclear wucha;wucha=px0-x0;wucha=wucha./x0; %相对误差wucha=abs(wucha);rel=sum(wucha)/(n-1)*100;endverhustfunction [px0,ab,rel]=verhust(x1,number)%[px0,ab,rel]=verhust(x0,number)%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比) %默认的number参数为原数组大小if nargin==1number=max(size(x1));endn=max(size(x1));x0(1)=x1(1);for k=2:nx0(k)=x1(k)-x1(k-1);z(k)=0.5*(x1(k)+x1(k-1));endx0;z;B=[-(z(2:n))' (z(2:n).^2)'];B;Y=(x0(2:n))';Y;ab=inv(B'*B)*B'*Y;a=ab(1);b=ab(2);for k=1:numberpx0(k)=(a*x1(1))/(b*x1(1)+(a-b*x1(1)).*exp(a*(k-1)));endtemp=px0(1:n);x1;temp=(temp-x1)./x1; %相对误差temp(1)=[]; %删除第一个为零的误差temp=abs(temp);rel=sum(temp)/(n-1)*100;新陈代谢Gm(1,1)function [px0,ab,rel]=xcdxgm11(x0,number,step)%[px0,ab,rel]=xcdxgm11(x0,number,step)%x0为原系列,number为要预测的数目,step为基本步长%px0为预测数列,rel为平均相对误差,rel为平均相对误差(为百分比) %默认的number参数为原数组大小%模型假设预测的数据和原始数据都要大于等于5if nargin==1number=max(size(x0));step=max(size(x0));endif nargin==2step=max(size(x0));endn=max(size(x0));if n<step | n<5error('此模型要求至少有五个原始数据,并且原始数据个数要大于新陈代谢的步长.'); end[px0,ab,rel]=gm11(x0,n);last=n;x0;px0;while last<numberbegin=last-step+1;temp=px0(begin:last);temp=gm11(temp,step+1);last=last+1;px0(last)=temp(step+1);end。
灰色系统预测GM(1,1)模型及其Matlab实现
灰色系统预测GM(1,1)模型及其Matlab 实现预备知识(1)灰色系统白色系统是指系统内部特征是完全已知的;黑色系统是指系统内部信息完全未知的;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。
(2)灰色预测 灰色预测,是指对系统行为特征值的发展变化进行的预测,对既含有已知信息又含有不确定信息的系统进行的预测,也就是对在一定范围内变化的、与时间序列有关的灰过程进行 预测。
尽管灰过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此得到的数据集合具备潜在的规律。
灰色预测是利用这种规律建立灰色模型对灰色系统进行预测。
目前使用最广泛的灰色预测模型就是关于数列预测的一个变量、一阶微分的GM(1,1)模型。
它是基于随机的原始时间序列,经按时间累加后所形成的新的时间序列呈现的规律可用一阶线性微分方程的解来逼近。
经证明,经一阶线性微分方程的解逼近所揭示的原始时间序列呈指数变化规律。
因此,当原始时间序列隐含着指数变化规律时,灰色模型GM(1,1)的预测是非常成功的。
1 灰色系统的模型GM(1,1)1.1 GM(1,1)的一般形式设有变量X (0)={X (0)(i),i=1,2,...,n}为某一预测对象的非负单调原始数据列,为建立灰色预测模型:首先对X (0)进行一次累加(1—AGO, Acumulated Generating Operator)生成一次累加序列:X (1)={X (1)(k ),k =1,2,…,n}其中X (1)(k )=∑=ki 1X (0)(i)=X (1)(k -1)+ X (0)(k ) (1) 对X (1)可建立下述白化形式的微分方程:dtdX )1(十)1(aX =u (2)即GM(1,1)模型。
上述白化微分方程的解为(离散响应): ∧X (1)(k +1)=(X (0)(1)-a u )ak e -+au(3)或∧X (1)(k )=(X (0)(1)-a u ))1(--k a e +au (4)式中:k 为时间序列,可取年、季或月。
灰色预测的matlab实现,代码大全
disp('确定的模型为:x1(k+1)=(x(1)-u_a)*exp(-k*a)+u_a') 改进灰色模型代码: for i=1:inf if i==1
e(i)=input('输入数据:'); else if e(i-1)==0 break; else end
e(i)=input('输入数据:');
6
1
x2(k+1)=(x0(1)-u_a)*exp(-k*a)+u_a; end %求出新数列的模拟值 x2 x3=x2; x3(m2+k0)=[]; x4=[0 x3]; x5=x2-x4;%利用累减生成法求出原始数据的模拟值 x5 disp('3.一次累加(1-AGO)生成的数据的模拟值:') Y=''; for z=1:m2+k0 Y=strcat(Y,'(',num2str(x2(z)),')'); end disp(Y); disp('4.原始数据的模拟值:') Y=''; for z=1:m2+k0 Y=strcat(Y,'(',num2str(x5(z)),')'); end disp(Y); % 4. 模型检验(算出的值到等级参照表中检查其精度等级) %计算后验差比 C 和残差序列 Q x6=x5(1:m2); Q=x0-x6;%Q 为残差序列 s1=std(Q);%s1 为残差序列 Q 的标准差 s2=std(x0);%s2 为初始序列 x0 的标准差 C=s1/s2;%后验差比 C(越小越好) w1=1:m2; w1=[ones(m2,1) w1']; w2=Q'; [bb,bint,r1,rint,stats]=regress(w2,w1); rcoplot(r1,rint) C1=strcat('5.后验差比(均方差比值): C=',num2str(C));disp(C1); if C<=0.35 disp(' 由于 C<=0.35,则此模型精度等级为 1 级(好) 。'); else if C<=0.5 disp(' 由于 0.35<C<=0.5,则此模型精度等级为 2 级(合格) 。'); else if C<=0.65 disp(' 由于 0.5<C<=0.65,则此模型精度等级为 3 级(勉强) 。'); else disp(' 由于 C>0.65,则此模型精度等级为 4 级(不合格) 。'); end end end
灰色预测模型步骤
灰色预测模型步骤灰色预测模型是一种基于灰色理论的预测方法,其核心是建立一个数学模型来预测未来的发展趋势。
在实践中,灰色预测模型通常应用于经济、社会和环境等各个领域,以帮助决策者制定合理的规划和决策。
灰色预测模型的步骤主要包括以下5个方面:1、建立模型的数据预处理数据预处理是计算机处理向灰色预测模型输入数据的第一步。
在预处理过程中,需要对原始数据进行标准化处理,将非数值型数据转换为数值型数据,同时还需要对数据的质量进行评估,识别和剔除异常值。
2、建立灰色驱动模型在数据预处理后,需要建立一个灰色驱动模型。
该模型是一种简化的数学模型,用于描述因变量和自变量之间的离散关系。
此外,该模型还需要根据实际的情况调整参数,以提高模型的准确性。
3、对模型进行验证在灰色预测模型中,模型验证是非常重要的一步。
通过对模型进行验证,可以评估模型的预测精度,并确定预测误差的可接受范围。
如果模型的预测误差过大,则需要进一步调整模型,以获得更准确的预测结果。
4、进行预测在完成模型的验证后,需要对所建立的模型进行预测。
预测的结果通常是未来的某个时间点的数值预测。
预测结果需要基于实际情况进行解读和分析,并形成有效的决策参考。
5、模型的评价和修正最后,需要对模型进行评价和修正。
因为灰色预测模型是一种逐步调整的预测方法,因此需要在应用过程中进行持续的评价和修正。
通过评价,可以确定模型的适用性和准确性,从而更好地应对未来的预测任务。
总之,灰色预测模型是一种有效的预测方法,可以在很大程度上提高预测精度和决策效率。
通过逐步的建模和修正,该方法可以为各个领域提供更好的预测和决策参考。
灰色预测模型matlab程序精确版
%x=[1019,1088,1324,1408,1601];gm1(x);测试数据%二次拟合预测GM(1,1) 模型function gmcal=gm1(x)if nargin==0x=[1019,1088,1324,1408,1601]end format long g sizex=length(x); %求数组长度k=0;for y1=x k=k+1; if k>1x1(k)=x1(k-1)+x(k);% 累加生成z1(k-1)=-0.5*(x1(k)+x1(k-1));%z1 维数减1,用于计算B yn1(k-1)=x(k);elsex1(k)=x(k);end end %x1,z1,k,yn1 sizez1=length(z1);%size(yn1);z2 = z1';z3 = ones(1,sizez1)';YN = yn1'; % 转置%YNB=[z2 z3];au0=inv(B'*B)*B'*YN;au = au0';%B,au0,auafor = au(1);ufor = au(2);ua = au(2)./au(1);%afor,ufor,ua%输出预测的a u 和u/a 的值constant1 = x(1)-ua;afor1 = -afor;x1t1 = 'x1(t+1)';estr = 'exp';tstr = 't';leftbra = '(';rightbra = ')'; %constant1,afor1,x1t1,estr,tstr,leftbra,rightbrastrcat(x1t1,'=',num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightb ra,'+ ',leftbra,num2str(ua),rightbra)%输出时间响应方程%******************************************************%二次拟合k2 = 0;for y2 = x1k2 = k2 + 1;if k2 > kelseze1(k2) = exp(-(k2-1)*afor);endend%ze1sizeze1=length(ze1);z4 = ones(1,sizeze1)';G=[ze1' z4];X1 = x1'; au20=inv(G'*G)*G'*X1;au2 = au20'; %z4,X1,G,au20Aval = au2(1);Bval = au2(2);%Aval,Bval%输出预测的A,B 的值strcat(x1t1,'=',num2str(Aval),estr,leftbra,num2str(afor1),tstr,rightbra,'+', lef tbra,num2str(Bval),rightbra)%输出时间响应方程for k3=1:nfinalx3fcast(k3) = constant1*exp(afor1*k3)+ua; end%x3fcast %一次拟合累加值for k31=nfinal:-1:0if k31>1x31fcast(k31+1) = x3fcast(k31)-x3fcast(k31-1); elseif k31>0x31fcast(k31+1) = x3fcast(k31)-x(1); elsex31fcast(k31+1) = x(1);endend endx31fcast %一次拟合预测值for k4=1:nfinalx4fcast(k4) = Aval*exp(afor1*k4)+Bval; end%x4fcastfor k41=nfinal:-1:0if k41>1x41fcast(k41+1) = x4fcast(k41)-x4fcast(k41-1); elseif k41>0x41fcast(k41+1) = x4fcast(k41)-x(1); elsex41fcast(k41+1) = x(1);endendend%二次拟合预测值%***精度检验p C************////////////////////////////////// k5 = 0;for y5 = xk5 = k5 + 1;if k5 > sizexelseerr1(k5) = x(k5) - x41fcast(k5);endend%err1%绝对误差xavg = mean(x);%xavg%x平均值err1avg = mean(err1);%err1 平均值k5 = 0;s1total = 0 ;for y5 = xk5 = k5 + 1;if k5 > sizexelses1total = s1total + (x(k5) - xavg)^2;endends1suqare = s1total ./ sizex;s1sqrt = sqrt(s1suqare);%s1suqare,s1sqrt%s1suqare 残差数列x 的方差s1sqrt 为x 方差的平方根S1 k5 = 0; s2total = 0 ;for y5 = xk5 = k5 + 1;if k5 > sizexelses2total = s2total + (err1(k5) - err1avg)^2;endends2suqare = s2total ./ sizex;%s2suqare 残差数列err1 的方差S2Cval = sqrt(s2suqare ./ s1suqare);Cval%nnn = 0.6745 * s1sqrt%Cval C 检验值k5 = 0;pnum = 0 ;for y5 = xk5 = k5 + 1;if abs( err1(k5) - err1avg ) < 0.6745 * s1sqrtpnum = pnum + 1;%ppp = abs( err1(k5) - err1avg )elseendendpval = pnum ./ sizex;pval%p检验值%arr1 = x41fcast(1:6)%预测结果为区间范围 预测步长和数据长度可调整程序参数进行改进x =运行结果x =ans =x1(t+1)=8908.4929exp(0.11871t)+(-7889.4929) ans = x1(t+1)=8945.2933exp(0.11871t)+(-7935.7685) x31fcast =Columns 1 through 3Columns 4 through 61429.691537401951609.90061644041 1812.824603777821019 1088 1324 1408 16011019 1088 13241408 160110191122.89347857097 1264.43142178303 Columns 4 through 61423.80987235488 1603.27758207442 1805.36675232556x41fcast =Columns 1 through 310191118.05685435129 1269.65470492098Cval =0.139501578334155 pval =1。
数学建模算法:灰色预测模型GM(1,1)及Python代码
数学建模算法:灰⾊预测模型GM(1,1)及Python代码灰⾊预测模型GM(1,1)灰⾊预测模型\(GM(1,1)\)是在数学建模⽐赛中常⽤的预测值⽅法,常⽤于中短期符合指数规律的预测。
其数学表达与原理分析参考⽂章尾部⽹页与⽂献资料。
经过整理,以下附上Python代码:灰⾊模型要求数据前后级⽐落⼊范围 \(\displaystyle \Theta\left(e^{-\frac{2}{n+1}},e^{\frac{2}{n+2}}\right)\) ,因此做线性平移预处理使得元数据满⾜要求。
线性平移:将数据平移⾄不⼩于1,检查级⽐,若不满⾜要求则将数据向上平移⼀个最⼩值直到满⾜要求。
可以推断出,级⽐的上下界在给定数据点数越多的情况下,越趋于1。
import numpy as npimport matplotlib.pyplot as plt# 线性平移预处理,确保数据级⽐在可容覆盖范围def greyModelPreprocess(dataVec):"Set linear-bias c for dataVec"import numpy as npfrom scipy import io, integrate, linalg, signalfrom scipy.sparse.linalg import eigsfrom scipy.integrate import odeintc = 0x0 = np.array(dataVec, float)n = x0.shape[0]L = np.exp(-2/(n+1))R = np.exp(2/(n+2))xmax = x0.max()xmin = x0.min()if (xmin < 1):x0 += (1-xmin)c += (1-xmin)xmax = x0.max()xmin = x0.min()lambda_ = x0[0:-1] / x0[1:] # 计算级⽐lambda_max = lambda_.max()lambda_min = lambda_.min()while (lambda_max > R or lambda_min < L):x0 += xminc += xminxmax = x0.max()xmin = x0.min()lambda_ = x0[0:-1] / x0[1:]lambda_max = lambda_.max()lambda_min = lambda_.min()return c# 灰⾊预测模型def greyModel(dataVec, predictLen):"Grey Model for exponential prediction"# dataVec = [1, 2, 3, 4, 5, 6]# predictLen = 5import numpy as npfrom scipy import io, integrate, linalg, signalfrom scipy.sparse.linalg import eigsfrom scipy.integrate import odeintx0 = np.array(dataVec, float)n = x0.shape[0]x1 = np.cumsum(x0)B = np.array([-0.5 * (x1[0:-1] + x1[1:]), np.ones(n-1)]).TY = x0[1:]u = linalg.lstsq(B, Y)[0]def diffEqu(y, t, a, b):return np.array(-a * y + b)t = np.arange(n + predictLen)sol = odeint(diffEqu, x0[0], t, args=(u[0], u[1]))sol = sol.squeeze()res = np.hstack((x0[0], np.diff(sol)))return res# 输⼊数据x = np.array([-18, 0.34, 4.68, 8.49, 29.84, 50.21, 77.65, 109.36])c = greyModelPreprocess(x)x_hat = greyModel(x+c, 5)-c# 画图t1 = range(x.size)t2 = range(x_hat.size)plt.plot(t1, x, color='r', linestyle="-", marker='*', label='True')plt.plot(t2, x_hat, color='b', linestyle="--", marker='.', label="Predict")plt.legend(loc='upper right')plt.xlabel('xlabel')plt.ylabel('ylabel')plt.title('Prediction by Grey Model (GM(1,1))')plt.show()误差分析部分:可就绝对误差、相对误差、级⽐、残差做数据分析,以下⽰例为最⼩⼆乘法线性回归分析。
使用Matlab技术进行灰色系统建模的基本方法
使用Matlab技术进行灰色系统建模的基本方法灰色系统理论是一种具有实用价值和应用广泛的预测和决策分析方法。
在实际应用中,利用Matlab技术来进行灰色系统建模更加高效和方便。
本文将介绍使用Matlab技术进行灰色系统建模的基本方法和步骤,帮助读者深入了解和掌握这一技术。
一、Matlab在灰色系统建模中的应用Matlab是一种功能强大的科学计算软件,具有数据处理、绘图和模拟仿真等丰富的功能,因此在灰色系统建模中得到了广泛应用。
Matlab提供了各种灰色系统建模工具和函数,可以快速、准确地进行系统建模和分析。
因此,掌握Matlab的使用,对于进行灰色系统建模具有重要意义。
二、数据预处理在进行灰色系统建模之前,需要对原始数据进行预处理,以提高后续建模的准确性和可靠性。
数据预处理包括数据清洗、数据平滑和数据归一化等步骤。
Matlab 提供了丰富的数据处理函数和工具,可以快速、灵活地完成这些操作。
1. 数据清洗数据清洗是指删除或修正含有噪声、异常值或缺失值的数据。
Matlab中可以使用滤波函数、插值函数和替换函数等方法对数据进行清洗。
例如,可以使用median函数对数据进行中值滤波,去除噪声干扰。
另外,使用interp1函数进行数据插值,可以填补缺失值,使数据更加完整。
2. 数据平滑数据平滑是指通过降低数据的波动性,使其更具有连续性和稳定性。
Matlab中常用的数据平滑方法包括移动平均法、指数平滑法和小波平滑法等。
移动平均法通过计算滑动窗口内数据的平均值,来平滑原始数据。
指数平滑法则采用指数加权平均的方式,对数据进行平滑处理。
小波平滑法则利用小波分析的方法,对数据进行平滑处理。
3. 数据归一化数据归一化是指将不同量纲或取值范围的数据,转换为统一的尺度。
常用的归一化方法包括最小-最大归一化和Z-score归一化等。
最小-最大归一化将数据线性映射到[0,1]的范围内,使数据具有统一的尺度和可比性。
Z-score归一化则通过计算数据与均值的偏差,除以标准差,将数据标准化为均值为0,标准差为1的分布。
灰色GM(1,N)预测模型编程实现及应用检验
实用第一f智慧密集■BBaSEIEieSI3l3BBI3SeSBI3BBEIISBBBI3BI9@SI3eSI3aiSieEISeBI3ei3iaEIBBeBI3BaEIEII3SS@ieEl®灰色GM(1,N)预测模型编程实现及应用检验王成(江苏省阜宁县东沟病虫测报站,江苏盐城224400)摘要:灰色GM(1,N)预测模型在社会、经济、农业、生态等诸多领域应用十分广泛。
为推广使用该预测模型,依据邓聚龙教授的灰色理论,使用VC++编程实现GM(1,N)预测模型,实现了多个预测因子和多个关联因子同时进行分析,提高了使用效率,择优选择算法提高了分析精度。
使用参考文献中的数据和模拟数据,对系统预测模型正确性和预测精度进行了检验。
关键词:灰色系统;GM(1,N)模型;VC编程;多关联因子1概述在对社会、经济、农业、工业控制等灰色数据领域进行研究的主要任务是分析、建模、预测、决策和控制。
根据邓聚龙教授在20世纪80年代提出的灰色理论,其典型的灰色预测模型(GREY MODEL)是GM (1,1)模型和GM(1,N)模型。
而在实际研究中,往往对一个因子(研究对象)的研究会要考虑其他多个关联因子。
女口:农业领域中病虫害发生会与病虫害基数、雨量、日照、气温、耕作制度等密切相关。
因此灰色GM (1,N)模型的应用显得更加广泛。
假设研究对象是在一定范围分布的灰色量,同时其数据序列或经累加(AGO)生成后的数据序列是呈线性 分布的,或者在线性范围内是收敛的,对于单个变量,用GM(1,1)模型构建一阶微分方程,多个变量时使用GM(1,N)模型构建多阶一次微分方程。
通过现有数据序列,经过矩阵构造、矩阵计算等方法,求解各变量因子的参数,并将数据序列和参数带回到微分方程,得出模型计算值后,再通过累减(IAGO)生成还原数值,经与原始数据进行比较,得出模型预测值的精度。
这就是GM(1,N)模型。
2GM(1,N)模型假设「一为系统预测的个数据序列(子因子),上标用(0)表示原始值,用(1)表示1次累加值。
灰色预测及MATLAB实现
3.1灰色预测基础知识
什么是灰色预测?
灰色预测是就灰色系统所做的预测。所谓灰色系统是介于白 色系统和黑箱系统之间的过渡系统,其具体的含义是:如果某一 系统的全部信息已知为白色系统,全部信息未知为黑箱系统,部 分信息已知,部分信息未知,那么这一系统就是灰色系统。一般 地说,社会系统、经济系统、生态系统都是灰色系统。例如物价 系统,导致物价上涨的因素很多,但已知的却不多,因此对物价 这一灰色系统的预测可以用灰色预测方法。 灰色系统理论认为对既含有已知信息又含有未知或非确定信 息的系统进行预测,就是对在一定方位内变化的、与时间有关的 灰色过程的预测。尽管过程中所显示的现象是随机的、杂乱无章 的,但毕竟是有序的、有界的,因此这一数据集合具备潜在的规 律,灰色预测就是利用这种规律建立灰色模型对灰色系统进行预 测。
ˆ (4)用最小二乘法求解灰参数 a ( a, ) ( B B )
T T
1
B Yn 。
T
ˆ (5)将灰参数 a 代入
ˆ x dy
(1)
dx
(1)
ax
(1)
,求解得
(1)
dt
(t 1) ( x
(0)
a
)e
at
a
dx ˆ ˆ (1) 由于 a 是通过最小二乘法求出的近似值,因此 x (t 1) 事近似表达
(1)
ˆ 序列,得到近似数据序列 x ˆ x
(0)
(0)
ˆ (t 1) x
(1)
ˆ (t 1) x
(t )
(7)建立灰色预测模型进行检验,步骤如下:
① 计算 x
(0)
与x
(0)
(t ) 之间的残差和相对误差 (t ) x
灰色预测
回归分析是应用最广泛的一种办法。
但回归分析要求大样本,只有通过大量的数据才能得到量化的规律,这对很多无法得到或一时缺乏数据的实际问题的解决带来困难。
回归分析还要求样本有较好的分布规律,而很多实际情形并非如此。
例如,我国建国以来经济方面有几次大起大落,难以满足样本有较规律的分布要求。
因此,有了大量的数据也不一定能得到统计规律,甚至即使得到了统计规律,也并非任何情况都可以分析。
另外,回归分析不能分析因素间动态的关联程度,即使是静态,其精度也不高,且常常出现反常现象灰色系统理论提出了一种新的分析方法—关联度分析方法,即根据因素之间发展态势的相似或相异程度来衡量因素间关联的程度,它揭示了事物动态关联的特征与程度。
由于以发展态势为立足点,因此对样本量的多少没有过分的要求,也不需要典型的分布规律,计算量少到甚至可用手算,且不致出现关联度的量化结果与定性分析不一致的情况。
这种方法已应用到农业经济、水利、宏观经济等各方面,都取得了较好的效果。
灰色系统理论建模的主要任务是根据具体灰色系统的行为特征数据,充分开发并利用不多的数据中的显信息和隐信息,寻找因素间或因素本身的数学关系。
通常的办法是采用离散模型,建立一个按时间作逐段分析的模型。
但是,离散模型只能对客观系统的发展做短期分析,适应不了从现在起做较长远的分析、规划、决策的要求。
尽管连续系统的离散近似模型对许多工程应用来讲是有用的,但在某些研究领域中,人们却常常希望使用微分方程模型。
事实上,微分方程的系统描述了我们所希望辨识的系统内部的物理或化学过程的本质。
灰色系统理论首先基于对客观系统的新的认识。
尽管某些系统的信息不够充分,但作为系统必然是有特定功能和有序的,只是其内在规律并未充分外露。
有些随机量、无规则的干扰成分以及杂乱无章的数据列,从灰色系统的观点看,并不认为是不可捉摸的。
相反地,灰色系统理论将随机量看作是在一定范围内变化的灰色量,按适当的办法将原始数据进行处理,将灰色数变换为生成数,从生成数进而得到规律性较强的生成函数。
灰色预测matlab代码
%灰色预测function gm(x0,m) %定义函数gm(x0,m) ,x0为原始数据,m为预测个数n=length(x0);x1=zeros(1,n);x1(1)=x0(1);for i=2:n %计算累加序列x1x1(i)=x1(i-1)+x0(i);endi=2:n; %对原始数列平行移位并赋给yy(i-1)=x0(i);y=y'; %将y变成列向量for i=1:n-1; %计算数据矩阵B 的第一列数据c(i)=-0.5*(x1(i)+x1(i+1));endB=[c' ones(n-1,1)];%构造矩阵Bau=inv(B'*B)*B'*y;%计算参数a,u 矩阵for i=1:n+1+m; %计算预测累加数列的值ago(i)=(x0(1)-au(2)/au(1))*exp(-au(1)*(i-1))+au(2)/au(1);endyc(1)=ago(1);for i=1:n-1; %还原数列的值yc(i+1)=ago(i+1)-ago(i);endfor i=2:n;error(i)=yc(i)-x0(i); %计算残差值endyc(1)=ago(1);for i=1:n-1+m; %修正的还原数列的值yc(i+1)=ago(i+1)-ago(i);endc=std(error)/std(x0); %计算后验差比p=0;for i=2:nif(abs(error(i)-mean(error))<0.6745*std(x0))p=p+1;endendp=p/(n-1);w1=min(abs(error));w2=max(abs(error));for i=1:n; %计算关联度w(i)=(w1+0.5*w2)./(abs(error(i))+0.5*w2);endw=sum(w)/(n-1);%axis([1979+m,1988+m,30,160]); %x,y,(z)坐标范围plot([1979:n+1978],x0,'+',[1979:n+1978+m],yc,'*'); %grid on;xlabel('时序');ylabel('沉降量(mm)');title('地面沉降灰色模型预测拟和曲线');legend('实测值','预测值',4);fprintf('a,u值:')fprintf('%g ',au) %输出参数a,u 的值fprintf('\n累加数列:\n')fprintf('%g ',ago) %输出累加数列ago 的值fprintf('\n原始序列:\n')fprintf('%g ',x0) %输出原始序列值fprintf('\n预测:\n')fprintf('%g ',yc) %输出预测的值fprintf('\n残差:\n')fprintf('%g ',error) %输出残差的值fprintf('\n后验差比:\n')fprintf('%g',c) %输出后验差比的值fprintf('\n小误差概率:\n')fprintf('%g',p) %输出小误差概率的值fprintf('\n关联度:\n')fprintf('%g\n',w) %输出关联度w。
分数灰色预测matlab代码详解
分数灰色预测matlab代码详解分数灰色预测(Fractional Grey Model,FGM)是以函数的非线性分数阶微分方程为基础的一种新型时间序列预测方法。
在FGM中,将已知的数值序列$X(k),k=1,2,\cdots,n$ 作为被预测序列,通过构造二阶单位根非线性微分方程,建立起包含一阶导数、二阶导数、初值以及终值的模型,进而计算模型参数并根据模型实现对未来数值的预测。
该方法对中小样本序列具有良好的预测效果,且其原理简单、易于理解,因此在实际预测中得到了广泛应用。
以下是FGM的matlab代码和具体解释。
首先,导入数据,例如一组销售数据:```matlabY = [42 59 72 88 114 138 157 186 212];```接下来,可以通过以下函数将数据转换为一阶、二阶累加数据:```matlabX = cumsum(Y); % 一阶累加n = length(X);for i = 1:n-1DX(i) = X(i+1)-X(i); % 二阶累加end```然后,可以定义分数阶微分方程。
FGM的分数阶微分方程为:$$_{0}D_{t}^{\alpha}X(t)=a_{1}\cdot X(t)+a_{2}$$其中 $a_{1}$、$a_{2}$ 为待求参数,$\alpha$ 为分数阶微分阶次。
根据变换公式,$a_{1}$ 和 $a_{2}$ 可以通过以下函数求得:```matlabsyms a1 a2eq1 = DX(1) - a1*X(1) - a2;eq2 = DX(2) - a1*X(2) - a2;eq3 = DX(3) - a1*X(3) - a2;eq4 = DX(4) - a1*X(4) - a2;eq5 = DX(5) - a1*X(5) - a2;eq6 = DX(6) - a1*X(6) - a2;eq7 = DX(7) - a1*X(7) - a2;eq8 = DX(8) - a1*X(8) - a2;eqn = DX(n-1) - a1*X(n-1) - a2;[eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eqn][A,B] = equationsToMatrix([eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eqn],[a1,a2]); X = linsolve(A,B);a1 = X(1)a2 = X(2)```这里使用了符号计算工具箱,利用上述方程组解出 $a_{1}$ 和 $a_{2}$。
灰色预测matlab代码
%灰色预测function gm(x0,m) %定义函数gm(x0,m) ,x0为原始数据,m为预测个数n=length(x0);x1=zeros(1,n);x1(1)=x0(1);for i=2:n %计算累加序列x1x1(i)=x1(i-1)+x0(i);endi=2:n; %对原始数列平行移位并赋给yy(i-1)=x0(i);y=y'; %将y变成列向量for i=1:n-1; %计算数据矩阵B 的第一列数据c(i)=-0.5*(x1(i)+x1(i+1));endB=[c' ones(n-1,1)];%构造矩阵Bau=inv(B'*B)*B'*y;%计算参数a,u 矩阵for i=1:n+1+m; %计算预测累加数列的值ago(i)=(x0(1)-au(2)/au(1))*exp(-au(1)*(i-1))+au(2)/au(1);endyc(1)=ago(1);for i=1:n-1; %还原数列的值yc(i+1)=ago(i+1)-ago(i);endfor i=2:n;error(i)=yc(i)-x0(i); %计算残差值endyc(1)=ago(1);for i=1:n-1+m; %修正的还原数列的值yc(i+1)=ago(i+1)-ago(i);endc=std(error)/std(x0); %计算后验差比p=0;for i=2:nif(abs(error(i)-mean(error))<0.6745*std(x0))p=p+1;endendp=p/(n-1);w1=min(abs(error));w2=max(abs(error));for i=1:n; %计算关联度w(i)=(w1+0.5*w2)./(abs(error(i))+0.5*w2);endw=sum(w)/(n-1);%axis([1979+m,1988+m,30,160]); %x,y,(z)坐标范围plot([1979:n+1978],x0,'+',[1979:n+1978+m],yc,'*'); %grid on;xlabel('时序');ylabel('沉降量(mm)');title('地面沉降灰色模型预测拟和曲线');legend('实测值','预测值',4);fprintf('a,u值:')fprintf('%g ',au) %输出参数a,u 的值fprintf('\n累加数列:\n')fprintf('%g ',ago) %输出累加数列ago 的值fprintf('\n原始序列:\n')fprintf('%g ',x0) %输出原始序列值fprintf('\n预测:\n')fprintf('%g ',yc) %输出预测的值fprintf('\n残差:\n')fprintf('%g ',error) %输出残差的值fprintf('\n后验差比:\n')fprintf('%g',c) %输出后验差比的值fprintf('\n小误差概率:\n')fprintf('%g',p) %输出小误差概率的值fprintf('\n关联度:\n')fprintf('%g\n',w) %输出关联度w。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
灰色预测MATLAB程序
————————————————————————————————作者: ————————————————————————————————日期:
ﻩ
灰色预测
作用:求累加数列、求a b的值、求预测方程、求残差
clc%清屏,以使结果独立显示
x=[71.1 72.4 72.472.171.4 72.0 71.6];
format long; %设置计算精度
if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x';
end
n=length(x); %取输入数据的样本量
z=0;
fori=1:n%计算累加值,并将值赋予矩阵be
z=z+x(i,:);
be(i,:)=z;
end
for i=2:n%对原始数列平行移位
y(i-1,:)=x(i,:);
end
for i=1:n-1%计算数据矩阵B的第一列数据
c(i,:)=-0.5*(be(i,:)+be(i+1,:));
end
for j=1:n-1%计算数据矩阵B的第二列数据
e(j,:)=1;
end
for i=1:n-1%构造数据矩阵B
B(i,1)=c(i,:);
B(i,2)=e(i,:);
end
alpha=inv(B'*B)*B'*y;%计算参数矩阵即a b的值
fori=1:n+1%计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值
ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alpha(1,:);%显示输出预测值的累加数列
end
var(1,:)=ago(1,:)%显示输出预测值
for i=1:n %如改n为n+m-1,可预测后m-1个值 var(i+1,:)=ago(i+1,:)-ago(i,:);%估计值的累加数列的还原,并计算出下一预测值
end
for i=1:n
error(i,:)=x(i,:)-var(i,:); %计算残差
end
c=std(error)/std(x);%调用统计工具箱的标准差函数计算后验差的比值c
ago%显示输出预测值的累加数列
alpha%显示输出参数数列
var %显示输出预测值
error %显示输出误差
c%显示后验差的比值
作用:数据处理判断是否可以用灰色预测、求级比、求累加数列、求a b的值、求预测方程
clc,clear
x0=[71.172.4 72.4 72.171.4 72.071.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=B\Y %拟合参数u(1)=a,u(2)=b
x=dsolve('Dx+a*x=b','x(0)=x0');%求微分方程的符号解
x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)}) %代入估计参数值和初始值yuce1=subs(x,'t',[0:n-1]); %求已知数据的预测值
y=vpa(x,6) %其中的6表示显示6位数字
yuce=[x0(1),diff(yuce1)]%差分运算,还原数据。