Use ode values without storing
Ältere Kommentare anzeigen
Hi, I have a system of ODEs that I can solve using ode23. To solve I do:
[t, S] = ode23(@odefunc,tSpan,S0)
and then what I am really interested in is a variable:
D(t) = 2*pi*(S(1)(t) + S(2)(t) + S(3)(t) + ...)
and then I plot D(t) vs t.
Doing it this way, however, I am forced to store all S(1)(t), all S(2)(t), etc. when I really only need their sum for each time. This takes a lot of memory since I have 280k*3 equations. How can I go about just calculating D at each step and saving that in an array to then plot D(t) vs t.
Akzeptierte Antwort
Weitere Antworten (1)
Jacob Ward
am 6 Sep. 2017
You could create a function that calls ode23, finds the sum of S, and then returns that sum. Something like this:
function [t,D] = odeSum()
...
[t, S] = ode23(@odefunc,tSpan,S0)
D(t) = 2*pi*(S(1)(t) + S(2)(t) + S(3)(t) + ...)
end
Since the function throws away any variables that aren't output variables, you wouldn't be saving all the useless S data and would be left with only D when you come out of the function.
3 Kommentare
olabaz
am 6 Sep. 2017
Jacob Ward
am 6 Sep. 2017
I see. Well, I could be wrong, but I think in order to do what you are saying you'd have to go in and change the ode23 code itself so that it only outputs what you want. Maybe someone else will have a better suggestion.
Stephen23
am 7 Sep. 2017
"...you'd have to go in and change the ode23 code itself..."
Not required at all. See my answer.
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!