2012-03-01 27 views
7

我尝试使用curve_fit将我的数据拟合为逻辑增长曲线,使用以下函数作为输入。限制curve_fit的值(scipy.optimize)

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可以接受的值有一些限制。任何猜测如何处理不正确的值?输入函数应该引发异常还是返回一个虚拟值? 在此先感谢。

回答

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 
+0

它似乎工作好一点,谢谢!我会再玩一点,但是... – mgalardini 2012-03-01 15:37:17