MATLAB: Not enough input arguments

initial conditionsinput argumentsodeode45

Hi everyone, I'm trying to solve a system of 3 ODEs with intial conditions using ode45. I'm getting the error message of "Not enough input arguments". I've tried looking up what that means, but I'm still confused. If anyone could help me out with this, that would be great!
function dx=sae(t,x)
x(1) = x;
x(2)=y;
x(3) = z;
dx=zeros(3,1);
dx(1)=10*(x(2)-x(1));
dx(2)=(28*x(1))-x(2)-(x(1)*x(3));
dx(3)=(x(1)*x(2))-((8/3)*x(3));
[T,X]=ode45(@sae,[0 20],[0 1 0]);
plot(T,X(:,1),T,X(:,2),T,X(:,3))
legend('x','y','z')
end

Best Answer

First, save your ‘sae’ function in its own function .m-file called sae.m.
Second, be sure the ode45 call is not within the ODE function, as it seems to be in the code you posted. That creates recursion problems.
Third, comment-out the references to the elements of ‘x’ in ‘sae’. Keep them for information, but be sure they don’t execute.
In sae.m:
function dx=sae(t,x)
% x(1) = x;
% x(2) = y;
% x(3) = z;
dx=zeros(3,1);
dx(1)=10*(x(2)-x(1));
dx(2)=(28*x(1))-x(2)-(x(1)*x(3));
dx(3)=(x(1)*x(2))-((8/3)*x(3));
end
In your script file:
[T,X]=ode45(@sae,[0 20],[0 1 0]);
plot(T,X(:,1),T,X(:,2),T,X(:,3))
legend('x','y','z')
This works, and produces an interesting plot.