-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
50 lines (40 loc) · 1.66 KB
/
test.py
File metadata and controls
50 lines (40 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 定义高斯变体函数
def gaussian_variant(x, a, b, mu, sigma):
"""高斯分布变体模型"""
return a + b * np.exp(-((x - mu) ** 2) / (2 * sigma ** 2))
# 给定的部分序列 x,代表数据的某一部分
# 调整此输入序列作为示例,确保它不是完整的高斯分布
x_data = np.array([ 0.9, 0.7, 0.4, 0.2]) # 原始部分序列
# 生成 x 的坐标
x_coords = np.arange(len(x_data))
# 估计初始参数
mu = np.mean(x_data) # 均值
sigma = np.std(x_data) # 标准差
initial_guess = [np.min(x_data), 1, mu, sigma] # a, b, mu, sigma 的初值
# 拟合高斯分布变体
params, _ = curve_fit(gaussian_variant, x_coords, x_data, p0=initial_guess)
# 提取拟合的参数
a, b, mu, sigma = params
print(f"拟合得到的参数: a={a}, b={b}, mu={mu}, sigma={sigma}")
# 生成未来的结果
future_n = 5 # 预测未来 5 个值
future_coords = np.arange(len(x_data), len(x_data) + future_n)
# 使用拟合后的高斯函数预测未来的值
future_values = gaussian_variant(future_coords, *params)
# 合并当前和预测值
all_values = np.concatenate((x_data, future_values))
# 绘图展示
plt.figure(figsize=(10, 6))
plt.plot(x_coords, x_data, 'bo-', label='ori')
plt.plot(future_coords, future_values, 'ro-', label='pred')
plt.plot(np.arange(len(all_values)), gaussian_variant(np.arange(len(all_values)), *params), 'g--', label='gau')
plt.xlabel('序列索引')
plt.ylabel('值')
plt.xticks(np.arange(len(all_values))) # 确保显示所有索引
plt.legend()
plt.title('高斯分布变体的拟合与预测')
plt.grid()
plt.savefig('gaussian_variant_fit.png')