MATLAB Examples

How Do Computer Models Help Break Records?

Coorous Mohtadi, MathWorks, 2012

Copyright 2012 - 2012 MathWorks Inc

For centuries, engineers have solved challenges by simplifying assumptions so as to understand the underlying phenomena. Mathematical and computer models help us understand physical occurrences and let us perform sweeps over a range of design parameters so that we can determine which are most important to specific objectives. Often, we can look to simple models and computer programs, rather than extremely complex ones, to help us make design decisions. Computer models based on simplified assumptions help students gain a better appreciation of the design process. Such models also spark interest in the underlying physics and mathematics . In this article we examine the simplified performance model of a car designed to break the Land Speed Record. We will use MATLAB® [1] to create our models.

“MATLAB and Simulink are registered trademarks of The MathWorks, Inc."


Breaking the Land Speed Record

The challenge to the Land Speed Record will take place in Hakskeen Pan in the Northern Cape region of South Africa where ‘the fastest man on earth’, driver Andy Green, will attempt to break the record with the UK-based BLOODHOUND SSC® team. (See for related blogs and videos. BLOODHOUND SSC ® is a European Registered Trade Mark of BLOODHOUND Programme Ltd)

With the BLOODHOUND project it would be far too expensive to build prototypes to try out various ideas and approaches. Accurate and meaningful mathematical models and computer simulations are therefore vital. This approach enables thousands of experimental runs to be performed in a relatively short time. For example, assuming a simulation run takes about 2 seconds, it is possible to examine 10,000 different variations in less than 2 hours on a 4-core laptop. Reliable models allow designers to identify the optimum solution relatively quickly.

While models do not need to incorporate every detail of the system, they must be accurate enough to represent the feature under study. As Professor George Edward Pelham Box, an early pioneer of time series analysis and mathematical modelling using statistical techniques, is reported to have said, “all models are wrong but some are useful”[2]. Working with performance models requires sufficient confidence that the model is good enough to predict the overall behaviour of the car without having to go into enormous detail.

The target for the BLOODHOUND project is a supersonic car travelling at 1000 mph. The rules of the Land Speed Record are simple: the car must have (at least) four wheels and make two passes through the “measured mile” in opposite directions. The car has to decelerate to a standstill by the time it reaches the end of the track and be ready for the return journey within the hour. The average of the two speeds over the measured mile is recorded as the attempt on the Land Speed Record. The current record stands at 763 mph. It was set in October 1997 by Andy Green, driving Thrust SuperSonicCar powered by two jet engines. However, these jet engines would not provide the extreme performance required to achieve 1000 mph so innovative design approaches are called for.

The Mission Profile

The track for the Land Speed Record attempt is 10 miles long. The maximum speed of the car is measured in a one-mile stretch in the middle of the track. This leaves 4.5 miles to accelerate to a maximum speed of 1000 mph, one mile to travel at maximum speed, and 4.5 miles to stop. If we assume constant acceleration and deceleration, this gives us the following profile using a simple MATLAB script as shown.

% Conversion factors to SI Units
Miles2Metres = 1609.344;
mph2ms = 1609.344/3600;

% Constants: 4.5 miles to accelerate, Vm set to 1000 miles per hour

% Distance in metres
Distance = 4.5*Miles2Metres;
% Max Speed in metres per second
Vm = 1000*mph2ms;
% Assume:
% Constant acceleration to Vm;
% Measured mile at constant speed;
% Constant decelleration

% Compute Acceleration
Accel = Vm^2/(2*Distance);
% Time to reach Vm
Time2Vm = Vm/Accel;
% Time spent constant speed
TimeMile = Miles2Metres / Vm;
% Deceleration Time
Time2Stop = Time2Vm;
TotalTime = Time2Vm + TimeMile + Time2Stop;

% Compute speed and position 1000 samples linearly spaced
t = linspace(0,TotalTime,1000); Interval = t(2)-t(1);
% Zero acceleration
Acceleration = zeros(size(t));
% less than Time to Maximum Velocity +ve Accn
Acceleration(t <= Time2Vm) = Accel;
% greater than time after the measured mile -ve Accn
Acceleration(t > Time2Vm+TimeMile) = -Accel;
% Speed = Integral of Acceleration
Speed = cumsum(Acceleration)*Interval;
% Position = Integral of Speed
Position = cumsum(Speed)*Interval;

% Plotting commands
xlabel('Time in Seconds'); ylabel('Acceleration in m/s^2');
title('Acceleration and Speed profile'); grid;
xlabel('Time in Seconds'); ylabel('Speed in m/s'); grid; axis('tight')
plot(Position, Speed,'LineWidth',2);
xlabel('Position in Metres'); ylabel('Speed in m/s'); grid; axis('tight')

The car will have an acceleration of 13.8 $$m/s^2$ for 32.4 seconds to reach a maximum speed of 447m/s (or 1000 mph) for 3.6 seconds to travel through the measured mile. This profile, though unrealistic, provides an idea of the of the required speeds, times, and accelerations. For example, the design team is planning to employ a jet engine to accelerate the car. The jet produces a maximum of 90 kN of thrust, and the car weighs about 6000 kg. To a first approximation, this gives a potential maximum acceleration of 15 $$m/s^2$. Considering the many other forces involved, it is clear that the jet engine on its own is not sufficient and that an additional hybrid rocket will be necessary to provide a boost to reach the desired speed.

Forces Acting on the car

Four basic forces act on the car: gravity and aerodynamic lift acting vertically, thrust and drag acting horizontally. Additionally, there are sideways forces of yaw and roll, making the analysis quite complex. We will focus on the elements of thrust and drag and will try to make predictions about the performance of the car based on simplifying assumptions.


The thrust to drive the car forward will come from two sources:

  1. The EJ200 jet engine, providing up to 90 kN of thrust
  2. A hybrid rocket with 120 kN of thrust

The horizontal forces opposing the motion range from basic friction or rolling resistance of the car to different components of aerodynamic drag. Rolling resistance can be treated the same as basic friction to a first approximation. This gives us a horizontal force opposing the motion that is proportional to the weight of the car, or $$ F_R = C_{rr} Mg $$ In our case M, the mass of the car, is around 6500 kg; g, the acceleration due to gravity, is 9.81 m/s^2; and $C_{rr}$ , the coefficient of rolling resistance, is estimated to be around 0.4 to a first approximation.


The car experiences drag from airflow as soon as it starts moving. Drag can be caused by any of the following phenomena:

  • Skin friction
  • The pressure difference between the front and the rear of an object
  • The lift-dependent viscous effect

These and other similar effects are summarized in the equation

$$ F_D=\frac{1}{2} C_D \rho Av^2 $$

The drag is proportional to the density of air, the incident area, and the square of the speed. The speed is sometimes expressed as the Mach number, which is the ratio of the speed of the vehicle to the speed of sound. The drag coefficient $C_D$ is itself a function of several variables, including the speed and shape of the object and the viscosity and temperature of the surrounding air. The actual values can be estimated using computational fluid dynamics models and can be verified through experiments in wind tunnels. The typical value for $C_D$ for BLOODHOUND will vary between 0.7 and 1.4, increasing at higher speeds. At low speeds the $C_D$ of a typical car is around 0.3. For our model we assume a fixed value for the $C_D$ of 0.7. Stopping the car in time is a critical part of the mission. Ordinary disc brakes, though effective at low speeds (less than 200 mph), would rapidly overheat if used at high speeds. At supersonic speeds we can only rely on the aerodynamic drag acting on the car. When the speed is below about Mach 1.1(1.1 times the speed of sound) large panels on the side of the car can be opened to act as air brakes, increasing the effect of aerodynamic drag. As a backup to the airbrakes, brake parachutes can be deployed at Mach 0.9 to slow the car to levels that enable the driver to apply disc brakes safely .

Equations of Motion

Newton’s second law of motion states that the sum of the external forces on a body is equal to the rate of change of momentum. To a first approximation, this gives the following:

where $F_{Thrust}$ is the thrust, $F_{Drag}$ is the drag, v is the velocity of the car , and m is its mass. We assume that the rate of change of mass is given by a constant, depending on whether the jet is burning fuel or the hybrid rocket is operational. For simplicity, we also assume that the thrust is given by the sum of jet and rocket thrusts. The car carries 500 kg of fuel for the jet and will use about 5 kg/s of jet fuel during acceleration. The total mass of the propellant for the rocket is 1100 kg. The rocket will burn 45 kg/s of fuel and oxidant to produce its 122 kN of thrust for 24.5 seconds. We now combine the various pieces of information to get a refined estimate of the performance model of BLOODHOUND. This ordinary differential equation describes the motion of the car over time.

$$ \frac{dv}{dt} = \frac{F_{Thrust}-0.5 C_D \rho A v^2}{m(t)}$$

$$ m(t) = m(0) - fuelflowrate * t $$

We write the eequation into the differential equation solver in MATLAB as a function

type BloodhoundEQ.m
% Copyright 2012 - 2012 The MathWorks Inc

function [dv]=BloodhoundEQ(t,v)
global Bloodhound
Bloodhound.Velocity= v(1);                      % Store new velocity
Bloodhound.Position = v(2);                     % Store Position
Bloodhound.Time = t;                            % Elapsed time since start of mission
Bloodhound.Decel = Bloodhound.Position > ...    % Start Deceleration after the measured mile
    Bloodhound.MeasuredMileStop;                %
Thrust = computeThrust(Bloodhound);             % Compute the Thrust from the Jet and the Rocket
Bloodhound.Mass   = computeMass(Bloodhound);    % Compute the Mass of the car 
Drag   = computeDrag(Bloodhound);               % Compute the Drag and Braking forces
dv(1,1) = (Thrust - Drag)/Bloodhound.Mass;      % Newton's 2nd law of motion
dv(2,1) = v(1);                                 % Speed of the car

The three functions -- computeMass, computeThrust and computeDrag -- calculate the various components of Newton’s second law. See the Appendix for the class definition of BLOODHOUND object, initialization of its parameter properties and three simple methods which compute mass, drag and the thrust of the car. All that remains is to call the solve function in MATLAB in the following script:

type BloodhoundMission.m

%% BLOODHOUND Performance Example
% Copyright 2012 - 2012 The MathWorks Inc.
% This script calls the differential equation solver of MATLAB to compute
% the velocity profile of the car
%% Setup the Model and Initialise all the variables and states
% Set B_Car as an instance of the Bloodhound (This will set the initial
% parameters in the properties of the B_Car object
B_Car = Bloodhound; 
% Setup the Maximum Step size for the solver
options = odeset('MaxStep',0.1); % maximum of 0.1 seconds interval

%% Obtain the simulation profile
% Call the Ordinary Differential Equation Solver. Write the result of the time steps and the speed in Tout, and Yout
% matrices
[Tout, Yout]=ode45(@B_Car.BloodhoundEQ,[0 70],[0;0],options);
%% Plot The results
% Call the plot results script to plot the simulated performance graph
plotresults; % Plot the results calling the plot results script

This call produces the results in the arrays Time and Speed, from 0 to Final Time starting from a standstill. The maximum step size is set to 0.1 seconds.

The Simulated Mission Profile

The figure above shows a typical result of the simulated run. It is based on the following assumptions:

  • The jet and the rocket can produce maximum thrust instantaneously.
  • The drag coefficient is set to 0.7 and the friction coefficient at 0.4.
  • The fuel usage is at 5kg/s with jet only and 50 kg/s for jet and rocket.
  • The density of the air is fixed at 1.2 kg/m^3 .
  • The airbrakes are activated at 0.7 Mach (238 m/s).
  • Both rocket and jet are turned off immediately after the measured mile.

The graphs produced here closely resemble performance plots on the BLOODHOUND web site

Even such simple models provide insight into the design parameters. From these models we can see that:

  • The deceleration phase will probably take longer than the acceleration.
  • Even under almost ideal circumstance the EJ200 jet and hybrid rocket provide barely sufficient thrust to overcome various sources of drag.
  • Deceleration provided by the airbrakes and the parachutes is not a luxury but a necessity.

We can using the MATLAB model to perform a range of experiments with different design parameters and assess sensitivity of the various objectives to them. For example, we can vary the drag coefficient and examine its effect on the maximum speed. From our model we get the following:

type DragTest.m
% Copyright 2012 - 2012 The MathWorks Inc.
B_Car = Bloodhound; V=[]; T=[];
options = odeset('MaxStep',0.1);
for i=1:5
    B_Car.Drag.Coefficient = 0.5 + (i-1)*0.1;
    [Tout, Yout]=ode45(@B_Car.BloodhoundEQ,[0 70],[0;0],options);
    Vmax(i) = max(Yout(:,1));
    V = [V Yout(:,1)]; T=[T Tout];
plot([0.5:.1:0.9], Vmax,'-bo', 'LineWidth',2, 'MarkerFaceColor','r' ); grid on; 
title('First order effect of the drag coeficient on maximum speed')
xlabel('Drag Coefficient')
ylabel('Maximum speed in m/s')


which shows an almost linear relationship between the maximum speed attained and the drag coefficient. Many similar experiments can be carried out to gain a deeper understanding of the effect of various parameters on the design of the car.

Teaching benefits of Using Computer Simulation

Using computer simulation in the classroom can be effective at many different levels; the example presented here is simple enough for most students to understand. Simulation makes the BLOODHOUND challenge tangible . Using computers to solve problems that are too complex for pen, paper and a calculator invites students to enter the world of analysis and design and address real-world problems in a step-by-step manner. The students are introduced to simple programming concepts without having to master numerical computation techniques or plot complex graphs. In addition, they can use the same mathematical modelling software that scientists, mathematicians and engineers use, thus helping to prepare them for future careers. This approach can also engage students in the user community on MATLAB Central-- for example the File Exchange, where users share solutions, and MATLAB Answers, where users answer each other's technical questions[3].

Last, but by no means least, this example invites budding engineers and scientists to collaborate with experienced hands, examine what they do, and even suggest innovative solutions to the challenge of building a car capable of travelling safely, if only for 3.5 seconds, at 1000mph!


  2. Box, G.E.P., Robustness in the strategy of scientific model building, in Robustness in Statistics, R.L. Launer and G.N. Wilkinson, Editors. 1979, Academic Press: New York.


type Bloodhound.m
classdef Bloodhound
    % Simplified Bloodhound model for examination of performance of the car 
    % Copyright 2012 - 2012 The MathWorks Inc.  
       Rocket;                  % Rocket Properties
       Jet;                     % Jet Properties
       Drag;                    % Drag Parameters
       RollResistance;          % RollResistance Parameters
       AirBrake;                % Air Brake Parameters
       InitialMass;             % kg      - Initial Mass of the Bloodhound car
       Mass    ;                % kg      - Calculated Mass of the Bloodhound car
       MeasuredMileStart ;      % - Distance at which the measured mile starts
       MeasuredMileStop  ;      % - Distance where the measured mile ends
       Thrust;                  % Newtons - Thrust of the Jet & Rocket
       Decel;                   %         - Deceleration started 
       Position;                % m       - Bloodhound Position in metres
       Velocity;                % Velocity- Bloodhound Velocity in metres
        function obj=Bloodhound()
            obj.Rocket.maxThrust    = 122000;   % Newtons - Maximum Thrust of the Hybrid Rocket
            obj.Rocket.firingtime   = 11;       % Seconds - Time to fire the rocket
            obj.Rocket.massflow     = 45;       % kg/s    - Approximate fuel usage of the rocket
            obj.Rocket.duration     = 25;       % Seconds - Total duration of the rocket

            obj.Jet.maxThrust       = 90000;    % Newtons - Maximum Thrust of the EJ200 jet
            obj.Jet.massflow        = 5;        % kg/s    - Approximate fuel usage of the jet

            obj.Drag.Coefficient    = 0.7;      % DimLess - Cd coefficient of aerodynamic drag
            obj.Drag.Area           = 1.937;    % m^2     - Incident area for drag calculation
            obj.Drag.Density        = 1.2;      % kg/m^3  - Air density
            obj.Drag.Force          = 0;        % Newtons - Calculated Drag Force

            obj.RollResistance.Coefficient= 0.4;% DimLess - Roll Resistance Coefficient
            obj.RollResistance.Force= 0;        % Newtons - Calculated Roll Resistance Force

            obj.InitialMass = 6500;  % kg      - Initial Mass of the Bloodhound car
            obj.Mass     = 0;        % kg      - Calculated Mass of the Bloodhound car

            obj.AirBrake.Activation = 0.7;%    - Mach no at which the Airbrake is activated
            obj.AirBrake.Coefficient= 1.0;%    - Coefficient of the effect of the Airbrake 
            obj.MeasuredMileStart = 4.5*1609;% - Distance at which the measured mile starts
            obj.MeasuredMileStop  = 5.5*1609;% - Distance where the measured mile ends
            obj.Decel = false;       %         - Deceleration started 
            obj.Position=0;          % m       - Bloodhound Position in metres
            obj.Velocity=0;          % Velocity- Bloodhound Velocity in metres
            obj.ElapsedTime = 0;     % s       - Elapsed time since start of the mission
            obj.Thrust = 0;
        function [MassVal] = computeMass(obj)
        % Mass is assumed to be linearly decreasing with time. 
        % Mass = InitialMass - Time x Rate
        % Rate is set to 
        %   5 kg/s when the Jet is on
        %   50kg/s when the Jet and the Rocket are on
        %   0 when the car is decelerating.

            Time = obj.ElapsedTime;
            if ~obj.Decel,
                if Time < obj.Rocket.firingtime,
                    MassVal= obj.InitialMass - Time*obj.Jet.massflow;
                    MassVal= obj.InitialMass - obj.Rocket.firingtime * obj.Jet.massflow ...
                        - (obj.Jet.massflow+obj.Rocket.massflow)*(Time - obj.Rocket.firingtime);
                MassVal = obj.Mass;
        function Drag = computeDrag(obj)
        % AeroDrag = 0.5 * Cd * Density  * Area * Velocity ^2
        % RollResistance = Mass * g * Coefficient of Resistance
        % Drag = AeroDrag + Roll Resistance;
        % AirBrake = AirBrakeGain * Velocity^2;

            g = 9.81;           % m/s^2
            SoundSpeed = 340;   % m/s
            V= obj.Velocity;

            AeroDrag = 0.5 * obj.Drag.Coefficient * obj.Drag.Density * ...
                obj.Drag.Area * V^2;

            RollResist = obj.Mass * g * obj.RollResistance.Coefficient;

            AirBrakeForce = obj.Decel * obj.AirBrake.Coefficient * ...
                V^2 * (V < obj.AirBrake.Activation*SoundSpeed);

            Drag = AeroDrag + RollResist + AirBrakeForce;

        function TotalThrust = computeThrust(obj)
        % At the begining thrust is given by the Jet alone. 
        % Once the Rocket is fired we also have the additional thrust from the
        % Rocket. Rocket can only operate for a limited time of around 24.5
        % seconds. Both the jet and rocket are turned off once we go through the
        % measured mile and deceleration begins.
            Time = obj.ElapsedTime;
            RocketStart = obj.Rocket.firingtime;
            RocketEnd = RocketStart + obj.Rocket.duration;
            if Time < RocketStart || Time > RocketEnd,
                TotalThrust = obj.Jet.maxThrust;
                TotalThrust = obj.Jet.maxThrust + obj.Rocket.maxThrust;
            TotalThrust = TotalThrust* ~obj.Decel;

        function [dv]=BloodhoundEQ(obj,t,v)
            persistent MassVal;
            obj.Velocity= v(1);                                  % Store new velocity
            obj.Position = v(2);                                 % Store Position
            obj.ElapsedTime = t;                                 % Elapsed time since start of mission
            obj.Mass = MassVal;
            obj.Decel = obj.Position > ...                       % Start Deceleration after the measured mile
            ThrustVal = computeThrust(obj);                      % Compute the Thrust from the Jet and the Rocket
            MassVal   = computeMass(obj);                        % Compute the Mass of the car 
            obj.Drag.Force = computeDrag(obj);                   % Compute the Drag and Braking forces
            dv =[(ThrustVal - obj.Drag.Force)/MassVal;v(1)];     % Newton's 2nd law of motion
                                                                                                % Speed of the car