Summary: This is an example of using MATLAB to solve a simple engineering data analysis problem in which velocity and acceleration are computed from altitude data from a home-built rocket test launch.
Note: You are viewing an old version of this document. The latest version is available here.
On his web page Richard Nakka's Experimental Rocketry Web Site: Launch Report - Frostfire Two Rocket, Richard Nakka provides a very detailed narrative of the test firing of his Frostfire Two homebuilt rocket and subsequent data analysis. (His site provides many detailed accounts of tests of rockets and rocket motors. Some rocket launches were not as successful as the Frostfire Two launch; his site provides very interesting post-flight analysis of all launches.)
In this section, we will use MATLAB to analyze the altitude data extracted from the plot "Altitude and Acceleration Data from R-DAS" on Richard Nakk's web page. This data is in the file Altitude.txt. We will use this data to estimate velocity and acceleration of the Frostfire Two rocket during its flight.
Download the altitude data set in the file Altitude.txt (right click on the file's link) onto your computer. The file is formatted as two columns: the first column is time in seconds, and the second column is altitude in feet. Load the data into MATLAB and plot the altitude as a function of time.
The following sequence of MATLAB commands will load the data, create a vector t of time values, create a vector s of altitude values, and plot the altitude as a function of time.
load Altitude.txt -ascii
t = Altitude(:,1);
s = Altitude(:,2);
plot(t,s)
|
Write a MATLAB script that uses a for loop to compute velocity and acceleration from the altitude data using forward differences. Your script should also plot the computed velocity and acceleration as function of time.
This solution is by Scott Jenne; it computes and plots the velocity:
load Altitude.txt -ascii
t=Altitude(:,1);
s=Altitude(:,2);
for n=1:180;
v=((s(n+1))-s(n))/((t(n+1))-t(n))
hold on
plot(t(n),v,'o')
end
|
Modify your script from Exercise 2 to compute velocity and acceleration using backward differences. Remember to save your modified script with a different name than your script from Exercise 2.
This solution by Bryson Hinton:
load altitude.txt -ascii
t=altitude(:,1);
s=altitude(:,2);
hold on
for x=2:181
v(x)=(s(x)-s(x-1))/(t(x)-t(x-1));
plot(t(x),v(x),'b.')
end
|
Modify your script from Exercise 2 to compute velocity and acceleration using central differences. Remember to save your modified script with a different name than your script from Exercise 2 and Exercise 3.
This code computes the velocity using the central difference formula.
load Altitude.txt -ascii
t=Altitude(:,1);
s=Altitude(:,2);
for n=2:180
v(n-1)=(s(n+1)-s(n-1))/(t(n+1)-t(n-1));
end
plot(t(2:180),v)
|
Compare the velocity and acceleration values computed by the different approximations. What can you say about their accuracy?
Modify your script from Exercise 2 to compute velocity and acceleration without using a for loop.
This code uses MATLAB's diff function to compute the difference between adjacient elements of t and s, and the ./ function to divide each element of the altitude differences with the corresponding element of the time differences:
load Altitude.txt -ascii
t=Altitude(:,1);
s=Altitude(:,2);
v=diff(s)./diff(t);
plot(t(1:180),v)
|
In this section, we will use MATLAB to analyze the acceleration data extracted from the plot "Altitude and Acceleration Data from R-DAS" on Richard Nakk's web page. Download the acceleration data set in the file Acceleration.txt (right click on the file's link) onto your computer. The first column is time in seconds, and the second column is acceleration in g's. The following commands load the data into MATLAB and plot the acceleration as a function of time.
load Acceleration.txt -ascii
t = Acceleration(:,1);
a = Acceleration(:,2);
plot(t,a)
|
Write a MATLAB script that uses a for loop to compute velocity and altitude from the acceleration data using the trapezoidal rule. Your script should also plot the computed velocity and altitude as function of time.
This solution is by Jonathan Selby:
load Acceleration.txt -ascii
t=Acceleration (:,1);
a=Acceleration (:,2);
v(1)=0;
for n=1:181
v(n+1)=(t(n+1)-t(n))*(a(n+1)+a(n))/2+v(n);
end
plot(t,v)
|
load Acceleration.txt -ascii
t=Acceleration (:,1);
a=Acceleration (:,2);
v(1)=0; % Initial velocity
s(1)=0; % Initial altitude
for n=1:181
v(n+1)=(t(n+1)-t(n))*(a(n+1)+a(n))/2+v(n);
s(n+1)=(t(n+1)-t(n))*(v(n+1)+v(n))/2+s(n);
end
plot(t,s)
|
Modify your script from Exercise 6 to compute velocity and altitude without using a for loop.
This solution by Nicholas Gruman uses the MATLAB cumtrapz function to compute velocity with the trapezoidal rule:
load Acceleration.txt -ascii
t=Acceleration(:,1);
A=Acceleration(:,2);
v=cumtrapz(t,A);
s=cumtrapz(t,v);