How to insert an if conditional in ode45?
Mostrar comentarios más antiguos
Hi, I'm trying to simulate a leaky integrate-and-fire model. I'm using Ode45, it all works well but I want to insert an If conditional so that when the y value is less than a specific value (-50), y must reset to the value -65. I have no idea about how to implement this. Any suggestions? Thanks a lot.
x0=-70;
t0=0;
dt=0.1;
tmax=2;
tvec=t0:dt:tmax;
[t,x]=ode45(@test_ode, tvec, x0)
plot (t,x)
function [dydt]=test_ode(t,y)
dydt=-1/10*y+13
end
Respuesta aceptada
Más respuestas (1)
Steven Lord
el 1 de Feb. de 2021
1 voto
Don't use a conditional. Use an events function to detect when the condition occurs, stop the ODE solver, use the result from the time of the event to create initial conditions for a new call to the solver, and call the ODE solver from the time of the event.
You should be able to use the ballode example as a model for your function, though instead of bouncing a ball off the floor at ground level you're "bouncing it off the floor" at -50.
2 comentarios
Simon Mwakitabu
el 6 de Dic. de 2022
Now imagine you have got a condition which depends on the variable itself. For example you have got a check valve equation, where it opens when P1(t)*Area-P2(t)*Area>k*x_o While solving lets say dP1dt=Q_check.... dP2dt=-Q_check....
Steven Lord
el 6 de Dic. de 2022
The events function in the ballode example detects when the height of the ball above the ground (which is the variable for which we're solving) crosses 0 (representing the ball hitting the ground.)
If you're having difficulty writing up an events function for your problem you could ask a new question (linking back here for reference) showing the code you've written to try to solve the problem as well as the mathematical form of the differential equations you're trying to solve and the posters on Answers may be able to give you some advice.
Categorías
Más información sobre Ordinary Differential Equations en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
