Python 3.x var_数据=kwargs[var]错误-lmfit模型

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,

我试图通过使用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, 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)