一个扩展数据点中有两个变量的绑定模型如何匹配?

2024-05-15 11:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我所拥有的一切,都要感谢许多帮助过我的人:

#defining function that applies the binding model to the data
def binding_model(xdata, Vcell, Ka, n, dH):
    #packaging Mt and Xt into one object to abide by curve_fit rules
    #avoiding 'divide by 0' errors by truncating lists
    Mt[1:] = xdata[0]
    Xt[1:] = xdata[1]
    #breaking up the equation for simplicity
    a = n*Mt*dH*Vcell/2
    b = 1+(Xt/(Mt*n))
    c = 1/(n*Ka*Mt)
    d = 1+(Xt/(n*Mt))+(1/(n*Ka*Mt))
    e = 4*Xt/(Mt*n)
    #combining variables into the whole equation
    return a*(b+c)-(d**2-e**.5)

#fitting molar enthalpy vs. molar ratio data with the binding model
initial_Vcell = 0
initial_Ka = 0
initial_n = 0
initial_dH = 0
initial_paramaters = np.array([initial_Vcell, initial_Ka, initial_n,
                               initial_dH])
xdata = zip(Mt, Xt)
xdata = np.array(xdata)
parameters, cov = curve_fit(binding_model, xdata, peak_areas, p0=
                            initial_paramaters)
Vcell = parameters[0]
Ka = parameters[1]
n = parameters[2]
dH = parameters[3]
Ffit = binding_model(xdata, Vcell, Ka, n, dH)

退货:

  File "mygroatitc.py", line 164, in binding_model
    Mt[1:] = xdata[0]
ValueError: could not broadcast input array from shape (2) into shape (40)

有没有人有使用曲线拟合或压缩变量来发现我的错误的经验?你知道吗

Vcell是一个整数,Mt和Xt是大小相等的数组,peak_area(与Mt或Xt大小相等的数组)是curve_fit函数中的y数据。你知道吗


Tags: thebymodelinitialfitbindingparametersdh
2条回答

啊,我明白了。你还没有具体说明Mt或Xt是什么。我们是上面定义的?在bind_model()函数中,您将重新分配给这些全局变量(以及每次迭代)。那真的是你想要的吗?你知道吗

如果您在使用curve\u fit()进行数据布局时遇到问题,我强烈建议使用leastsq(),而curve\u fit()只是leastsq()的包装器。使用leastsq(),目标函数将参数数组作为第一个参数,可以获取其他参数(这是传递“y”数据的地方),并返回要在最小二乘意义上最小化的一维数组。如果你把多维数组分解成单独命名的数组只是为了适应curve的想法,那么使用leastsq()并将Mt,Xt传递给目标函数可能会更容易。你知道吗

绑定\u model()必须返回1d numpy数组。用途:

 residual = a*(b+c)-(d**2-e**.5)
 return residual.ravel()

相关问题 更多 >