【发布时间】:2020-08-27 05:33:56
【问题描述】:
我有一个不对称峰,我想使用带有 lmfit 的拆分 Pearson 7 (SP7) 函数来拟合它。 首先定义了SP7函数,然后我用lmfit重新调用了它,但最后出现了这个错误:ValueError: varargs '*p' is not supported。为什么?
def polynomial(x, *p):
poly = Polynomial(p)
y = poly(x)
return y
def pearson7(x, *p):
x0, IM, H, m = p
y = IM / (1+4*(2**(1/m)-1)*(x-x0)**2/H**2)**m
return y
def splitpearson7(x, *p):
x0, IM, Hl, ml, Hr, mr = p
pl = [x0, IM, Hl, ml]
pr = [x0, IM, Hr, mr]
y = pearson7(x, *pl)*np.heaviside(x-x0, 0.5) + pearson7(x, *pr)*np.heaviside(x0-x, 0.5)
return y
def splitpearson7_backg(x, *p):
"""
Split PearsonVII distribution with linear background (8 parameters)
* background y = A + Bx
"""
y = splitpearson7(x, *p[0:6]) + polynomial(x, *p[6:8])
return y ```
first_params_fit=[0, np.max(y), 0.05, 0.5, 0.05, 0.5, 10, 0.3]
mod = Model(splitpearson7_backg)
pars = mod.make_params(first_params_fit)
result = mod.fit(y, pars, x=x)
print(result.fit_report()) ```
【问题讨论】:
标签: python model-fitting lmfit