2012-04-20 125 views
12

我正在用Python编写一个程序,它可以将Gaussian和Lorentzian形状适用于某些给定的共振数据。我最初开始使用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

关于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) 
+0

非常感谢!完美工作 – 2012-04-20 17:26:45

相关问题