Passer des arguments supplémentaires en utilisant scipy.optimiser.ajustement de la courbe?

j'écris un programme en Python qui adaptera les formes gaussiennes et Lorentziennes à certaines données de résonance données. J'ai commencé à utiliser scipy.optimize.leastsq mais changé en utilisant optimize.curve_fit après avoir eu de la difficulté à extraire les erreurs des paramètres optimisés de la matrice de covariance.

j'ai défini une fonction pour ajuster une somme de gaussien et Lorentzien:

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 est un tableau des conjectures initiales aux paramètres d'ajustement. Voici l'exemple où il est appelé à l'aide de curve_fit:

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

pour le moment numg (le nombre de formes gaussiennes) est une variable globale. Est-il de toute façon qu'il peut être incorporé dans curve_fit comme argument supplémentaire à la place, comme on peut le faire avec <!--8?

13
demandé sur Shep 2012-04-20 21:02:42

1 réponses

la grande chose au sujet de python est que vous pouvez définir des fonctions qui retournent d'autres fonctions, essayez de lancer:

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

et

leastsq, covar = opt.curve_fit(make_mix(numg),energy,intensity,inputtot)
18
répondu Shep 2012-04-20 17:14:18