Conditionally execute a function inside a vector field while integrating with an ODE solver
    4 次查看(过去 30 天)
  
       显示 更早的评论
    
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. 
. 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, what I want 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?
 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 个评论
回答(1 个)
  darova
      
      
 2021-6-5
        Try to pass your condition inside ode function
An example
function dy = func1(t,x)
    tset = [10 20 30];
    if any(abs(t-tset)>0.05)
        u = x(1)*t-1;
    end
    % dy function ...
end
function main
    [t,y] = ode45(func1,tspan,x0);
    plot(t,y)
end
2 个评论
  darova
      
      
 2021-6-7
				- will execute the control if we are close to a pre-scribed epoch with a resolution of 0.05s.
 
You are right, my bad
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!