灰色预测程序代码
灰色系统G(1,1)预测步骤【模板带代码】

=3499.075e -0.1062t
3641.075
编写程序
u=alpha(2)/alpha(1) v=X0(1)-u v=3499.075 u=—3641.075
(5)进行参差检验
1)根据预测公式,计算
v=3499.075 u=—3641.075
Xˆ
1
k
1
X
0
1
for n=0:10
X2(n+1)=v*exp(-alpha(1)*n)+u
end
X2
2.0690
2)累减生成序列
Xˆ X3 =1.0e+003 * (0) 0.1420 0.4079 0.4536
0.5044
0.7713 0.8577 0.9537 1.0605
源程序:X3(1)=X2(1)
for m=1:10
kesi =
4.4388 339.0664 176.2445 203.6132
0 0.1998 1.2682 0.2130 0.8524 0.1330
0.0089
0.3767
0.2203
0.4155
{0%,19.98%,126.82%,0.89%,37.67% ,22.03% ,41.55% ,21.30%,85.24%,13.30%}
e=
179.4592 111.5134 74.1747 175.0204 159.6072 29.2461 215.2168 33.1910
3.2147 24.1540
源程序:S0=0.6745*X0std e=abs(daita0-daita0mean) 对所有的 e 都小于 S0 ,故小参差概率 P(k S0) 1 0.95
灰色预测(由过去预测未来)

a
fprintf('参数a=');alpha(1)
fprintf('参数u=');alpha(2)
fprintf('预测未来十年干流6类为');
for i=11:20
a(i-10,:)= var(:,i);
end
lamda=x(1:n-1)./x(2:n);%计算级比
range=minmax(lamda');%级比范围
rho=1-(1-0.5*alpha(1))/(1+0.5*alpha(1))*lamda;%计算级比偏差值,alpha(1)=a
c=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值c
format long; %设置计算精度
if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换 源自 x=x'; end
n=length(x); %取输入数据的样本量
x1=cumsum(x);%累加
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
y=x(2:n);
alpha=B\y;
%预测数据的累加,共n+1个
for i=1:n+10
ago(i)=(x(1)-alpha(2)/alpha(1))*exp(-alpha(1)*(i-1))+alpha(2)/alpha(1);
end
%此处共预测n+1个值
%估计值第一个与实际值相同
var(1,:)=ago(1,:);
%开始第二个估计值
灰色预测GM(1,1)

南昌市民用汽车保有量灰色GM(1,1)模型预测灰色预测是一种对含有不确定因素的系统进行预测的方法。
灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
其用等时距观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间。
灰色模型适合于小样本情况的预测,当然对于大样本数据,灰色模型也可以做,并且数据个数的选择有很大的灵活性。
原始序列X (0):表1 南昌市民用汽车保有量年份 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 南昌市民用汽车保有量(万辆)24.410926.730730.387836.380741.016143.7348.41615763.1第一步:构造累加生成序列X (1); 第二步:计算系数值;通过灰色关联分析软件GM 进行灰色模型拟合求解,得到:α= -0.101624 , μ=25.290111 , 平均相对误差为4.685749%第三步:得出时间响应预测函数模型为:()()858996.248269896.2731101624.01-=+⋅k e k X第四步:进行灰色关联度检验。
真实值:{24.4109,26.7307,30.3878,36.3807,41.0161,43.7300,48.4100,61.0000,57.0000,63.1000} 预测值:{24.4109,29.2310,32.3578,35.8190,39.6504,43.8917,48.5867,53.7839,59.5371,65.9056}计算得到关联系数为: {1,0.906683,0.444273,0.416579,0.82377,0.357133,0.715694,0.843178,0.333333,0.770986} 于是灰色关联度:r=0.661163关联度r=0.661163满足分辨率ρ=0.5时的检验准则r>0.60,关联性检验通过。
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
灰色理论预测模型及GM(1,1)matlab程序

灰色理论预测模型及GM(1,1)matlab程序灰色预测方法简介灰色预测是一种对含有不确定因素的系统进行预测的方法。
灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
其用等时距观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间。
通过对原始数据的整理寻找数的规律,分为三类:a、累加生成:通过数列间各时刻数据的依个累加得到新的数据与数列。
累加前数列为原始数列,累加后为生成数列。
b、累减生成:前后两个数据之差,累加生成的逆运算。
累减生成可将累加生成还原成非生成数列。
c、映射生成:累加、累减以外的生成方式。
建模步骤a、建模机理b、把原始数据加工成生成数;c、对残差(模型计算值与实际值之差)修订后,建立差分微分方程模型;d、基于关联度收敛的分析;e、gm模型所得数据须经过逆生成还原后才能用。
f、采用“五步建模(系统定性分析、因素分析、初步量化、动态量化、优化)”法,建立一种差分微分方程模型gm(1,1)预测模型。
GM(1,1)程序:% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是GM(1,1)。
% 原始数据的处理方法是一次累加法。
clear;clc;% load ('data.txt');% y=data';y=[3 4 5 4 7 7];n=length(y);yy=ones(n,1);yy(1)=y(1);for i=2:nyy(i)=yy(i-1)+y(i);endB=ones(n-1,2);for i=1:(n-1)B(i,1)=-(yy(i)+yy(i+1))/2;B(i,2)=1;endBT=B';for j=1:n-1YN(j)=y(j+1);endYN=YN';A=inv(BT*B)*BT*YN;a=A(1);u=A(2);t=u/a;t_test=input('请输入需要预测个数:');i=1:t_test+n;yys(i+1)=(y(1)-t).*exp(-a.*i)+t;yys(1)=y(1);for j=n+t_test:-1:2ys(j)=yys(j)-yys(j-1);endx=1:n;xs=2:n+t_test;yn=ys(2:n+t_test);plot(x,y,'^r',xs,yn,'*-b');det=0;for i=2:ndet=det+abs(yn(i)-y(i));enddet=det/(n-1);disp(['百分绝对误差为:',num2str(det),'%']); disp(['预测值为:',num2str(ys(n+1:n+t_test))]);。
【2019年整理】基于VB的灰色模型预测和线性回归预测

灰色模型预测GM(1,1)与线性回归预测(一元、多元)新建一个工程,添加一个模块(.ba⑨,两个命令按钮:窗体代码:Option ExplicitPrivate Sub Command1_Click()灰色模型预测Dim Data As StringData = "2.67,3.13,3.25,3.36,3.56,3.72"GM1_1_Predict DataEnd SubPrivate Sub Command2_Click()线性回归预测Dim X1 As String, X2 As String, X3 As String, X4 As String, Y As StringX1 = "100.38,99.7,92.3,87.6,87.17,88.3,92.75,100.6,90.05;'最后要力口上分号;X2 = "53.24,51.5,50.5,52.4,59.6,59.7,65.2,62.4,53.68;"最后要力口上分号;X3 = "226,250,281,272,194,180,105,115,250;"最后要加上分号;Y = "644,640,517,425,385,401,448,599,462"最后不要加上分号;请注意!!!Linear_Regression_Predict X1 & X2 & X3 & YEnd Sub模块代码:Option ExplicitPrivate Sub Calculate_1_AGO(X_0() As Double, X_1() As Double),做一次累加生成1-AGODim i As Long, TempX As Double, K As LongK = UBound(X_0)ReDim X_1(K)Fori = 0 To KTempX = TempX + X_0(i)X_1(i) = TempXNext iEnd SubPrivate Sub Calculate_Matrix_B(X_1() As Double, B() As Double),计算数据矩阵B Dim i As Long, K As LongK = UBound(X_1) - 1ReDim B(K, 1)Fori = 0 To KB(i, 0) = -0.5 * (X_1(i) + X_1(i + 1))B(i, 1) = 1Next iEnd SubPrivate Sub Calculate_Matrix_YN(X_0() As Double, YN() As Double)'计算数据矩阵YNDim i As Long, K As LongK = UBound(X_0) - 1ReDim YN(K, 0)Fori = 0 To KYN(i, 0) = X_0(i + 1)Next iEnd Sub................................................................................................................................. .............................................'函数名:Matrix_Transpotation'功能:计算矩阵的转置transpotation'参数:m - Integer型变量,矩阵的行数' n - Integer型变量,矩阵的歹U数' mtxA - Double型m x n二维数组,存放原矩阵' mtxAT - Double型n x m二维数组,返回转置矩阵 ................................................................................................................................. .............................................Private Sub Matrix_Transpotation(mtxA() As Double, mtxAT() As Double) Dim i As Integer, j As IntegerDim M As Integer, N As IntegerM = UBound(mtxA, 2)N = UBound(mtxA, 1)ReDim mtxAT(M, N)Fori = 0 To MForj = 0 To NmtxAT(i, j) = mtxA(j, i)Next jNext iEnd Sub................................................................................................................................. .............................................'函数名:Matrix_Multiplication'功能:计算矩阵的乘法multiplication'参数:m - Integer型变量,相乘的左边矩阵的行数' n - Integer型变量,相乘的左边矩阵的列数和右边矩阵的行数' l - Integer型变量,相乘的右边矩阵的歹U数' mtxA - Double型m x n二维数组,存放相乘的左边矩阵' mtxB - Double型n x l二维数组,存放相乘的右边矩阵' mtxC - Double型m x l二维数组,返回矩阵乘积矩阵 ..............................................................................................................................................................................Private Sub Matrix_Multiplication(mtxA() As Double, mtxB() As Double, mtxC() As Double)Dim i As Integer, j As Integer, K As IntegerDim M As Integer, N As Integer, L As IntegerM = UBound(mtxA, 1): N = UBound(mtxB, 1): L = UBound(mtxB, 2)ReDim mtxC(M, L)Fori = 0 To MForj = 0 To LmtxC(i, j) = 0#For K = 0 To NmtxC(i, j) = mtxC(i, j) + mtxA(i, K) * mtxB(K, j)Next KNext jNext iEnd Sub ................................................................................................................................. .............................................'函数名:Matrix_Inversion'功能:矩阵求办'参数:n - Integer型变量,矩阵的阶数' mtxA - Double型二维数组,体积为n x n。
用Excel实现灰色预测法

用Excel实现灰色预测法用Excel进行灰色预测法i生成数灰理论中常用的生成方程有:累加生成,记为AGO(Accumulated Gen erati ng Operatio n);累减生成或逆累加生成,记为IAGO (In verseAccumulated Gen erat ing Operati on) 。
若记兀⑴为貝始数列…占为作丁次累加生成后(记沟/-AGO)的生成数列, HIJ:少⑴+帥⑵.心⑴(町}*匚{丿刃⑴#戸⑵…*"(吋}则有AGO算式:〃⑷⑴衣T〕a)+…七尹一“⑷= 伽)凰=1=(尹l)(l)-kr(/ l)(2)+***+?r l>(k-l))+x Xr n(k)对于+叭耳屮IAGO算朮为:讯冷"(切=戶的/卷叫切=少(』询)-/衣叫1")於屮⑹二/ “屮(切一卅珂护(―1))C2上述关系述叫转化为:/〉(』气叨之叫〃(勿一你阿(声(亦一1))/ ° (桁—v 円(#—1)ffl!-l JW-1=£* "(湖+#八心)- £屮“脚)宀(砂/”(*"(檢)=&山(詁。
(杓)—/ '(占‘(~ 1)),—^r_"(們_占_珂1)工严(呵一£严(耐fflr=l m=l=£#2伽)十#7(曲- £#7(闵H-l W-1/(护的戶f⑷戶严询上述关系农明:対”严作r次AGO得・将W作r次JAGO得?° •叫记为(J)AGO M凡rV ----------------- *严IAGO Jr)例了-「冇原殆数列为-{3.278, 3337i 339. 3.6^9. 3用5},试作一次累加生成“解:円心f严仙)ffl-1b=i,丿"(1)= £.严(切)(1) = 3.278F心…严(2)二£严(耐= ?0)(l)-Hv q\2>3J7S+3.337-6.615,3后3, ‘陀尸丫严帥)叶1=x fl)(2)+r(D\3J=6.fil5+335 =10.005,AI, 严(4尸y刀伽)衍1=A'(l?(3)-h.?a)(4)=L0.005+3.679-13.684.心+』冷)=工严(旳)#1-1=i n)(4) I /0:(5)=13 684+3.K5=17.534,1-AGO生成数列0、为叫占){1“ 扌(2)t ?n(3)i ?]>(5)}= {3.Z7H,6 615J0 005J.Vfi34J7.534)找们也口」在Excel中实现匕述计算。
灰色预测的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
数学建模算法:灰色预测模型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()误差分析部分:可就绝对误差、相对误差、级⽐、残差做数据分析,以下⽰例为最⼩⼆乘法线性回归分析。
灰色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次累加值。
高级计算器灰色预测GM(1.1)模型的计算程序

・
方法评介 ・
高 级计算器灰色预测 GM(. 模 型的计算程序 1 1)
毕 永
( 西省子 长 县疾病 预 防控制 中心 陕 子 长 7 70 ) 130
di1 . 9 9 ji n 0 44 3 . 0 1 0 . 0 o:0 3 6 / .s .10 —3 7 2 1 .5 0 7 s
矗/占
^
0 O 6 9 8 2 . O 3 1O 6 358912 5 17 . 5
n
D
K u HI T M一 (显 示 一O 3 3 3 3 3 ot S F 2 .3333)
2 2 使用 Ⅱ区程序求 出 ()值 .
Ⅱ
一
( 入程序 Ⅱ区) 进
1: × K u o t3一 + / S Fre × MR + Ko t 一 HI u 2
令 :0 . 6 1 8 4 15 8 2.7
14 0 4.8
Ki 3 n I
I
S F n HI Mi T
1 2
K寄存器清零 输 入 变 量
:
:
HL (显示 3 , T )MR Ki一 3Ko t HI T X一一 K n n u S F 3 2 Ki X
2 S I —- K n× 4 S I H Fr X — 4 Ki H Fr X+一 , K n× 1 — 1 Ki SHI 一 K n 5 Ki Fr X- — 5 Ki × n× 3 Y Ki 4 Ko t 5 Ki n一 u n一 2
表 1 17  ̄1 8 9 3 90年启 东县 人口恶性肿瘤 死亡率 (1 / 0万 ) ] [
I区程序输入 ()生成 五值 和 值 , Ⅱ区程序输 入 t即可 £ 在 得 () 。现介绍操作方法如下 :限于篇 幅公式从 略) £值 (
预测方法——灰色预测模型

预测⽅法——灰⾊预测模型灰⾊预测模型主要特点是模型使⽤的不是原始数据序列,⽽是⽣成的数据序列,核⼼体系为灰⾊模型(GM),即对原始数据作做累加⽣成(累减⽣成,加权邻值⽣成)得到近似指数规律再进⾏建模。
优点:不需要很多数据;将⽆规律原始数据进⾏⽣成得到规律性较强的⽣成序列。
缺点:只适⽤于中短期预测,只适合指数增长的预测。
GM(1,1)预测模型GM(1,1)模型是⼀阶微分⽅程,且只含⼀个变量。
1. 模型预测⽅法2. 模型预测步骤1. 数据检验与处理为保证建模⽅法可⾏,需要对已知数据做必要的检验处理。
设原始数据列为x(0)=(x0(1),x0(2),….x0(n)),计算数列的级⽐λ(k)=x(0)(k−1)x(0)(k),k=2,3,...,n如果所有的级⽐都落在可容覆盖区间X=(e−2n+1,e2n+1)内,则数列可以建⽴GM(1,1)模型且可以进⾏灰⾊预测。
否则,对数据做适当的变换处理,如平移变换:y(0)(k)=x(0)(k)+c,k=1,2,...,n取c使得数据列的级⽐都落在可容覆盖内。
2. 建⽴模型根据1中⽅程的解,进⼀步推断出预测值ˆx(1)(k+1)=(x(0)(1)−ba)e−ak+ba,k=1,2,...,n−13. 检验预测值1. 残差检验ε(k)=x(0)(k)−ˆx(0)(k)x(0)(k),k=1,2,...,n如果对所有的|ε(k)|<0.1|ε(k)|<0.1,则认为到达较⾼的要求;否则,若对所有的|ε(k)|<0.2|ε(k)|<0.2,则认为达到⼀般要求。
2. 级⽐偏差值检验ρ(k)=1−1−0.5a1+0.5aλ(k)如果对所有的|ρ(k)|<0.1,则认为达到较⾼的要求;否则,若对于所有的|ρ(k)|<0.2,则认为达到⼀般要求。
4. 预测预报根据问题需要给出预测预报。
3. py实现import numpy as npimport pandas as pddata=[71.1,72.4,72.4,72.1,71.4,72.0,71.6] # 数据来源len=len(data) # 数据量# 数据检验lambdas=[]for i in range(1,len):lambdas.append(data[i-1]/data[i])X_Min=np.e**(-2/(len+1))X_Max=np.e**(2/(len+1))l_min,l_max=min(lambdas),max(lambdas)if l_min<X_Min or l_max> X_Max:print("该组数据为通过数据检验,不能建⽴GM模型!")else:print("改组数据通过检验")# 建⽴GM(1,1)模型data_1=[] # 累加数列z_1=[]data_1.append(data[0])for i in range(1,len):data_1.append(data[i]+data_1[i-1])z_1.append(-0.5*(data_1[i]+data_1[i-1]))B=np.array(z_1).reshape(len-1,1)one=np.ones(len-1)B=np.c_[B,one]Y=np.array(data[1:]).reshape(len-1,1)a,b=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y)print('a='+str(a))print('b='+str(b))## 数据预测data_1_prd=[]data_1_prd.append(data[0])data_prd=[] # 预测datadata_prd.append(data[0])for i in range(1,len):data_1_prd.append((data[0]-b/a)*np.e**(-a*i)+b/a)data_prd.append(data_1_prd[i]-data_1_prd[i-1])# 模型检验## 残差检验e=[]for i in range(len):e.append((data[i]-data_prd[i])/data[i])e_max=max(e)if e_max<0.1:print("数据预测达到较⾼要求!")elif e_max<0.2:print("数据预测达到⼀般要求!")# 输出预测数据for i in range(len):print(data_prd[i])灰⾊Verhulst预测模型主要⽤于描述具有饱和状体的过程,即S型过程,常⽤于⼈⼝预测,⽣物⽣长,繁殖预测及产品经济寿命预测等。
灰色预测实例

第一题kN m k b pk N m L g f mgp S )()(1∑--=--+--=当m<=N 时f mgp S -=当m>N 时kN m k b pk N m L g f mgp S )()(1∑--=--+--=现在设旅客达到机场概率为p=90%,N=300,f=0.6Ng ,g L b 5.0= 现在km k pk m gg mg S )300(*5.1180*9.0301∑-=----=取m=301 经过计算得到 S=(90.9-2.53*10^(-14))*g 取m=302经过计算得到 S=(91.8-8.095*10^(-13))*g取m=307经过计算得到S=(96.3-4.065*10^(-8))*g取m=311经过计算得到S=(99.9-9.865*10^(-6))*g取m=318经过计算得到S=(106.2-5.68*10^(-3))*g取m=325经过计算得到S=(112.5-2.59*10^(-1))*g取m=332经过计算得到S=(118.8-2.42)*g=116.38*g取m=336经过计算得到S=(122.4-5.42)*g=116.98g取m=337经过计算得到S=(123.3-6.38)*g=116.92g所以航空公司在出售336张票的时候收益最大值为116.98g,由于这只是单方面考虑到肮空公司的利润,在实际中,国内超售可以达到5%,国外一般是2%。
对于拒载的赔偿问题,早已有法律规定是按照里程数进行赔偿,程序 m=337; x=0.9*m-180 y=0;for k=0:1:(m-301)y=y+(m-300-k)*nchoosek(m,k)*0.1^(k)*0.9^(m-k); end 1.5*y第二题 首先假设购买打折票的旅客与全票的旅客不到概率是一样的都为pa 为购买打折票未到的人数,b 为购买全票未到的人数,k 为未到达的人数,k=a+b 。
灰色预测及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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
灰色模型
灰色模型(Grey Model ),记为 GM 。
灰色建模是用原始数据列作生成后建立微分方程,如果有N 个变量,则记为GM (1,N )。
特殊地,只有一个变量的数列,则为)1,1(GM ,用)1,1(GM 为例说明建模步骤:
6.1登录原始数列)
0(x ,并用)
0(x 累加生成数列)
1(x :∑==
k
i i x
k x 1
)
0()
1()()(
6.2用累加生成数列构成矩阵B ,用原始数列构成数据列矩阵n y 。
⎪⎪⎪⎪⎪⎭⎫
⎝⎛+--+-+-=1))()1((5.01))3()2((5.01))2()1((5.0)1()1()
1()1()1()1(n x n x x x x x B ⎪⎪⎪⎪
⎪⎭
⎫ ⎝⎛=)()3()2()0()0()0(n x x x y n
6.3求微分方程参数u a ,。
生成数列模型的解为:
a
u e
a u x k x k
a +⋅-=+-))1(()1()0()1( 按最小二乘法,参数u a ,为:
n T
T y B B B u a ⋅⋅⋅=⎪⎪⎭
⎫
⎝⎛=-1)(ˆ 6.4建模。
将u a ,之值代入下式。
u ax dt
dx =+)1()
1(, a u e a u x k x k a +⋅-=+-))1(()1(ˆ)0()1( 为生成模型计算值。
6.5数据还原。
按下述公式还原:
)1(ˆ)(ˆ)(ˆ)1()1()
0(--=k x k x
k x
, )(ˆ)0(k x 为模型计算值。
6.6检验。
将模型计算值与实际值比较,求出残差:)(ˆ)()()0()
0(k x
k x
k q -= 根据前面的数据得出后一个数据,依次递推检验,每一个检验值对模型来说都是后验值,称为后验差检验。
记k 时刻实际值)()
0(k x
与计算值(预测值))(ˆ)0(k x
之差为)(k q : )(ˆ)()()0()0(k x
k x k q -= )(k q 即称为k 时刻残差。
记实际数据)()
0(k x ,1=k ,2,…,n 的平均值为x : ∑==n k k x n x 1
)
0()(1
记残差)(k q ,1=k ,2,…,n 的平均值q : ∑'
==n k k q n q 1
)(1,n n <'
记原始数据方差为21
S :∑=-=n k x k x n S 1
2)0(21
))((1;记残差方差为2
2S :
∑'
=-=n k q k q n S 1
22
2
))((1;12S S C =,称为后验差比值。
指标 C 越小越好。
C 越小,表示1
S 越大而2S 越小。
1S 大表明原始数据方差大,离散程度大。
2S 小表明残差方差小,离散程度小。
C 小表明尽管原始数据很离散,但模型所得计算值与实际值之差并不太离散。
}6745.0|)({|1S q k q P P <-=称为小频率误差。
P 越大越好,P 越大表明残差与残差
平均值之差小于给定值16745.0S 的点较多(以百分比记之)。
按C 与P 两个指标。
可综合评定预测模型的精度。
具体指标如表7一6所示:
例:
han1.txt :
9.4 11.3 16.8 19.8 20.3 18.8 20.9 24.9 24.7 24.3 19.4 18.6 9.6 11.7 15.8 19.9 19.5 17.8 17.8 23.3 21.4 24.5 20.1 15.9 10.1 12.9 17.7 21.0 21.0 20.4 21.9 25.8 29.3 29.8 23.6 16.5 11.4 26.0 19.6 25.9 27.6 24.3 23.0 27.8 27.3 28.5 32.8 18.5 11.5 26.4 20.4 26.1 28.9 28.0 25.2 30.8 28.7 28.1 22.2 20.7 13.7 29.7 23.1 28.9 29.0 27.4 26.0 32.2 31.4 32.6 29.2 22.9 15.4 17.1 23.5 11.6 1.78 2.61 8.8 16.2 20.1 24.9 26.5 21.8
load han1.txt %把原始数据保存在纯文本文件han1.txt 中 han1(end,:)=[];m=size(han1,2); x0=mean(han1,2); x1=cumsum(x0)
alpha=0.4;n=length(x0);
z1=alpha*x1(2:n)+(1-alpha)*x1(1:n-1) Y=x0(2:n);B=[-z1,ones(n-1,1)]; ab=B\Y
k=6;
x7hat=(x0(1)-ab(2)/ab(1))*(exp(-ab(1)*k)-exp(-ab(1)*(k-1)))
z=m*x7hat
u=sum(han1)/sum(sum(han1))
v=z*u
例:(此题预测结果不理想)
X=[9.4 11.3 16.8 19.8 20.3 18.8 20.9 24.9 24.7 24.3 19.4 18.6;9.6 11.7 15.8 19.9 19.5 17.8 17.8 23.3 21.4 24.5 20.1 15.9;10.1 12.9 17.7 21.0 21.0 20.4 21.9 25.8 29.3 29.8 23.6 16.5;11.4 26.0 19.6 25.9 27.6 24.3 23.0 27.8 27.3 28.5 32.8 18.5;11.5 26.4 20.4 26.1 28.9 28.0 25.2 30.8 28.7 28.1 22.2 20.7;13.7 29.7 23.1 28.9 29.0 27.4 26.0 32.2 31.4 32.6 29.2 22.9;15.4 17.1 23.5 11.6 1.78 2.61 8.8 16.2 20.1 24.9 26.5 21.8];
%预测后三个数据
X=X';N=size(X);n1=N(1);n=N(2);
for i=1:n1
I=i
X0=X(i,:)
E=triu(ones(n)); X1=X0*E;
b1=X1; b1(1)=[]; b2=X1; b2(n)=[]; b=-0.5*(b1+b2);
B=[b;ones(1,n-1)]; B=B';
y=X0; y(1)=[];y=y';
format long
A=((inv(B'*B))*B')*y
A(2)/A(1)
X0(1)-A(2)/A(1)
k=0:n+2; X2=(X0(1)-A(2)/A(1))*exp(-k*A(1))+A(2)/A(1);
Xf=X2; Xf(n+3)=[]; Xff=[0 Xf];
X3=X2-Xff
X3(n+3)=[];X3(n+2)=[];X3(n+1)=[];
r=corrcoef(X0,X3)
Q=X0-X3;
format short
R=Q./X0
R1=max(abs(R))
s=mean(abs(R))
X0mean=mean(X0);S1=std(X0);
Qmean=mean(Q)
S2=std(Q);
C=S2/S1
D=abs(Q-Qmean);p0=0.6745*S1;m=0;
for j=1:n
d=D(j);
if (d<p0)
m=m+1;
end
end
P=m/n
E3=(Q*Q')/(n*(n-1));
E4=(1.96*sqrt(E3))/X0mean;
Pe=1-E4
D1=abs(Q);
Dmin=min(D1);Dmax=max(D1);r0=0;
for j=1:n
L=(Dmin+0.5*Dmax)/(D1(j)+0.5*Dmax);
r0=r0+L;
end
r0=r0/n
end。