Plotting four plots when only two plot

조회 수: 11 (최근 30일)
Areg Arzoomanian
Areg Arzoomanian 2020년 9월 3일
답변: Asad (Mehrzad) Khoddam 2020년 9월 3일
This is my code. Im expecting to get 4 graphs but it only plots 2 at a time! how can i fix this?
Thank you
clear all
close all
clc
mu = 398600;
minutes = 60; %Conversion from minutes to seconds
x0 = [10000; 0; 0];
v0 = [0; -5.8; 0];
Y0 = [x0; v0];
t0 = 0;
tf = 1440*minutes;
options = odeset('RelTol', 1e-8, 'AbsTol', 1e-8) ;
[t,Y] = ode45(@twobodyEOM, [t0 tf], Y0, options, mu);
plotit(t, Y, minutes)
x=Y(:,1);
y=Y(:,2);
plot(x,y);
title('2D Trajectory')
xlabel('x position, km')
ylabel('y position, km')
grid on
grid minor
R = sqrt(Y(:,1).^2 + Y(:,2).^2 + Y(:,3).^2);
V = sqrt(Y(:,4).^2 + Y(:,5).^2 + Y(:,6).^2);
e=((V.^2)/2)-mu./R;
plot(t,e)
title('Specific Energy vs. Time')
xlabel('Time')
ylabel('Specific Energy')
grid on
grid minor
% ~~~~~~~~~~~~~~~~~~~~~~~~
function dYdt = twobodyEOM(t,Y,mu)
rvec = Y(1:3);
vvec = Y(4:6);
r = sqrt(rvec(1)^2+rvec(2)^2+rvec(3)^2);
rdotvec = vvec ;
vdotvec = -mu/r^3*rvec ;
dYdt = [rdotvec; vdotvec];
end
% ~~~~~~~~~~~~~~~~~~~~~~~~
function dYdt = rates(t,Y,mu)
x = Y(1);
Dx = Y(2); % v
D2x = -mu/x^2; % vdot
dYdt = [Dx; D2x];
end %rates
function plotit(t, Y, minutes)
% ~~~~~~~~~~~~~
%...Position vs time:
subplot(2,1,1)
plot(t/minutes,Y(:,1), '-ok')
xlabel('time, minutes')
ylabel('position, km')
grid on
axis([-inf inf 5000 15000])
%...Velocity versus time:
subplot(2,1,2)
plot(t/minutes,Y(:,2), '-ok')
xlabel('time, minutes')
ylabel('velocity, km/s')
grid on
axis([-inf inf -10 10])
end %plotit

채택된 답변

Star Strider
Star Strider 2020년 9월 3일
Add figure calls to create new figure windows, otherwise the plots will occur on existing figure windows, and over-write the previous plots:
mu = 398600;
minutes = 60; %Conversion from minutes to seconds
x0 = [10000; 0; 0];
v0 = [0; -5.8; 0];
Y0 = [x0; v0];
t0 = 0;
tf = 1440*minutes;
options = odeset('RelTol', 1e-8, 'AbsTol', 1e-8) ;
[t,Y] = ode45(@twobodyEOM, [t0 tf], Y0, options, mu);
figure % <— ADD
plotit(t, Y, minutes)
x=Y(:,1);
y=Y(:,2);
figure % <— ADD
plot(x,y);
title('2D Trajectory')
xlabel('x position, km')
ylabel('y position, km')
grid on
grid minor
axis('equal') % <— ADD (Optional)
R = sqrt(Y(:,1).^2 + Y(:,2).^2 + Y(:,3).^2);
V = sqrt(Y(:,4).^2 + Y(:,5).^2 + Y(:,6).^2);
e=((V.^2)/2)-mu./R;
figure % <— ADD
plot(t,e)
title('Specific Energy vs. Time')
xlabel('Time')
ylabel('Specific Energy')
grid on
grid minor
There is no reason to quote the functions here, so I do not. They are not changed, regardless.

추가 답변 (1개)

Asad (Mehrzad) Khoddam
Asad (Mehrzad) Khoddam 2020년 9월 3일
The subplot command is subplot(2,1,1) which means 2 rows and one column. If you need 4 graphs at the same time you should use subplot(2,2,1),subplot(2,2,2), subplot(2,2,3), and subplot(2,2,4).
If you want two graph over each other, after the first plot use this command:
hold on;

카테고리

Help CenterFile Exchange에서 Title에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by