数模(7):灰色预测模型

介绍

灰色预测模型是对少量数据进行拟合确定方程的一种模型,通过累加的方式减少数据中的不确定因素。

原始序列 x ( 0 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) , . . . , x ( 0 ) ( n ) ) x^{(0)}=(x^{(0)}(1),x^{(0)}(2),...,x^{(0)}(n)) 一次累加生成序列 x ( 1 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 1 ) + x ( 0 ) ( 2 ) , . . . , i = 1 n x ( 0 ) ( i ) ) x^{(1)}=(x^{(0)}(1),x^{(0)}(1)+x^{(0)}(2),...,\sum_{i=1}^{n}x^{(0)}(i)) ,则可以视原始序列为一次累加生成序列对i的微分序列

设微分方程 d x d i + a x = b \frac{dx}{di}+ax=b ,即 x ( 0 ) + a x ( 1 ) = b x^{(0)}+ax^{(1)}=b ,可以利用最小二乘法估计a和b的数值。

解微分方程得 x ( 1 ) = ( x 0 ( 1 ) b a ) e a i + b a x^{(1)}=(x^{(1)}_0-\frac{b}{a})e^{-ai}+\frac{b}{a} ,再将其每一位减去前一位还原为 x ( 0 ) = ( x 0 ( 1 ) b a ) ( e a i e a ( i 1 ) ) x^{(0)}=(x^{(1)}_0-\frac{b}{a})(e^{-ai}-e^{-a(i-1)}) ,既可以得到原始序列关于i的拟合方程。

实例

下表是2000-2006年宁波市房地产价格的统计数据,试拟合模型。

年份 2000 2001 2002 2003 2004 2005 2006
宁波市 105.5 107.2 116.4 116.6 113.9 106.5 102.2

设2000年为第1年,python代码如下:

import numpy as np
from scipy import optimize
from matplotlib import pyplot

lis=np.array([105.5,107.2,116.4,116.6,113.9,106.5,102.2])
lis1=lis.cumsum()
z1 = np.polyfit(lis1, lis, 1)
a=-z1[0]
b=z1[1]
print(a,b)
i=np.arange(1,8)
x1=(lis1[0]-b/a)*(np.exp(-a*i)-np.exp(-a*(i-1)))
pyplot.plot(i,x1)
pyplot.plot(i,lis,".")
pyplot.show()

计算出a值为0.004,b值为111.54,其拟合结果是一条几乎将散点一分为二的直线
在这里插入图片描述

发布了24 篇原创文章 · 获赞 11 · 访问量 3896

猜你喜欢

转载自blog.csdn.net/weixin_43441742/article/details/100027622