How to insert an if conditional in ode45?
Ältere Kommentare anzeigen
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
Akzeptierte Antwort
Weitere Antworten (1)
Steven Lord
am 1 Feb. 2021
1 Stimme
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 Kommentare
Simon Mwakitabu
am 6 Dez. 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
am 6 Dez. 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.
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
