Python 3.x var_数据=kwargs[var]错误-lmfit模型
我试图通过使用lmfit.Model拟合实验数据来确定系数 当我运行代码时,出现以下错误:Python 3.x var_数据=kwargs[var]错误-lmfit模型,python-3.x,curve-fitting,keyword-argument,lmfit,scikit-optimize,Python 3.x,Curve Fitting,Keyword Argument,Lmfit,Scikit Optimize,我试图通过使用lmfit.Model拟合实验数据来确定系数 当我运行代码时,出现以下错误: Traceback (most recent call last): File "C:\***.py", line 82, in <module> Dc = fit_Dc(t_days, prod, PV, Swi, l, r) File "C:\***.py", line 63, in fit_Dc result = fmodel.fit(Son, params,
Traceback (most recent call last):
File "C:\***.py", line 82, in <module>
Dc = fit_Dc(t_days, prod, PV, Swi, l, r)
File "C:\***.py", line 63, in fit_Dc
result = fmodel.fit(Son, params, t)
File "C:\***\Anaconda3\lib\site-packages\lmfit\model.py", line 991, in fit
var_data = kwargs[var]
KeyError: 't_days'
t
是np数组,也是Son
请给出一个最小的完整示例()。您发布的代码中没有行Dc=fit\u Dc(t\u天、产品、PV、Swi、l、r)
。提示:您可能需要result=fmodel.fit(Son,params,t=t)
(或者这是t_天
?)。另一个提示:为什么你的calc\u So\n()
函数有3个return
语句,你希望它做什么?@MNewville谢谢!!,请检查编辑后的版本。@MNewville添加t=t
谢谢!!很高兴这有帮助。但是:您的代码仍然无法运行。当你问这样的问题时,任何人回答的动机都是帮助他人(复数!)。现在,让它为你工作并不是唯一的动机。如果你没有以一种可以帮助他人的方式提出问题(包括:你发布的代码实际运行并按你说的做),我们再次帮助你的动机就会下降。所以:如果你认为你将来可能需要帮助,请把这个问题改成一个更好的资源,在类似情况下可以帮助其他人。
t_days = np.array([0, 2.3, 4.33, 6.83])
prod = np.array([0, 3, 3.1, 3.3])
PV = 11.2
Swi = 0.1303
def calc_So(t_days, PV, prod, Swi):
t = t_days*24
Sw = Swi + prod/PV
So = 1 - Sw
Soi = 1 - Swi
recovery = prod/Soi/PV
Son = (So - So[-1])/(Soi - So[-1])
return recovery, Soi, Sw, So, Son, t
def calc_So_n(t, l, r, Dc):
c_cyl = []
#calc C_ps
for n in range(0, 1200):
c_psi = ((8/(2*n+1)**2)/np.pi**2)*np.exp(-Dc*((2*n+1)**2*np.pi**2)*t/4/l**2)
c_ps.append(c_psi)
c_ps = np.asarray(c_ps, dtype = np.float64)
return np.sum(c_ps, axis = None)
#calc c_cyl
for n in range(0, 1200):
c_cyli = (4/((jn_zeros(0,n)[n-1])**2))*np.exp(-Dc*t*(jn_zeros(0,n)[n-1]/r)**2)
c_cyl.append(c_cyli)
c_cyl = np.asarray(c_cyl, dtype = np.float64)
return np.sum(c_cyl, axis = None)
return c_cyl*c_ps
# fit DC ti experimental data using lmfit model
def fit_Dc(t_days, prod, PV, Swi, l, r):
recovery, Soi, Sw, So, Son, t = calc_So(t_days, PV, prod, Swi)
# create model
fmodel = Model(calc_So_n)
# giving initial values for parameters
params = fmodel.make_params(r=r, l=l, Dc = 0)
# fix l & r:
params['r'].vary = False
params['l'].vary = False
# fit parameters to data with constant values of r, l:
params['r'].value = r
params['l'].value = l
result = fmodel.fit(Son, params, t= t)
print("Dc, Dc_error, chi-square=%f" % (result.params['Dc'].value,
result.params['Dc'].stderr,
result.chisqr))
return result.params['Dc'].value
recovery, Soi, Sw, So, Son, t = calc_So(t_days, PV, prod, Swi)
Dc = fit_Dc(t, prod, PV, Swi, l, r)