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