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