MATLAB Answers

Plotting elements from a function

44 views (last 30 days)
Hi all,
I'm trying to plot the position and velocity from a created function in twos different plots using subplot, the function solves a second order differential equation and I am getting the result in one plot, as I try to create two different graphics I got different errors or unexpected results, what could I do?
Here is part of my code:
yu = [x0 y0 z0 Vx0 Vy0 Vz0]; % Input y: position and velocity.
% Definition of time step 1
opts1 = odeset('InitialStep',5,'MaxStep',5); % Time step define : 5[s]
[t,y] = ode23(@yprime, t, yu, opts1);
subplot(2,1,1);
plot(t,y,'-'); % Trying to plot position result data here
subplot(2,1,2);
plot(t,y,'-'); % Trying to plot velocity result data here
function [yp] = yprime(t,y)
%Compute the derivative of y.
%Input y: position and velocity from previous tutorial.
%Output yp: derivative of y.
GM = (6.67408e-11)*(5.9722e24);
yp = zeros(6,1);
yp(1) = y(4); % x0 = Vx0
yp(2) = y(5); % y0 = Vy0
yp(3) = y(6); % z0 = Vz0
r = sqrt((y(1))^2+(y(2))^2+(y(3))^2); %
yp(4) = (-GM/(r)^3)*y(1); % Vx0 = Ax0
yp(5) = (-GM/(r)^3)*y(2); % Vy0 = Ay0
yp(6) = (-GM/(r)^3)*y(3); % Vz0 = Az0
end

  2 Comments

Prudhvi Peddagoni
Prudhvi Peddagoni on 22 Jan 2021
Hi,
Why are you plotting same variables t and y for both subplots? Is that a mistake or is there any reason behind it?
Hugo Hernández Hernández
Hi,
It was a misunderstanding by my side, I didn't understand at all how the function worked and also the use of the integer ode23 MATLAB structure, at the end I got the expected plot, here is how I solved my problem:
yu = [x0 y0 z0 Vx0 Vy0 Vz0]; % Input y: position and velocity.
% Definition of time step 1
% opts1 = odeset('InitialStep',5,'MaxStep',5); % if options is used, 5 [s] step
%[t,y] = ode23(@yprime, t, yu); % ode23 Matlab method computation
%[t,y] = ode45(@yprime, t, yu); % ode45 MATLAB method computation
[t,y] = ode113(@yprime, t, yu); % ode113 MATLAB method computation
Nu_x = y(:,1); % Nmx
Nu_y = y(:,2); % Nmy
Nu_z = y(:,3); % Nmz
Nu_vx = y(:,4); % Nmvx
Nu_vy = y(:,5); % Nmvy
Nu_vz = y(:,6); % Nmvz
% Differences between numerical and analythical solutions.
SZ1 = Nmx - Sen1;
SZ2 = Nmy - Sen2;
SZ3 = Nmz - Sen3;
SZ4 = Nmvx - VSen1;
SZ5 = Nmvy - VSen2;
SZ6 = Nmvz - VSen3;
figure();
subplot(2,1,1);
plot(t, SZ1,'Linewidth',1);
hold on
plot(t, SZ2,'Linewidth',1);
plot(t, SZ3,'Linewidth',1);
grid on
xlabel('time[s]');
ylabel('Difference in position [m]');
function [yp] = yprime(t,y)
%Compute the derivative of y.
%Input y: position and velocity from previous tutorial.
%Output yp: derivative of y.
GM = (6.67408e-11)*(5.9722e24);
yp = zeros(6,1);
yp(1) = y(4); % x0 = Vx0
yp(2) = y(5); % y0 = Vy0
yp(3) = y(6); % z0 = Vz0
r = sqrt((y(1))^2+(y(2))^2+(y(3))^2); %
yp(4) = (-GM/(r)^3)*y(1); % Vx0 = Ax0
yp(5) = (-GM/(r)^3)*y(2); % Vy0 = Ay0
yp(6) = (-GM/(r)^3)*y(3); % Vz0 = Az0
end

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!