scipy.optimize.leastsq:如何指定非参数?

时间:2015-08-13 00:08:19

标签: scipy least-squares chi-squared

我想知道如何使用scipy中的leastsq进行卡方拟合。我知道结构基本上是 -

parameters = leastsq(chi(exp_data, exp_err, param), initial_guess, arg = (?,?,?))

其中exp_data,exp_err是数组

def fitted_data(param):
    fitted_data = a*param[0] + b*param[1]**2 + c*np.sin(param[3])

return fitted_data

def chi(exp_data, exp_err, param):
    chi = (exp_data - fitted_data(param))/exp_err

return(chi)

我不明白的是如何仅指定param作为探测卡方拟合的参数。我不明白如何使用arg = (?,?,?),因为我有多个函数chi的输入,而不仅仅是参数。

非常感谢。

1 个答案:

答案 0 :(得分:0)

leastsq使函数最小化。此函数必须依赖于拟合的参数,并且还可能依赖于其他参数,这些参数被认为是最小化的常量。这些是通过args - 参数作为元组提供的。参数将作为第一个参数提供,所有其他参数可以在之后。 您最小化的功能需要如下所示:

def residuals(params, args)

我调整了您的代码以符合这些要求:

def fitted_data(params) :
    fitted_data = a*params[0] + b*params[1]**2 + c*np.sin(params[3])
return fitted_data

def chi(params, exp_data, exp_err) :
    chi = (exp_data - fitted_data(params)/exp_err
return chi

result = scipy.optimize.leastsq(chi, x0=(1, 1, 1), args=(exp_data, exp_err))