用python写GM(2,1)代码
时间: 2024-05-13 17:14:32 浏览: 160
GM(2,1)模型是一种灰色预测模型,可以用于时间序列预测。下面是一个用Python实现GM(2,1)模型的代码示例:
```python
import numpy as np
def GM_21(data):
# 累加生成序列
cum_data = np.cumsum(data)
# 紧邻均值生成序列
mean_data = (cum_data[:-1] + cum_data[1:]) / 2
# 级比生成序列
b = np.array([-mean_data, np.ones_like(mean_data)]).T
Yn = data[1:].reshape((-1, 1))
a = np.matmul(np.matmul(np.linalg.inv(np.matmul(b.T, b)), b.T), Yn)
# 模型预测
Yn_pred = np.zeros_like(data)
Yn_pred[0] = data[0]
for i in range(1, len(data)):
Yn_pred[i] = (data[0] - a[1] / a[0]) * np.exp(-a[0] * i) + a[1] / a[0]
return Yn_pred
```
这个函数接受一个一维数组 `data` 作为输入,并返回一个一维数组,表示模型预测的结果。可以将这个函数用于时间序列预测等应用中。
相关问题
利用Python写一段灰色模型GM(2,1)代码
好的,下面是一个简单的 Python 代码示例,用于构建一个灰色模型 GM(2,1):
```python
import numpy as np
class GreyModel:
def __init__(self, data):
# 初始化数据
self.data = np.array(data)
def generate(self, n):
# 根据数据生成灰色模型GM(2,1)
X1 = self.data
X1_cumsum = np.cumsum(X1)
n = len(X1)
# 计算矩阵B
B = np.zeros((n - 1, 2))
for i in range(n - 1):
B[i][0] = -0.5 * (X1_cumsum[i] + X1_cumsum[i+1])
B[i][1] = 1
# 计算向量Y
Y = X1[1:]
# 计算GM(2,1)的参数a和u
a, u = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
# 预测下一步的值
X1_pred = (X1[0] - u / a) * np.exp(-a * n) + u / a
# 计算残差序列
residuals = np.zeros(n)
for i in range(n):
if i == 0:
residuals[0] = X1[0] - X1_pred
else:
residuals[i] = X1[i] - (X1[0] - u / a) * np.exp(-a * i) - u / a
return X1_pred, residuals
# 创建一个灰色模型对象
gm = GreyModel([1, 3, 5, 7, 9, 11, 13, 15])
# 预测下一步的值
X1_pred, residuals = gm.generate(8)
# 输出预测结果和残差序列
print("预测结果为:", X1_pred)
print("残差序列为:", residuals)
```
以上代码实现了一个简单的灰色模型 GM(2,1)。在训练过程中,我们首先根据输入数据生成灰色模型 GM(2,1),然后使用该模型预测下一步的值,并计算残差序列。最后,输出预测结果和残差序列。
python生成GM(2,1)灰色预测模型代码
以下是一个简单的Python程序,用于生成GM(2,1)灰色预测模型:
```python
import numpy as np
def GM21(x0):
x1 = np.cumsum(x0)
z1 = (x1[:-1] + x1[1:]) / 2.0
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Y = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
predict = (x0[0] - b / a) * np.exp(-a * np.arange(1, len(x0) + 1))
return predict
# 测试
x0 = np.array([10, 12, 13, 15, 18, 20])
print(GM21(x0))
```
上面的代码中,我们使用了NumPy库。该程序接受一组输入数据x0,并返回预测结果。我们首先计算一阶累加数列x1,然后计算平均值z1。接下来,我们使用B矩阵和Y矩阵来计算a和b,最后使用预测公式来生成预测值。
阅读全文