MATLAB: I keep getting the error “Undefined function or variable”. What is wrong with this ODE example

error

% SIR.m % % Imlements a SIR infection model % dS/dt = -beta SI % dI/dt = beta SI – delta I % dR/dt = delta I % % Inputs: % t – Time variable: not used here because our equation % is independent of time, or 'autonomous'. % x – Independent variable: this contains three % populations (S, I, and R) % Output: % dx – First derivative: the rate of change of the populations
function dx = SIR(t,x)
dx = [0;0;0];
beta = 0.0003;
delta = 1;
dx(1) = -beta * x(1) * x(2); dx(2) = beta * x(1) * x(2) – delta * x(2); dx(3) = delta *x(2);
options = odeset('RelTol', 1e-4, 'NonNegative', [1 2 3]);
[t,x] = ode('SIR', [0 10], [1000 1 0], options);
plot(t,x);
legend('S','I','R')

Best Answer

Perhaps the problem is
[t,x] = ode('SIR', [0 10], [1000 1 0], options);
plot(f,x);
% ^
Do you mean:
plot(t,x)
?
Or perhaps "ode" is unknown, because you mean "ode45"?
Do not use a string to provide the function to be integrated. It works, but is kept as backward compatibility to Matlab before v6.5 only. Prefer a function handle:
[t,x] = ode(@SIR, [0 10], [1000 1 0], options);
I assume the code you have posted consists of 2 parts, or do the call to "ode" (or what ever is meant) really occur inside the function to be integrated?
Another problem: There is a missing operator in
dx(1) = -beta x(1) * x(2);
% ^
Do you mean:
dx(1) = -beta * x(1) * x(2);