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

scipy.optimize.leastsq : How to specify non-parameters?

我想知道如何使用 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 有多个输入,而不仅仅是参数。

非常感谢。

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))