Передача дополнительных аргументов с помощью 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
?
Ответы
Ответ 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)