You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

针对不同长度不同起始x值的四阶拟合数据集求取逐点极值的方法咨询

实现思路
  • 先统一x轴采样区间:取所有测试集x值的全局上下限生成等步长序列,也可以根据需求选择仅保留所有数据集都覆盖的重叠区间,避免多项式外推带来的误差
  • 复用已拟合的四阶多项式参数,直接计算所有拟合曲线在统一x序列每个点上的y值,无需关心原数据集的长度和起始点差异
  • 对同一x点对应的4个y值做逐点聚合,直接计算最大值和最小值即可得到目标序列
代码修改说明

首先需要调整原有拟合部分的变量存储逻辑,避免拟合参数被覆盖:

# 原四阶拟合段修改为分别存储每组的拟合参数
def objective_4(x,a,b,c,d,e):
    return a * x**4 +b*x**3 +c*x**2+d*x+e 

pars1, _ = curve_fit(objective_4, XTest1,YTest1)
x_line1 = arange(min(XTest1), max(XTest1), 1)
y_line1 = objective_4(x_line1, *pars1)

pars2, _ = curve_fit(objective_4, XTest2,YTest2)
x_line2 = arange(min(XTest2), max(XTest2), 1)
y_line2 = objective_4(x_line2, *pars2)

pars3, _ = curve_fit(objective_4, XTest3,YTest3)
x_line3 = arange(min(XTest3), max(XTest3), 1)
y_line3 = objective_4(x_line3, *pars3)

pars4, _ = curve_fit(objective_4, XTest4,YTest4)
x_line4 = arange(min(XTest4), max(XTest4), 1)
y_line4 = objective_4(x_line4, *pars4)

新增逐点极值计算逻辑:

# 生成统一x轴序列,此处取所有数据集x的并集,步长1
all_x_min = min([min(XTest1), min(XTest2), min(XTest3), min(XTest4)])
all_x_max = max([max(XTest1), max(XTest2), max(XTest3), max(XTest4)])
x_unified = np.arange(all_x_min, all_x_max, 1)

# 若仅需要所有数据集重叠的区间,替换为以下代码
# overlap_x_min = max([min(XTest1), min(XTest2), min(XTest3), min(XTest4)])
# overlap_x_max = min([max(XTest1), max(XTest2), max(XTest3), max(XTest4)])
# x_unified = np.arange(overlap_x_min, overlap_x_max, 1)

# 计算所有曲线在统一x轴上的y值
y_arr = np.array([
    objective_4(x_unified, *pars1),
    objective_4(x_unified, *pars2),
    objective_4(x_unified, *pars3),
    objective_4(x_unified, *pars4)
])

# 逐点计算极值
y_point_min = np.min(y_arr, axis=0)
y_point_max = np.max(y_arr, axis=0)

# 绘制验证
plt.plot(x_line1,y_line1, label='Test1', alpha=0.5)
plt.plot(x_line2,y_line2, label='Test2', alpha=0.5)
plt.plot(x_line3,y_line3, label='Test3', alpha=0.5)
plt.plot(x_line4,y_line4, label='Test4', alpha=0.5)
plt.plot(x_unified, y_point_min, c='blue', linewidth=2, label='最小值序列')
plt.plot(x_unified, y_point_max, c='red', linewidth=2, label='最大值序列')
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者Lodewijk Pleij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:48:04