Я работаю над решением следующего ODE с PyMC3:
def production( y, t, p ):
return p[0]*getBeam( t ) - p[1]*y[0]
getBeam( t )
- это мой коэффициент, зависящий от времени. Эти коэффициенты задаются массивом данных, доступ к которым осуществляется по временному индексу следующим образом:
def getBeam( t ):
nBeam = I[int(t/10)]*pow( 10, -6 )/q_e
return nBeam
Я успешно реализовал это с помощью scipy.integrate.odeint
, но мне трудно сделать это с pymc3.ode
. На самом деле, используя следующее:
ode_model = DifferentialEquation(func=production, times=x, n_states=1, n_theta=3, t0=0)
with pm.Model() as model:
a = pm.Uniform( "S-Factor", lower=0.01, upper=100 )
ode_solution = ode_model(y0=[0], theta=[a, Yield, lambd])
Очевидно, я получаю ошибку TypeError: __trunc__ returned non-Integral (type TensorVariable)
, так как t
является TensorVariable
, поэтому его нельзя использовать для доступа к массиву, в котором хранятся коэффициенты.
Есть ли способ преодолеть эту трудность? Я думал об использовании theano.function
, но не могу заставить его работать, так как, к сожалению, коэффициенты не могут быть выражены какой-либо аналитической функцией: они просто хранятся внутри массива I
, индекс которого представляет временную переменную t
.
Спасибо
pow( 10, -6 )
непосредственно как1e-6
? - person Lutz Lehmann   schedule 21.04.2021