Я пытаюсь построить модель в pymc3, которая требует, чтобы я интегрировал функцию случайных величин. Основная идея с использованием фактических чисел заключается в следующем:
from scipy.integrate import quad
def PowerLaw(x,N0,alpha):
""" A PowerLaw distribution"""
return N0 * x**-alpha
print quad(PowerLaw,0.1,10,args=(1e-4,2)) #(0.0009900000000000002, 3.008094474110274e-12)
Я также могу сделать это в theano:
from theano import function,tensor as tt
xt = tt.dscalar('x')
N0 = tt.dscalar('N0')
alpha = tt.dscalar('alpha')
y = PowerLaw(xt,N0,alpha)
func = function([xt,N0,alpha],y)
print quad(func,0.1,10,args=(1e-4,2)) #Same answer as before
Вот пример того, что я хочу сделать:
with pm.Model() as myModel:
N0 = pm.Uniform("N0",1e-5,1e-1)
alpha = pm.Uniform("alpha",1,5)
yval = quad(PowerLaw,0.1,10,args=(N0,alpha))
Но, конечно, когда я пытаюсь это сделать, я получаю TypeError, потому что N0 и alpha не являются числами с плавающей точкой. Конечно, в этом простом случае я знаю аналитическое решение интеграла; моя фактическая модель требует более сложных интегралов, где я не знаю закрытой формы. Есть ли способ сделать это в pymc3?