Let's consider the atmosphere of the Earth; you're using it in your simulation of the cannonball this week. Now, the density of the atmosphere is a pretty simple function of altitude:
rho(height) = (1.21 kg/m^3) * exp(-height/8000 m)
So one can write a simple routine to plot the density as a function of height from, say, sea level to an altitude of 100 km. It might look like this:
The central loop in this program is short and sweet, easy to understand at a glance:
for i = 1 : num_pieces altitude = start_altitude + i*delta_altitude; density = rho_nought * exp(-altitude/scale_height); y(i) = altitude; x(i) = density; end
In this case, the calculation of air density is so simple that it may not make sense to move it to a function of its own; leaving it in the main loop is fine. But what if the physical quantity behaves in a more complicated manner?
The temperature of the Earth's atmosphere, for example, is NOT a simple function of altitude:
We can approximate this complicated behavior by breaking the atmosphere into a set of layers, and using a simple function within each layer. But that makes the main loop of a program a lot less easy to grasp at a glance:
for i = 1 : num_pieces altitude = start_altitude + i*delta_altitude; // for the troposphere ... if (altitude < troposphere_boundary) xx = altitude - 0; temperature = a1 + b1*xx; // for the lower stratosphere elseif (altitude < lower_strat_boundary) xx = altitude - lower_strat_boundary; temperature = a2 + b2*xx; // for the upper stratosphere else xx = altitude - upper_strat_boundary; temperature = a3 + b3*xx + c3*(xx*xx); end y(i) = altitude; x(i) = temperature; end
In this case, we can make the main loop much shorter and easier to understand by creating a function to do all the dirty work. The main loop then might look like so:
for i = 1 : num_pieces altitude = start_altitude + i*delta_altitude; temperature = air_temperature(altitude); y(i) = altitude; x(i) = temperature; end
And, after the end of the main program, the source code might contain a function which starts something like this:
////////////////////////////////////////////////////////////////////////// // function temp = air_temperature(altitude) // // Calculate the temperature of the Earth's atmosphere (in degrees F) // as a function of height (in meters). // // Arguments: altitude (input) height above sea level (meters) // // temp (output) temperature of air (degrees F) // ....
Go to this NASA site to find a simple approximation to the temperature of air in the lower layers of the atmosphere.
Write a Scilab program in a source code file called plot_air_temperature.sci. Your program should have two functions:
The program should calculate temperature at altitudes from sea level to 50,000 meters, in steps of 100 m. It should generate a graph like the one for density above, showing altitude (in meters) on the x-ais and temperature (in degrees F) on the y-axis. You can check your graph against the picture of temperature versus altitude in the NASA graphic above.
When you think it works, call me over to check it. If I approve, print onto paper
Copyright © Michael Richmond. This work is licensed under a Creative Commons License.