First of all, this is my first time on this forum. Please be patient with me because if I make some mistakes in this post. I'm not used to doing this!
I'm trying to modify a parameter during NDSolve iterations. I tried to follow advice given in the following exchanges:
- How to change a parameter dynamically inside NDSolve
- How to input a dynamically changing parameter in NDSolve?
But none of it seems to fit my problem. Perhaps I'm doing something wrong.
Here is my problem:
I'm currently trying to create a model with the following differential equations:
dEc = p1*Ec[t]*(1 - (Ec[t]/Emax)) - d1*Ec[t] - i1*Ic[t]*Ec[t]; dIc = i1*Ic[t]*Ec[t] - u1*Ic[t]; dVp = ist*b1*u1*Ic[t] - c1*Vp[t]; The parameters are defined as following:
parameters = {Emax -> 10000, p1 -> 0.6, d1 -> 0.003, u1 -> 0.33, c1 -> 10, b1 -> 6000, i1 -> 0.0000002, ist -> 0.0001}; Then, I'm doing the following NDSolve:
dynamicsmodel = NDSolve[ Evaluate[ {Ec'[t] == dEc, Ic'[t] == dIc, Vp'[t] == dVp, Ec[0] == 10000, Ic[0] == 0, Vp[0] == 10}] /. parameters, {Ec[t], Ic[t], Vp[t]}, {t, 0, 300}] It seems to work perfectly. But I would like to add an event listener that would change the ist parameter when t >= 200. To do so, I tried with the following code:
dynamicsmodel = NDSolve[ Evaluate[ {Ec'[t] == dEc, Ic'[t] == dIc, Vp'[t] == dVp, Ec[0] == 10000, Ic[0] == 0, Vp[0] == 10}] /. parameters, WhenEvent[t >= 200, parameters[[8]] = ist -> 0.01], {Ec[t], Ic[t], Vp[t]}, {t, 0, 300}] But it doesn't seem to work! I get the following error:
To avoid possible ambiguity, the arguments of the dependent variable in
WhenEvent[t >= 200, parameters[[8]] = ist -> 0.01]should literally match the independent variables."
I may have misplaced the WhenEvent. I tried to put it inside of the Evaluate expression, but that produces errors.
Please note that I simplified the code to make it more readable. I hope I didn't introduce errors.
