2012-04-20 12 views
12

私は、与えられた共鳴データにガウス型とローレンツ型に適合するプログラムをPythonで書いています。私はもともとscipy.optimize.leastsqを使用し始めましたが、共分散行列から最適化されたパラメータのエラーを検索することが困難なのちにoptimize.curve_fitを使用するように変更されました。scipy.optimize.curve_fitを使って追加の引数を渡す?

私はガウスとローレンツの合計に合わせて機能を定義した:pはフィットパラメータの初期推測の配列です

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

。モーメントnumg(ガウス形状の数)で

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

グローバル変数である:ここではcurve_fitを使用して呼ばれる場合があります。代わりにと同様に、curve_fitに余分な引数として組み込むことができる方法はありますか?

答えて

17

パイソンの素晴らしいところは、あなたが他の関数を返す関数を定義することができるということです、 トライカリー化:その後、

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

本当にありがとうございました!完璧に働いた –

関連する問題