前言:灰色预测模型的主要特点是模型使用的不是原始数据序列而是生成的数据序列,适合于历史数据少、序列的完整性及可靠性低的情况,但只适用于中短期和指数增长的预测。
参考书籍:《python数学建模算法与应用》 司守奎 孙玺菁 (强烈推荐!)
具体代码书上有写我就没有再敲出来
1、GM(1,1)预测模型
GM(1,1)表示模型是1阶微分方程,且只含有1个变量的灰色模型。该模型适合具有较强指数规律的序列,且变化过程单调的问题。
库:sympy numpy
步骤:
1、数据的检验和处理
计算参考数列的级比,查看是否都落在级比容许范围内,否则采取平移变换使落在可容覆盖内。lamda=x0[:-1]/x0[1:]
2、求出一次累加生成序列(1-AGO)和累加生成序列的均值生成序列
累加生成序列:x1=np.cumsum(x0)
均值生成序列:(x1[1:]+x1[:-1])/2
3、构造数据矩阵B和数据向量Y,计算白化微分方程的系数(注意初值)
u=np.linalg.pinv(B)@Y=[a,b]’
4、求出时间响应函数和时间响应序列
t=sp.symbol(“t”);x=sp.symbole(“x”,cls=sp.Function)
eq=x(t).diff(t)+u[0]*x(t)-u[1]
xt0=sp.dsolve(eq,ics={x(0):x0[0]})
提取方程中的符号解:xt0=xt0.args[1]
5、通过时间响应序列反求参考数列,进行误差检验。
xt=sp.lambdify(t,xt0,’numpy’)
t=np.arange(n+1)
xh=xt(t)
cha=x0-x0h[:-1];delta=abs(cha/x0)*100 相对误差
rho=abs(1-(1-0.5*u[0])/(1+0.5*u[0])*lamda) 级比偏差
相对误差和级比偏差值小于0.2认为达到一般要求,小于0.1认为达到较高的要求。
建模时步骤:
1、计算级比,判断是否在可容覆盖范围内(应该写出级比计算公式和可容覆盖范围)
2、根据1-AGO和均值生成序列建立GM(1,1)模型,应当写出两个序列和B、Y数据矩阵及求到的a、b
3、求解时间响应序列
4、给出相对误差和级比偏差的数据表格,说明模型精度
2、GM(2,1)预测模型
该模型适用于非单调的摆动发展序列或有饱和的S形序列
步骤:(该方法不需要数据的检验和处理)
1、求出1次累加生成序列(1-AGO)、1次累减生成序列(1-IAGO)和累加生成序列的均值生成序列
2、构造数据矩阵B和数据向量Y,计算白化微分方程的系数(注意初值)
3、求出时间响应函数和时间响应序列
4、通过时间响应序列反求参考数列,进行误差检验
GM(2,1)和GM(1,1)的求解步骤基本相同,但GM(2,1)需要求解1-IAGO,代码部分大致相同。
3、DGM(2,1)预测模型
该模型的求解步骤和GM(2,1)相同,只是不用求均值生成序列
4、灰色Verhulst预测模型
该模型适用于具有饱和状态的过程,即S型过程,常用于人口预测、生物生长、繁殖预测及产品经济寿命预测等。
步骤:和GM(1,1)求解过程基本相同,但建立的灰微分方程不同。