Event-based ODE inside a handle class
2 views (last 30 days)
Show older comments
Jason Smith
on 18 Sep 2020
Commented: Jason Smith
on 21 Sep 2020
Greetings. I'm trying to find a way to use event-based ode insidea class as the code below:
The equation is more omplex and I'm using this instance for simplicity, the error I get is the same
classdef ODEevent < handle
properties
tstart = 0;
tend = 5;
end
methods
function odeObj = ODEevent()
% Instance of the class
end
function [value, isterminal, direction] = odeEvent(this, x)
x_des = x;
value = x_des - 1;
isterminal = 1;
direction = 0;
end
function solveODE(this)
tspan = [this.tstart this.tend];
x0 = 0;
odeOpts = odeset('Events', @this.odeEvent);
[t, x] = ode45(@(t,x) 2*t, tspan, x0, odeOpts);
end
end
end
The error I'm getting is:
Error using ODEevent/odeEvent
Too many input arguments.
Error in ODEevent>@(varargin)this.odeEvent(varargin{:}) (line 22)
odeOpts = odeset('Events', @this.odeEvent);
Error in odeevents (line 28)
eventValue = feval(eventFcn,t0,y0,eventArgs{:});
Error in ode45 (line 148)
odeevents(FcnHandlesUsed,odeFcn,t0,y0,options,varargin);
Error in ODEevent/solveODE (line 23)
[t, x] = ode45(@(t,x) 2*t, tspan, x0, odeOpts);
Thanks in advane
Regards
0 Comments
Accepted Answer
Walter Roberson
on 18 Sep 2020
You need a static method. ode event functions are not expecting the object to be passed. They are, however, expecting t to be passed as the first parameter.
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!