【问题标题】:Passing additional arguments using scipy.optimize.curve_fit?使用 scipy.optimize.curve_fit 传递其他参数?
【发布时间】:2012-05-02 06:55:59
【问题描述】:

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

【问题讨论】:

    标签: python scipy


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2015-06-02
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多