Program Listing for File amievent.m
↰ Return to documentation for file (matlab/@amievent/amievent.m
)
%
% @file amievent
% @brief definition of amievent class
%
classdef amievent
% AMIEVENT defines events which later on will be transformed into appropriate
% C code
properties ( GetAccess = 'public', SetAccess = 'private' )
% the trigger function activates the event on every zero crossing @type symbolic
trigger = sym.empty();
% the bolus function defines the change in states that is applied on every event occurence @type symbolic
bolus = sym.empty();
% output function for the event @type symbolic
z = sym.empty();
% flag indicating that a heaviside function is present, this helps
% to speed up symbolic computations
hflag = logical.empty();
end
methods
function AE = amievent(trigger,bolus,z)
% amievent constructs an amievent object from the provided input.
%
% Parameters:
% trigger: trigger function, the event will be triggered on
% at all roots of this function
% bolus: the bolus that will be added to all states on every
% occurence of the event
% z: the event output that will be reported on every occurence
% of the event
%
% Return values:
% AE: amievent object
%
if(~isa(trigger,'sym'))
if(isa(trigger,'double'))
AE.trigger = sym(trigger);
warning('Constant trigger function will never trigger. Please check the event definition.')
else
error('trigger function must be a symbolic expression')
end
else
AE.trigger = trigger;
end
if(numel(AE.trigger)>1)
error('The trigger function must be scalar.')
end
if(~isa(bolus,'sym'))
if(isa(bolus,'double'))
AE.bolus = sym(bolus(:));
else
error('bolus function must be a symbolic expression')
end
else
AE.bolus = bolus;
end
if(~isa(z,'sym'))
if(isa(z,'double'))
if(~isempty(z))
AE.z = sym(z);
warning('Constant outputs are not informative. Please check the event definition.')
else
AE.z = sym(zeros(0,1));
end
else
error('output function must be a symbolic expression')
end
else
AE.z = z;
end
end
this = setHflag(this,hflag);
end
end