我想知道如何使用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的输入,而不仅仅是参数。
非常感谢。
答案 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))