I am trying to learn how to use MATLAB to solve a system of differential equations (Lorenz equations) and plot each solution as a function of t
X’ = −σx + σy
Y’ = ρx − y − xz
Z’ = −βz + xy
where σ = 10, β = 8/3, and ρ = 28, as well as x(0) = −8, y(0) = 8, and z(0) = 27.
Here is the code that I am using:
function xprime = example(t,x)
sig = 10;
beta = 8/3;
rho = 28;
xprime = [-sig*x(1) + sig*x(2);
rho*x(1) - x(2) - x(1)*x(3);
-beta*x(3) + x(1)*x(2)];
x0 = [-8 8 27];
tspan = [0 20];
[t,x] = ode45(@example, tspan, x0);
figure
plot(t,x(:,1)), hold on
plot(t,x(:,2)), hold on
plot(t,x(:,3)), hold off
However, this generates an error, how do I fix this? I am not sure what input arguments are missing or where I am going wrong. I appreciate any help, thanks.
Not enough input arguments.
Error in example (line 9) xprime=[-sigx(1) + sigx(2); rho*x(1) - x(2) - x(1)x(3); -betax(3) +
x(1)*x(2)];
That is actually a pretty good first try!
The problem is that when you press the Run button (or press F5), you're calling the function
examplewith no arguments; which is what MATLAB is complaining about.A second problem is that, even if you were to be able to run the function like this,
ode45would call the functionexample, which would callode45, which would callexample, which would callode45and so on, until the recursion limit is reached.The solution to both is to split it up in two functions (these may be written into the same M-file):