2012-03-01 65 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