限制curve_fit的值(scipy.optimize)

时间:2012-03-01 14:48:04

标签: python scipy curve-fitting

我正在尝试使用curve_fit将逻辑增长曲线拟合到我的数据中,使用以下函数作为输入。

def logistic(x, y0, k, d, a, b):
    if b > 0 and a > 0:
        y = (k * pow(1 + np.exp(d - (a * b * x) ), (-1/b) )) + y0
    elif b >= -1 or b < 0 or a < 0:
        y = (k * pow(1 - np.exp(d - (a * b * x) ), (-1/b) )) + y0

    return y

正如您所看到的,我正在使用的函数对参数a和b可以接受的值有一些限制。有关如何处理错误值的任何猜测?输入函数是应该引发异常还是返回虚拟值? 提前致谢。

1 个答案:

答案 0 :(得分:7)

当参数超出允许范围时,返回一个非常大的数字(远离要安装的数据)。这将(希望)惩罚这些参数的选择,以至于curve_fit将以其他一些可接受的参数集合作为最优参数:

def logistic(x, y0, k, d, a, b):
    if b > 0 and a > 0:
        y = (k * pow(1 + np.exp(d - (a * b * x) ), (-1/b) )) + y0
    elif b >= -1 or b < 0 or a < 0:
        y = (k * pow(1 - np.exp(d - (a * b * x) ), (-1/b) )) + y0
    else:
        y = 1e10
    return y