concatenate multiple 'OutputFcn' options in odeset?
1 view (last 30 days)
Show older comments
feynman feynman
on 29 Feb 2024
Commented: feynman feynman
on 1 Mar 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 Comments
Accepted Answer
Stephen23
on 29 Feb 2024
Edited: Stephen23
on 1 Mar 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 Comments
Stephen23
on 1 Mar 2024
Edited: Stephen23
on 1 Mar 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.
More Answers (0)
See Also
Categories
Find more on Ordinary Differential Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!