Why do I get the error saying I did not assign values to a call? I did assign my values after getting them from a function though? Anyone able to help me out and explain?

5 views (last 30 days)
I got the script as attached below. I did assign T P rho and speedsound after getting it from the loop but I am getting the error:
Output argument "P" (and maybe others) not assigned during call to "atmosplots>atmos".
Error in atmosplots (line 14)
[T, P, rho, speedsound] = atmos(h)
%% Atmos function to plot the graphs of T P rho and speedsound for every altitude in ISA Atmosphere
% Calculating T, p ,rho and speedsound for every altitude in the ISA atmosphere
% ------ Range of Altitude ------ %
hlist = linspace(0,20000,2000)
% ------ Array for storing ------ %
% 1: Altitude 2. Temperature 3. Pressure 4. Density 5. Speedsound
plotting_table = zeros(length(hlist),5);
for i=1:length(hlist)
h = hlist(i);
[T, P, rho, speedsound] = atmos(h)
plotting_table(i,1) = hlist(i)
plotting_table(i,2) = T
plotting_table(i,3) = P
plotting_table(i,4) = rho
plotting_table(i,5) = speedsound
end
% ------ Plotting graph (X vs Y)------ %
figure % Plot for whole range of altitude
subplot(2,2,1) % T vs Altitude
plot(plotting_table(:,2), hlist)
title('Temperature variation with altitude')
xlabel('Temperature [K]')
ylabel('Altitude [m]')
grid on
hold on
subplot(2,2,2) % P vs Altitude
plot(plotting_table(:,3), hlist)
title('Pressure variation with altitude')
xlabel('Pressure [Pa]')
ylabel('Altitude [m]')
grid on
hold on
subplot(2,2,3) % Rho vs Altitude
plot(plotting_table(:,4), hlist)
title('Density variation with altitude')
xlabel('Density [kg/m^3]')
ylabel('Altitude [m]')
grid on
hold on
subplot(2,2,4) % Speedsound vs Altitude
plot(plotting_table(:,5), hlist)
title('Speed of sound variation with altitude')
xlabel('Velocity [m/s]')
ylabel('Altitude [m]')
grid on
%% ------ Atmos function ------ %%
% Altitude in m
% T in kelvins
% P in pascals
% rho in kg/m^3
% Speedsound in m/s
function [T, P, rho, speedsound] = atmos(h)
h1 = 11000; % Height of tropopause
h2 = 20000; % End height of table
g = 9.81;
R = 287;
c = 6.51e-3; % temperature lapse dt/dh = - c = -6.51 degcelcius/km
T0 = 15+273.15; % Temperature sea level
p0 = 101325; % pressure sealevel
rho0 = 101325/R/T0; % density sealevel = pressure / R*T, R=287, T = 15 degcelcius
T1 = T0 - c*h1; % Temperature at 11km
p1 = p0 * (T1/T0)^5.2506; % Pressure at 11km
rho1 = rho0 * (T1/T0)^4.2506; % Density at 11km
T2 = T1; % Temperature at 20km
p2 = p1 * exp(-g/(R*T2)*(h2-h1)); % Pressure at 20km
rho2 = rho1 * exp(-g/(R*T2)*(h2-h1)); % Density at 20km
if h <= h1
% disp('Troposphere');
T = T0 - c*h;
p = p0 * (T/T0)^5.2506;
rho = rho0 * (T/T0)^4.2506;
speedsound = (1.4*R*T)^0.5;
elseif h <= h2
% disp('Tropopause');
T = T1;
p = p1 * exp(-g/(R*T)*(h-h1));
rho = rho1 * exp(-g/(R*T)*(h-h1));
speedsound = (1.4*R*T)^0.5;
end
return
end

Accepted Answer

Steven Lord
Steven Lord on 5 Mar 2022
You've defined your atmos function to return the value of its local variable P as the second output.
What value should be returned as that second output if not all elements of h are less than or equal to h1 and not all elements of h are less than or equal to h2? What value does your code assign to the local variable P with in that scenario? Does the local variable P even exist in that scenario?
  1 Comment
Rachel Ong
Rachel Ong on 6 Mar 2022
I didnt realise this, thanks for help! I've set the range of h so it should not give me an error in those scenarios you mentioned. Thank you once again.

Sign in to comment.

More Answers (2)

Matt J
Matt J on 5 Mar 2022
Edited: Matt J on 5 Mar 2022
The error message is complaining that you did not assign a value to P within atmos(). P is named as an output of atmos,
[T, P, rho, speedsound] = atmos(h)
but the function never computes it.

AndresVar
AndresVar on 5 Mar 2022
Your p assignment is lowercase but output is uppercase

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!