2012-04-20 14 views
12

Python'da, belirli bir rezonans verisine Gauss ve Lorentzian şekillerine uyan bir program yazıyorum. Orijinal olarak scipy.optimize.leastsq kullanmaya başladım, ancak kovaryans matrisinden optimize edilmiş parametrelerdeki hataları almayla ilgili zorluklar yaşadıktan sonra optimize.curve_fit'u kullanmaya başladım.Scipy.optimize.curve_fit kullanarak ek argümanlar iletiliyor mu?

I Gauss ve Lorentz bir miktar uygun bir fonksiyon tanımladık: p uygun parametreleri başlangıç ​​tahminleri bir dizi olan

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

. Şu numg (Gauss şekillerin sayısı) At

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

bir genel değişken olduğu: Burada curve_fit kullanılarak denir örneğidir. leastsq ile yapılabildiği gibi, bunun yerine curve_fit'a ek bir argüman olarak dahil edilebilecek herhangi bir yolu var mı?

cevap

17

piton hakkında çok şey diğer işlevleri iade işlevleri tanımlayabilirsiniz yani deneyin tımar: o zaman

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 

ve

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

Çok teşekkürler! Mükemmel çalıştı –