Подгонка данных с интегральным уравнением в python
У меня есть некоторые данные, которые я пытаюсь согласовать с моделью, которая включает в себя и определенное интегральное уравнение. Моя стратегия состояла в том, чтобы использовать 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]
1 ответ
С помощью numpy
может помочь
Numpy Permet de "Vectoriser", то есть аппликации и функции, в целом / Matrice и éviter Les Boucles. Comme nous avons choisi d'utiliser Numpy à travers импортирует numpy как np, il faut choisir les fonctions usuelles définies dans Numpy
>>> from math import cos
>>> a=np.arange(4, dtype=float)
>>> a array([ 0., 1., 2., 3.])
>>> cos(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: only length-1 arrays can be converted to Python scalars
>>> np.cos(a) array([ 1. , 0.54030231, -0.41614684, -0.9899925 ])