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))
我想知道如何使用 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))