到目前为止,我所拥有的一切,都要感谢许多帮助过我的人:
#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数据。你知道吗
啊,我明白了。你还没有具体说明Mt或Xt是什么。我们是上面定义的?在bind_model()函数中,您将重新分配给这些全局变量(以及每次迭代)。那真的是你想要的吗?你知道吗
如果您在使用curve\u fit()进行数据布局时遇到问题,我强烈建议使用leastsq(),而curve\u fit()只是leastsq()的包装器。使用leastsq(),目标函数将参数数组作为第一个参数,可以获取其他参数(这是传递“y”数据的地方),并返回要在最小二乘意义上最小化的一维数组。如果你把多维数组分解成单独命名的数组只是为了适应curve的想法,那么使用leastsq()并将Mt,Xt传递给目标函数可能会更容易。你知道吗
绑定\u model()必须返回1d numpy数组。用途:
相关问题 更多 >
编程相关推荐