How to plot a phase portrait using Runge-Kutta for a system of ODEs?

36 views (last 30 days)
Hello, I would like to plot a phase portrait for the following system of ODEs:
y'=z
z'=y(1-y^2)
I want to do this manually, without using ode45 or some other built in solver, so I'm trying to build out a Runge-Kutta solver that I can use to make the phase portrait. I did this problem by hand, and the plot I am getting from my code does not match the expected answer. Can anyone point me towards where I have gone wrong? Here is my code for the RK solver:
% input arguments: y',z', c (vector of initial values), t (linspace vector
% equally spaced points on [a,b])
n = length(t)-1; m = length(c); dt = t(2)-t(1);
w = zeros(m,n+1); w(:,1) = c;
for i = 1:n
k1 = dt*(w(:,i));
k2 = dt*(w(:,i)+(k1/2));
k3 = dt*(w(:,i)+(k2/2));
k4 = dt*(w(:,i)+k3);
k = (k1+(2*k2)+(2*k3)+k4)/6;
w(:,i+1) = w(:,i) + k;
end
And for the phase portrait:
f = @(y,z) [z,y*(1-y^2)];
t = linspace(0,10,50);
hold on
for y0 = -5:1:5
for z0 = -5:1:5
c = [y0,z0]; % initial conditions
w = RK_solver(f,c,t);
y = w(1,:);
z = w(2,:);
plot(y,z)
axis([-5 5 -5 5]);
end
end
This is the picture I get, but there shoud be two centers and one saddle if I'm not mistaken- I don't know why this is all linear.
I am a bit rusty on differential equations. Any help is appreciated.

Accepted Answer

Sam Chak
Sam Chak on 24 Mar 2024
Edited: Sam Chak on 24 Mar 2024
Are you expecting the followng Phase Portraits?
odefcn = @(t, y) [y(2); % y' = z
y(1)*(1 - y(1)^2)]; % z' = y·(1 - y²)
tspan = [0, 10];
y0 = -0.6:0.15:0.6;
z0 = y0;
for i = 1:numel(y0)
for j = 1:numel(z0)
[t, y] = ode45(odefcn, tspan, [y0(i); z0(j)]);
plot(y(:,1), y(:,2)), hold on
end
end
grid on, axis([-1.6 1.6 -1.6 1.6])
xlabel('y'), ylabel('z'), title('Phase Portraits')
  5 Comments
Sam Chak
Sam Chak on 24 Mar 2024
You're welcome, @Iris 👍. I'm just curious, is this particular topic part of a math course that focuses on solving differential Equations, or is it a more general MATLAB course that deals with various computational problems?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!