How to delete last value in the plot?
36 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
BioZ
am 12 Okt. 2021
Kommentiert: BioZ
am 12 Okt. 2021
Hi all, just a quick question I have the following code, which plots the trajectory of the aircraft, I have added a 0.15s pause at the end of the for loop for animation sake. My problem is that when the "Animation is running it plots the last value as 0 which means there is always a line going to the initial condition (Starting point) any idea how to fix it?" Any help would be much appreciated.
clc; clear all; close all
%Aircraft parameters
g=9.80665;
m=41000;
W = m*g;
Cd0 = 0.02
S=120%m^2
b=34 %m
AR=b^2/S
ef=0.82; % Efficiency Factor
K=0.03 % combined induced drag factor, = 𝑘 ∕ (𝜋 𝐴𝑅)
Ta = 110000; %Thrust Available
Tp=0.7; %Thrust Percentage
Tu=Ta*Tp; % (Thrust Used)
Cl=sqrt((pi()/3)*ef*AR*Cd0);
Cd = K+Cd0*Cl^2
%Cd=Cd0+((Cl^2)/(pi()*ef*AR));
tf = 60; %Final time
dt = 1; %Time step
t = 0:dt:tf;
V0 = 40; %Initial Velocity
X0 = 0; %Initial Displacement
h0 = 0; %Initial Height
gamma0 = 0.0872665 % 5deg initial climb.
%Pre-Fill with zeros in order to avoid buildup in the loop.
V = zeros(1,length(t))
V(1) = V0; % Initial velocity in dt frame
X = zeros(1,length(t))
X(1) = X0; % Initial X displacement in dt frame
h = zeros(1,length(t));
h(1) = h0; %Initial h displacement in dt frame
gamma = zeros(1,length(t));
gamma(1) = gamma0; %Initial gamma in dt frame
for n=2:length(t)
rho = (20-h(n-1)/1000)/(20+h(n-1)/1000)*1.225;
D = Cd*S*0.5*rho*V(n-1)^2;
V(n) = V(n-1)+((Tu-D-W*sin(gamma(n-1)))/m)*dt;
ROC = ((Tu*V(n)-D*V(n))/W);
gamma(n)= gamma(n-1)+asin(ROC/V(n));
X(n) = X(n-1)+V(n)*dt*cos(gamma(n));
h(n) = h(n-1)+V(n)*dt*sin(gamma(n));
pause(0.15)
plot(X,h);
end
%% equation checks
rhotest= (20-h(61)/1000)/(20+h(61)/1000)*1.225;
tst2=((Tu-D-W*sin(gamma(61)))/m)*dt;
%V(n) = V(n-1)+(1/m)*(Ta-D-W*sin(gamma(n-1)));
tst=(1/m)*(Tu-D-W*sin(gamma(1)));
%% Plots
plot(X,h);
xlabel('Distance (m)')
ylabel('Altitude(m)')
figure;
plot(gamma,t);
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 12 Okt. 2021
X = zeros(1,length(t))
X(1) = X0; % Initial X displacement in dt frame
h = zeros(1,length(t));
You are pre-allocating X and h to maximum length. You loop writing more and more values into them, and at each step you
plot(X,h);
but that asks to plot all of X against all of h -- including plotting the still-zero parts that you have not written into yet.
You should instead only plot up to point n
plot(X(1:n), h(1:n))
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Object Containers finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!