我正在尝试使用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的值有一些限制。关于如何处理不正确值的任何猜测吗?输入函数应该引发异常还是返回虚拟值?
提前致谢。

最佳答案

当参数超出允许范围时,返回一个巨大的数字(与要拟合的数据相去甚远)。这将(希望地)对这种参数选择造成不利影响,以至于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

关于python - 限制curve_fit的值(scipy.optimize),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9518290/

10-12 19:30