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

如何拟合始终低于数据点的分段阶跃函数?

阶跃函数拟合问题:约束函数位于数据点下方及数组判断报错解决

我有一个生成阶跃曲线的自定义函数,需要优化拟合其中的5个参数(m1、m2、FL1、FL2、FL3),函数定义如下:

def steps(x, FL1, m1, FL2, m2, FL3):
    if x > m1:
        return FL1
    if x > m2:
        return FL2
    else:
        return FL3

我的核心需求是:拟合后的函数必须始终位于所有数据点的下方。简化示例为阶跃曲线完全处于数据点下方,实际数据的阶跃形态更复杂。

我认为scipy.optimize.curve_fit不适用,因为它基于最小二乘法,会让拟合曲线围绕数据点居中,无法满足“函数在数据点下方”的约束。

我尝试了以下代码:

from scipy.optimize import curve_fit  

def steps(m, FL1, m1, FL2, m2, FL3):
    if m > m1:
        return FL1
    if mass > m2:  # 注:此处存在变量名错误,应为m而非mass
        return FL2
    else:
        return FL3

x_data = [8000, 7000, 6000, 5000]  
y_data = [300, 350, 400, 450]  

popt, _ = curve_fit(steps, x_data, y_data)  

运行后报错:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

显然是函数中的if语句无法处理数组输入导致的问题。

请问:我可以使用什么方法来实现这种带约束(函数位于数据点下方)的阶跃函数拟合?

内容的提问来源于stack exchange,提问作者Hu gePanic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:02:34