concatenate multiple 'OutputFcn' options in odeset?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
feynman feynman
am 29 Feb. 2024
Kommentiert: feynman feynman
am 1 Mär. 2024
Is there a way to output both odeplot+odephas2 after modifying the following?
options=odeset('OutputFcn',@odeplot,'OutputFcn',@odephas2);
[t,u]=ode23(@ode,[0;t],[u0;v0],options);
0 Kommentare
Akzeptierte Antwort
Stephen23
am 29 Feb. 2024
Bearbeitet: Stephen23
am 1 Mär. 2024
Define a wrapper function to call whatever functions you want.
Note that the wrapper function itself will need to fulfill the requirements given under "Output Function" here:
Something like this:
function myfun
f1 = figure();
f2 = figure();
options = odeset('OutputFcn',@mywrapper);
[T,u] = ode23(@ode,[0;1],[0;1],options)
%%
function dudt = ode(t,u)
dudt=[u(2);-u(1)];
end
function status = mywrapper(varargin)
figure(f1);
s1 = odeplot(varargin{:});
figure(f2);
s2 = odephas2(varargin{:});
status = or(s1,s2);
end
end
Hopefully ODEPLOT et al are robustly written such that they can be called at the same time, i.e. have no assumptions on what the current figure/axes are. You will have to check that yourself.
EDIT: both of those plot functions call GCF, so I added the FIGURE() calls and tested it.
7 Kommentare
Stephen23
am 1 Mär. 2024
Bearbeitet: Stephen23
am 1 Mär. 2024
Unfortunately both of those functions use GCF, which is the cause of that error. This is why I advised you to check for any assumptions they make about the current figure/axes.
The solution is to explicitly define the two figures ourselves, before calling the plotting functions, e.g.:
function myfun
f1 = figure();
f2 = figure();
options = odeset('OutputFcn',@mywrapper);
[T,u] = ode23(@ode,[0;1],[0;1],options)
%%
function dudt = ode(t,u)
dudt=[u(2);-u(1)];
end
function status = mywrapper(varargin)
figure(f1);
s1 = odeplot(varargin{:});
figure(f2);
s2 = odephas2(varargin{:});
status = or(s1,s2);
end
end
I modified my answer to include this change.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!