用scipy.optimize.curve_fit传递额外参数?

2024-06-07 05:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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那样?


Tags: 数据程序参数scipyngfitoptimize形状
1条回答
网友
1楼 · 发布于 2024-06-07 05:23:27

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)

相关问题 更多 >