2012-04-20 5 views
12

मैं पाइथन में एक प्रोग्राम लिख रहा हूं जो कुछ दिए गए अनुनाद डेटा में गॉसियन और लोरेंटेज आकार को फिट करेगा। मैंने मूल रूप से scipy.optimize.leastsq का उपयोग शुरू किया लेकिन कॉन्वर्स मैट्रिक्स से अनुकूलित पैरामीटर में त्रुटियों को पुनर्प्राप्त करने में कठिनाइयों के बाद optimize.curve_fit का उपयोग करने के लिए बदल दिया।scipy.optimize.curve_fit का उपयोग कर अतिरिक्त तर्क पारित करना?

मैं एक समारोह को परिभाषित किया है गाऊसी और Lorentzian की राशि फिट करने के लिए:

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 फिट मापदंडों पर प्रारंभिक अनुमान की एक सरणी है।

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

पल numg (गाऊसी आकार की संख्या) पर एक वैश्विक चर है: यहाँ उदाहरण है जहां यह curve_fit का उपयोग कर कहा जाता है। क्या कोई तरीका है कि इसे curve_fit में अतिरिक्त तर्क के रूप में शामिल किया जा सकता है, जैसा कि leastsq के साथ किया जा सकता है?

उत्तर

17

अजगर के बारे में महान बात यह है कि आप कार्यों कि अन्य कार्यों वापसी को परिभाषित कर सकते है, कोशिश currying:

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

धन्यवाद इतना! पूरी तरह से काम किया –