Python、scipy、curve_fit、边界:如何按两个间隔约束参数?

Python, scipy, curve_fit, bounds: How can I constraint param by two intervals?

我正在使用 scipy.optimize.curve_fit 将 S 形曲线拟合到数据。我需要绑定 [-3, 0.5] 和 [0.5, 3.0]

中的一个参数

我试过没有边界的拟合曲线,接下来如果参数小于零,我再次用边界 [-3, 0.5] 拟合,相反 [0.5, 3.0]

是否可以用两个间隔绑定函数 curve_fit?

不,least_squares(因此curve_fit)仅支持框约束。

有一种粗略的方法可以做到这一点,那就是如果参数在多重边界之外,则让函数 return 非常大的值。例如:

sigmoid_func(x, parameters):
    if parameter outside multiple bounds:
        return 1.0E10 * len(x) # very large number
    else:
        return sigmoid value

如果参数超出您的多重界限,这会产生非常大的错误。如果您有 [upper, lower] 的单边界范围,则不应使用此方法,因为 scipy 的最新版本已经支持更常见的单边界范围类型的问题。