首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

数学建模1:灰色预测模型

  • 25-03-02 23:02
  • 4071
  • 13787
blog.csdn.net

灰色预测模型:

        灰色预测模型是一种用于处理不完全信息的预测方法,适用于数据样本少、系统不确定性高的情况。

        灰色预测模型的核心思想是利用已有的部分信息对未来进行预测。它的基本形式是灰色模型GM(1,1),其中“1”表示一个方程、一个变量的模型。这个模型通过对原始数据序列进行累加生成序列,然后建立一个差分方程进行建模,最后利用这个模型来预测未来的数据。本文按照最基础的单序列,一阶模型

解题:

假设我们有一个时间序列数据(比如月销售量)如下:

月销量3035404550
第几月12345

求解:使用灰色模型预测第6个月的销量 

1:计算累加生成序列x_{1}(t)

x_{1}(1)=x(1)=30

x_{1}(2)=x(1)+x(2)=30+35=65

x_{1}(3)=x(1)+x(2)+x(3)=30+35+40=105

x_{1}(4)=x(1)+x(2)+x(3)+x(4)=30+35+40+45=150

x_{1}(5)=x(1)+x(2)+x(3)+x(4)+x(5)=30+35+40+45+50=200

解得累加生成序列:

x_{1}(t)=[30,65,105,150,200]

2.建立差分方程:z(t)

z(2) = \frac{x_{1}(1) + x_{1}(2)}{2} = \frac{30 + 65}{2} = 47.5

z(3) = \frac{x_{1}(2) + x_{1}(3)}{2} = \frac{65 + 105}{2} = 85

z(4) = \frac{x_{1}(3) + x_{1}(4)}{2} = \frac{105 + 150}{2} = 127.5

z(5) = \frac{x_{1}(4) + x_{1}(5)}{2} = \frac{150 + 200}{2} = 175

解均值序列为:

z(t) = [47.5,85,127.5,175]

3.构造矩阵:

B = \begin{pmatrix} -47.5\\ -85\\ -127.5\\ -175\\ \end{pmatrix}

目标矩阵:

Y = \begin{pmatrix} 35\\ 40\\45\\50\\ \end{pmatrix}

4.使用最小二乘法求解模型参数

求解目标方程为:

x_{0}(t) = u - az(t)

化为矩阵形式:

Y = BU也就是如下形式

\begin{pmatrix} 35\\ 40\\45\\50\\ \end{pmatrix} = \begin{pmatrix} -47.5& 1\\-85 &1 \\ -127.5&1 \\ -175&1 \end{pmatrix}\begin{pmatrix} a\\ b \end{pmatrix}

 最小二乘法就是求(Y-BU)^{T}(Y-BU)取最小值时的U

求解U的估计值为:\hat{U} = [\hat{a},\hat{b}]^{T} = (B^{T}B)^{-1}B^{T}Y

求出a和b的值带入到微分方程中:

x_{1}(t + 1) = (x_{0}(1) - \frac{b}{a})e^{-at} + \frac{b}{a}

计算得:

a = -0.1173

b = 29.7412

带入得

x_{1}(6) = 256.2

x_{0}(6) = 56.2

python代码:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. class GM11:
  4. def __init__(self, X, T):
  5. self.X = X
  6. self.T = T
  7. self.X1= []
  8. self.Z = []
  9. self.U = None
  10. def caculateXSum(self):#计算X1矩阵和Z矩阵
  11. count = 0
  12. X1 = []
  13. Z = []
  14. for i in range(0, len(self.X),1):
  15. count = count + self.X[i]
  16. X1.append(count)
  17. for j in range(0, len(X1) - 1,1):
  18. Z.append((X1[j] + X1[j + 1])/2)
  19. self.X1 = X1
  20. self.Z = Z
  21. def caculateAB(self):#计算U矩阵的值
  22. Y = (np.array(self.X[1:])).reshape(-1,1)
  23. B = np.array(self.Z)*-1
  24. ones_column = np.ones((B.shape[0], 1))
  25. B = np.hstack((B.reshape(-1,1), ones_column))
  26. #print(B)
  27. #print(Y)
  28. self.U = np.linalg.inv(B.T @ B) @ B.T @ Y
  29. #self.U = np.dot(np.linalg.inv(np.dot(B.T,B)),np.dot((B.T),Y))
  30. def caculateX(self, t):#计算最终的X
  31. if self.U is None:
  32. self.caculateXSum()
  33. self.caculateAB()
  34. t = t - 1
  35. a = self.U[0]
  36. b = self.U[1]
  37. result = (self.X[0] - b/a)*(np.e ** (-1*a*(t))) + b/a
  38. return result[0]
  39. X = np.array([30, 35, 40, 45, 50])
  40. T = np.array([1, 2, 3, 4, 5])
  41. GM11 = GM11(X, T)
  42. n = 6#预测第n个值
  43. result = GM11.caculateX(6)
  44. print(f'解得u矩阵为:{GM11.U[0]},{GM11.U[1]}')
  45. print(f'预测得x({n})的值为:{result}')
  46. #print(X)
  47. #绘图
  48. X1 = GM11.X1
  49. for i in range(1,4,1):
  50. X1.append(GM11.caculateX(5 + i))
  51. #print(X1)
  52. X = []
  53. X.append(X1[0])
  54. for i in range(1, len(X1), 1):
  55. X.append(X1[i] - X1[i - 1])
  56. plt.plot(range(len(X) - 3), X[0:-3], 'o-', label='Original')
  57. plt.plot(range(len(X) - 4, len(X)), X[-4:], 'x--', label='Future Prediction')
  58. plt.legend()
  59. plt.show()

效果图:

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览64929 人正在系统学习中
注:本文转载自blog.csdn.net的爱打代码的小高的文章"https://blog.csdn.net/gr1423428723/article/details/142325343"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

137
数学
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top