# Printing all outputs of the function that has been solved via ode45

5 visualizzazioni (ultimi 30 giorni)
Niccolo Carioli il 26 Mar 2024
Commentato: Niccolo Carioli il 26 Mar 2024
I have defined a function to be solved using ode45. The function is called endoFlightDeriv
function [deriv, m, h] = endoFlightDeriv(t, X, E, L,phaseCode)
Then I solve it using ode45
[time_vert,sol_vert]=ode45(@(t,x)endoFlightDeriv(t,x,E,L,PhaseCode),tspan,x0,options)
My question is, how can I output the values of m and h at each integration step?
This is the first question that I ever post, so I apologize in advance if this is not clearly stated. Obviously I can further explain my problem.
##### 4 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Sam Chak il 26 Mar 2024
No worries. I believe your specific technical issue in MATLAB has been resolved and closed. However, it's worth noting that there are at least six approaches available to achieve this, depending on the complexity of the output functions involved.
Niccolo Carioli il 26 Mar 2024
Your statement is indeed correct. This is a code for the simulation of the endoatmospheric trajectory of a launcher. However this is not written in a state space notation, the function simply defines the vectorial equation of motion to be solved. The mass is a scalar and its change it's computed using the flow rate and the time

Accedi per commentare.

### Risposta accettata

Stephen23 il 26 Mar 2024
Spostato: Steven Lord il 26 Mar 2024
This questions gets asked regularly on this forum: users often imagine that there must be some easy way to get some values out of the function when it is being solved by ODE45 (or whatever solver they are using). In practice it is not that simple: ODE solvers may take arbitrarily small steps or even steps backwards... it is not a trivial task to figure out which function calls produce data which correspond to the values returned by the ODE solver... in fact this task is quite difficult.
Thus in most cases it is much simpler to just call the function after the ODE solver has finished, using the values obtained by the ODE solver. A simple loop and calling the function usually is sufficient.
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Niccolo Carioli il 26 Mar 2024
That make sense, thank you!

Accedi per commentare.

### Più risposte (1)

Torsten il 26 Mar 2024
Assuming m and h are scalars, use
[time_vert,sol_vert]=ode45(@(t,x)endoFlightDeriv(t,x,E,L,PhaseCode),tspan,x0,options)
for i = 1:numel(time_vert)
[~, m(i), h(i)] = endoFlightDeriv(time_vert(i), sol_vert(i,:), E, L,phaseCode)
end
If not, change the loop appropriately.
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Niccolo Carioli il 26 Mar 2024
Perfect!

Accedi per commentare.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by