Event-based ODE inside a handle class

2 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2020-9-18
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.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by