Conditionally execute a function inside a vector field while integrating with an ODE solver
1 view (last 30 days)
Show older comments
I am integrating some equations that represent an astrodynamics problem. They are defined by a vector field such as:
where
x
are the states (e.g. position, velocity, mass...). The dynamics that I'm integrating are fed by a control
u
, that is computed based on the states and time:
. This control
u
is computed inside the vector field, which we could explicitely state as
. I am integrating
with an ODE solver (e.g. ode45()), and thus the solver computes the control
at every time step.
Now,
我万t is to
avoid
computing the control
at every time step,
but rather only at certain times, with a given frequency (e.g. let's say I want to compute the control at 0.1 Hz, every 10s). How would you recommend me to approach this?
I hope I was clear enough. Thank you for any help.
0 Comments
Answers (1)
darova
on 5 Jun 2021
Try to pass your condition inside ode function
An example
functiondy = func1(t,x)
tset = [10 20 30];
ifany(abs(t-tset)>0.05)
u = x (1) * t - 1;
end
% dy function ...
end
functionmain
[t,y] = ode45(func1,tspan,x0);
plot(t,y)
end
2 Comments
darova
on 7 Jun 2021
- will execute the control if we are close to a pre-scribed epoch with a resolution of 0.05s.
You are right, my bad
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!