Solving ode with external time-varing parameters

Hello everyone,

I’m relatively new to Python and am currently working on building a SEIR model using the DifferentialEquation module from pymc3.ode. However, I’m facing some challenges, particularly with parameters in my model that vary over time, such as vaccine coverage and birth rate. Typically, in an ODE defined as ode(t, y, p), I could access values using t, like data[t, "vac_coverage"]. But with pymc3.ode, it appears that t is a Theano tensor variable and can’t be used as an index directly. Could anyone advise on how to incorporate external parameters and index them effectively in this context?

Thank you very much for your assistance!

Here is my failed attempt…

S, E, I, R, V, S2, E2, I2, R2, inci, inci1, inci2 = [state_matrix[i, :]for i in range(12)]
    t = tt.cast(t//52, 'int32')
    row = theano.function([t], data_shared[t])
    vac_coverage = theano.function([t], row[4])/100
    birth_rate = theano.function([t], row[3])/1000
    age_migration_rates = theano.function([t], row[5:10])/52
    vac_eff = theano.function([t], row[10])

    N = np.sum(state_matrix[:, :9], axis=0)

    Birth = np.sum(N) * birth_rate / 52

    lambda_ = (waifw[0].dot(I) + waifw[0].dot(I2))/N

    dS = (-lambda_ * S + S).dot(aging_matrix(age_migration_rates)) - S 

I encountered a similar problem to yours, have you solved it?