I have troubles to understand how to use Manipulate and ParametricNDSolve to have modulable parameters inside my models. I checked numerous questions on this forum and couldn't find one that satisfies my needs (or, more likely, I didn't understand what to do):
- parametricNDSolve for solving differential equation
- Use ParametricNDSolve with Plotting
- Manipulating a Differential equation
In these examples, the parameters are defined in an equation that isn't a differential one. I don't know if it changes anything in my case but its seems to be at the origin of my problem.
Anyway, here is what I did:
First of all, I've got this model and these constants:
dEc = p1*Ec[t]*(1 - (Ec[t]/Emax)) - d1*Ec[t] - i1*Ic[t]*Ec[t] - r*Vu[t]*Ec[t]; dIc = i1*Ic[t]*Ec[t] + r*Vu[t]*Ec[t] - u1*Ic[t]; dVp = is[t]*b1*u1*Ic[t] - c1*Vp[t]; dUc = p2*Uc[t]*(1 - (Uc[t]/Umax)) - d2*Uc[t] - i2*Yc[t]*Uc[t] - e*Vp[t]*Uc[t]; dYc = i2*Yc[t]*Uc[t] + e*Vp[t]*Uc[t] - u2*Yc[t]; dVu = is[t]*b2*u2*Yc[t] - c2*Vu[t] + s*Vp[t]; parameters = {Emax -> 10000, Umax -> 10000000, p1 -> 0.6, d1 -> 0.003, d2 -> 0.006, u1 -> 0.33, u2 -> 0.33, c1 -> 10, c2 -> 1, b1 -> 6000, b2 -> 6000, i1 -> 0.0000002, i2 -> 0.0000001, e -> 0.000000001, r -> 0.0000001}; Please note that the parameters p2 and sare not defined in the parameters list. It's because that's the ones I want to modify using Manipulate! These parameters are found in equations dUc and dVu
Then, I do a ParametricNDSolve on these equations:
dynamicsmodels = ParametricNDSolve[ Evaluate[{ Ec'[t] == dEc , Ic'[t] == dIc , Vp'[t] == dVp , Uc'[t] == dUc , Yc'[t] == dYc , Vu'[t] == dVu , Ec[0] == 10000, Ic[0] == 0, Vp[0] == 10, Uc[0] == 10000000, Yc[0] == 0, Vu[0] == 0, is[0] == 0.0005, WhenEvent[t == 200, is[t] -> 0.0001] } /. parameters], {Ec[t], Ic[t], Vp[t], Uc[t], Yc[t], Vu[t]}, {t, 0, 300}, {p2, s}, DiscreteVariables -> {is}[[1]]] Please note that is[t] is a variable that evolves in the model following time (see my previous question: Having trouble using WhenEvent with NDSolve).
Then, I do a Manipulate:
Manipulate[ Plot[ Evaluate[ { Ec[p2, s][t], Ic[p2, s][t], Vp[p2, s][t], Uc[p2, s][t], Yc[p2, s][t], Vu[p2, s][t] } /. dynamicsmodels ], {t, 0, 300}, PlotRange -> {{0, 300}, {0, 10000}}, PlotStyle -> {Black, Red, Green, Blue, Purple, Orange}, PlotLegends -> {"Ec", "Ic", "Vp", "Uc", "Yc", "Vu"}], {p2, 1.2, 1.5, Appearance -> "Labeled"}, {s , 1, 100, Appearance -> "Labeled"} ] I don't have any error, but no lines either... Am I doing something wrong?
Thanks!

