2012-04-20 2 views
12

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

ответ

17

Самое замечательное питона является то, что вы можете определить функции, которые возвращают другие функции, попытка карринг:

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

спасибо! Отлично работает –

Смежные вопросы