why am I getting this error?

%the error
Not enough input arguments.
Error in Exam2>odefun (line 92)
f=[0 ; (2*f0-f0.*heaviside(t,t1)-2*f0.*heaviside(t,t2))];
Error in Exam2 (line 65)
[t,x]=ode45(odefun,tspan,IC);
%my ode45 call
IC=[x0 v0];
tspan=0:dt:tf;
[t,x]=ode45(odefun,tspan,IC);
%my function
function xdot=odefun(t,x)
global f0 wn t1 t2
A=[0 1 ; -wn^2 0];
f=[0 ; (2*f0-f0.*heaviside(t,t1)-2*f0.*heaviside(t,t2))];
xdot=A*x+f;
end

 Accepted Answer

[t,x]=ode45(odefun,tspan,IC);
This attempts to call your odefun function with 0 input arguments and use the function handle it returns as the first input argument to ode45. If you want the first input argument to ode45 to be a function handle to odefun (you want ode45 to use odefun to evaluate the right-hand side of your system of ODEs), you need to add one character.
[t,x]=ode45(@odefun,tspan,IC);

More Answers (1)

Cris LaPierre
Cris LaPierre on 6 Nov 2020
Have you created your own heaviside function? The one created by MathWorks only accepts a single input. The one you are using has 2, and apparently expects more.

Products

Community Treasure Hunt

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

Start Hunting!