我有一些数据正在尝试与包含定积分方程的模型进行拟合。我的策略是使用optimize.leastsq和integrate.quad,我不断收到类型错误:“只有长度为1的数组可以转换为Python标量”
任何帮助将不胜感激。
这是我的代码的相关部分(请记住 self.vvals 和 self.bvals 是一维数组,self.L 是浮点数):
def NLFit(self):
'''fits data to the NL formula'''
L=self.L
def model(m0,m1,m2,B): #m0=So, m1=D, m2=NLtau
return scipy.integrate.quad(lambda t: -m0/(math.sqrt(4*math.pi*m1*t))*math.exp(- L**2/(4*m1*t))*math.exp(-t/m2)*math.cos(g*muB*B*t/h) , 0, 1e-9)
def residuals(p,y,x):
m0,m1,m2=p
err=y-model(m0,m1,m2,x)
return err
def peval(x,p):
return model(p[0],p[1],p[2],x)
#initial conditions
p0=[1,1,1]
#find fit
B=self.bvals
V=self.vvals
plsq=scipy.optimize.leastsq(residuals,p0,args=(V,B))
print plsq[0]