Подтвердить что ты не робот

Передача дополнительных аргументов с помощью scipy.optimize.curve_fit?

Я пишу программу на Python, которая будет соответствовать формам Гаусса и Лоренца для некоторых данных резонанса. Первоначально я начал использовать scipy.optimize.leastsq, но изменил его на использование 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?

4b9b3361

Ответ 1

Самое замечательное в 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)