MATLAB: Is the time vector t for the function odefun() inside ode45() always required

ode45time vector t

Hi
I am new to using ode45 in Matlab and there is a question that popped up.
When I call the odefun function, which is called "ODE_SEIR" in my case (see below), I was wondering why it is necessary to specify the time vector "timevec" even if ODE_SEIR does not use it? I tried removing timevec in the place marked bold below but for some reason the script doesn't run then and I get the following output:
error code
Index exceeds the number of array elements (1).
Error in ODE_SEIR (line 11)
E = initial(2);
Error in SEIR>@(value_initial,param)ODE_SEIR(value_initial,param)
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in SEIR (line 52)
[timevec, sol] = ode45(@(value_initial, param)...
It looks like ode45 interprets the parameter value_initial (called "initial" inside the ODE_SEIR function) as the time vector timevec. I assume that the time vector just always has to be added as a parameter but I am not sure. Thanks a lot for your help!
main script
% Integrieren des Systems (Differentialgleichungen) von t0 bis tend (= timevec)
% und den jeweiligen Anfangsbedingungen.
[timevec, sol] = ode45(@(timevec, value_initial, param)...
ODE_SEIR(timevec, value_initial, param),tspan, value_initial);
function ODE_SEIR
function deriv = ODE_SEIR(~, initial, param)
% Herauslesen der Anfangsbedingungen für die ODEs
S = initial(1);
E = initial(2);
I = initial(3);
R = initial(4);
% Berechnung der ODEs
dS = -param.beta*I*S/param.population;
dE = param.beta*I*S/param.population-param.alpha*E;
dI = param.alpha*E-param.gamma*I;
dR = param.gamma*I;
deriv = [dS; dE; dI; dR];
end

Best Answer

From the documentation page for the ode45 function "The function dydt = odefun(t,y), for a scalar t and a column vector y, must return a column vector dydt of data type single or double that corresponds to f(t,y). odefun must accept both input arguments, t and y, even if one of the arguments is not used in the function."
Related Question