繁体   English   中英

使用scipy.optimize的curve_fit

[英]Using scipy.optimize's curve_fit

---- ---- ANSWERED

如果这个问题回答得太简单,我深表歉意。 我是Python编码的新手,目前正在从事一个困难的项目。 任何帮助表示赞赏; 我很高兴为那些愿意协助的人澄清混乱。

我可以使用此函数成功拟合数据,但是绑定模型不准确(热力学值不正确):

#defining function of the binding model 
def binding_model(molar_ratio,Ka,n,dH):
    return (dH*molar_ratio**n)/(molar_ratio**n+Ka**n)

#fitting molar enthalpy vs. molar ratio data with binding model
initial_paramaters=array([1,0,0])   
parameters,cov=curve_fit(binding_model,molar_ratio,peak_areas,initial_paramaters)
n=parameters[0]
Ka=parameters[1]
dH=parameters[2]
Ffit=binding_model(molar_ratio,n,Ka,dH)

我更正了绑定模型(针对单位配体绑定模型),但是我无法使curve_fit函数正常工作:

#defining function of the binding model 
def binding_model(Mt,Xt,Vcell,Ka,n,dH):
    return (n*Mt*dH*Vcell/2)*(1+(Xt/(Mt*n))+(1/(n*Ka*Mt)))-((1+(Xt/(n*Mt))+(1/(n*Ka*Mt)))**2-(4*Xt/(Mt*n))**.5)
#fitting molar enthalpy vs. molar ratio data with binding model
initial_paramaters=array([1,0,0])   
parameters=curve_fit(binding_model,Mt,Xt,Vcell,peak_areas,initial_paramaters)
n=parameters[0]
Ka=parameters[1]
dH=parameters[2]
Ffit=binding_model(Mt,Xt,Ka,n,dH,Vcell)

现在,它返回“ curve_fit()最多包含5个参数(给定6个)”错误。

mole_ratio,Mt和Xt是三个数组,每个数组包含41个值。 Vcell是从数据中提取的整数。 感谢您的关注!

您只是没有正确使用它。

在这里阅读工作原理

说我想对多项数据拟合多项式;

我可以有这样的事情:

def quad(xdata, a,b,c):
    return a * xdata**2 + b * xdata + c

那我可以有一些数据;

xdata = np.array([range(10)])
ydata = np.array([1 for _ in xdata])

然后我可以打电话给curve_fit;

initial_guess = [0,0,0]
popt, pcov = scipy.optimize.curve_fit(quad, xdata, ydata, p0=initial_guess)

print popt # [0,0,1]

您遇到的问题是您没有将初始猜测放入p0参数的数组中(无论如何都是可选的)。

对于您的功能,请尝试以下操作(我尚未对其进行测试,这台计算机上没有python):

def binding_model(xdata,Vcell,Ka,n,dH):
  Mt = xdata[0]
  Xt = xdata[1]
  return (n*Mt*dH*Vcell/2)*(1+(Xt/(Mt*n))+(1/(n*Ka*Mt)))-((1+(Xt/(n*Mt))+(1/(n*Ka*Mt)))**2-(4*Xt/(Mt*n))**.5)

#fitting molar enthalpy vs. molar ratio data with binding model

initial_Vcell = 0
initial_Ka = 0
initial_n = 0
initial_dH = 0

initial_paramaters=array([initial_Vcell, initial_Ka, initial_n, initial_dH])   
xdata = zip(Mt, Xt) 
parameters, cov = curve_fit(binding_model, xdata, ydata, p0=initial_paramaters)


Vcell=parameters[0]
Ka=parameters[1]
n=parameters[2]
dH=parameters[3]

Ffit=binding_model(xdata, Vcell, Ka, n, dH)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM