2012-04-20 131 views
12

我正在用Python編寫一個程序,它可以將Gaussian和Lorentzian形狀適用於某些給定的共振數據。我最初開始使用scipy.optimize.leastsq,但在難以從協方差矩陣中檢索優化參數中的誤差之後,開始使用optimize.curve_fit使用scipy.optimize.curve_fit傳遞附加參數?

我已經定義了一個函數,以適應高斯和洛倫茲的總和:

def mix(x,*p): 
    ng = numg 
    p1 = p[:3*ng] 
    p2 = p[3*ng:] 
    a = sumarray(gaussian(x,p1),lorentzian(x,p2)) 
    return a 

其中p是擬合參數的初始猜測的陣列。這裏是其中使用curve_fit稱爲實例:

leastsq,covar = opt.curve_fit(mix,energy,intensity,inputtot) 

目前numg(高斯形狀的數量)是一個全局變量。有什麼方法可以將它作爲額外的參數併入curve_fit而不是leastsq

回答

17

關於Python的偉大的事情是,你可以定義返回其他函數的函數, 嘗試柯里:

def make_mix(numg): 
    def mix(x, *p): 
     ng = numg 
     p1 = p[:3*ng] 
     p2 = p[3*ng:] 
     a = sumarray(gaussian(x,p1),lorentzian(x,p2)) 
     return a 
    return mix 

然後

leastsq, covar = opt.curve_fit(make_mix(numg),energy,intensity,inputtot) 
+0

非常感謝!完美工作 – 2012-04-20 17:26:45

相關問題