Интегрируем функцию случайных величин в pymc3 - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь построить модель в 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?

...