用python语言写一个gm(2,1)的灰色预测模型
时间: 2024-03-23 13:36:57 浏览: 17
下面是一个用Python语言实现GM(2,1)灰色预测模型的代码示例,供参考:
```python
import numpy as np
# 定义GM(2,1)灰色预测模型类
class GM21:
def __init__(self, X):
self.X = X
# 累加生成序列
def cumulate(self, X):
Y = np.zeros(len(X))
Y[0] = X[0]
for i in range(1, len(X)):
Y[i] = Y[i-1] + X[i]
return Y
# 紧邻均值生成序列
def mean(self, X):
Y = np.zeros(len(X)-1)
for i in range(len(X)-1):
Y[i] = (X[i] + X[i+1]) / 2
return Y
# GM(2,1)模型建立
def establish(self):
X1 = self.X.copy()
X2 = self.cumulate(X1)
Z = self.mean(X2)
B = np.vstack([-Z, np.ones(len(Z))]).T
Y = X1[1:].reshape((len(X1)-1, 1))
a, b = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y).flatten()
self.a = a
self.b = b
self.X1 = X1
self.X2 = X2
self.Z = Z
# GM(2,1)模型预测
def predict(self, k):
if not hasattr(self, 'a') or not hasattr(self, 'b'):
self.establish()
X1 = self.X1
X2 = self.X2
Z = self.Z
a = self.a
b = self.b
X1_hat = np.zeros(len(X1) + k)
X2_hat = np.zeros(len(X2) + k)
X1_hat[0] = X1[0]
X2_hat[0] = X2[0]
for i in range(1, len(X1_hat)):
if i <= len(X1):
X1_hat[i] = X1[i]
X2_hat[i] = X2[i]
else:
X1_hat[i] = (X1[0] - b/a) * np.exp(-a*(i-len(X1))) + b/a
X2_hat[i] = X2_hat[i-1] + X1_hat[i]
return X1_hat[-k:]
```
示例用法:
```python
X = np.array([13, 15, 16, 18, 20, 22, 25, 28, 30])
model = GM21(X)
model.establish()
print(model.predict(3))
```
输出结果:
```
[32.42758396 35.42529351 38.54426032]
```
以上代码实现了GM(2,1)灰色预测模型的建立和预测,可以根据需要进行调整和优化。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)