Dynamics MATLAB Project
Computing Project 1 Projectile
Introduction
The computing project Projectile concerns the theory of particle dynamics. The concept is to model projectile motion including the nonlinear drag resistance caused by motion in a fluid with finite density (which causes drag that is proportional to the square of the ve- locity). The drag forces can have a significant impact on the motion of the particle and that impact can affect the outcome in practical problems (e.g., in targeting and homerun hitting).
The most widely accepted model of velocity related drag forces give a force with magni- tude equal to
πΉπΉππ = 12 πππΆπΆπππ΄π΄ππ π£π£ 2 β‘ πππ£π£2 (1)
where Ο is the density of the surrounding fluid, Cd is the coefficient of drag (which de- pends upon the shape of the objectβsomething you can look up online or in a handbook), Ap is the projected area of the object perpendicular to the direction of the velocity, and π£π£ = βπ―π― β π―π― is the speed (the norm of the velocity v). For convenience in the following discussion we lump the coefficients into the single parameter ππ = πππΆπΆπππ΄π΄ππ/2. In your pro- gram you will want to input each of these as physical properties and then compute c for use throughout the computation.
The forces that act on a particle are vectors. The drag force must, therefore, be a vector (with magnitude and direction). The expression above gives the magnitude of the vector. The direction of the force is in the direction of the velocity and acts to oppose motion in the direction of the velocity. The simplest way to develop a unit vector in the direction of the velocity is to divide the velocity by its magnitude. The direction m of the drag force is then
π¦π¦ = βπ―π―/π£π£ (2)
Putting these together the drag force can be expressed as
π
π
ππ = πππ£π£2π¦π¦ = βππ π£π£ π―π― (3)
The force opposes the motion, it is proportional to the constant c, and it is proportional to the βsquareβ of the velocity. The presence of this force makes the particle motion prob- lem nonlinear because the velocity is part of the state that we are trying to determine by integrating the equations of motion.
We can solve the problem numerically by computing the velocity and position incremen- tally based upon the state at the previous time step and the equation of motion at the cur- rent time step. Using the generalized trapezoidal rule for numerical integration we have
Arizona State University The Mechanics Project CEE 212βDynamics CP 1βProjectile
Β© 2013 Keith D. Hjelmstad 2
π―π―ππ+1 = π―π―ππ + βπ‘π‘[π½π½ππππ + (1 β π½π½)ππππ+1] (4)
π±π±ππ+1 = π±π±ππ + βπ‘π‘[π½π½π―π―ππ + (1 β π½π½)π―π―ππ+1] (5)
where βπ‘π‘ = π‘π‘ππ+1 β π‘π‘ππ is the time increment and Ξ² is a numerical integration parameter, which we generally take to be Ξ²=0.5 (more on that in the Course Notes entitled Numeri- cal Methods). The subscripts on the state variables x, v, and a indicate the timeβe.g., xn = x(tn) and xn+1 = x(tn+1), etc. Even though the position vector is a continuous function of time we will be finding values at certain discrete values of time that are meant to approx- imate the actual function at that time.
We get acceleration from the equations of motion F=ma. In the present case that would be
βπππππ§π§β πππ£π£ππ+1π―π―ππ+1 = ππππππ+1 (6)
where m is the mass of the particle, g is the acceleration of gravity (i.e., 9.81 m/s2), and n is a unit vector pointing in the direction of gravity (usually we will set our coordinate sys- tem such that n = e3).
The knowledge you need to solve this problem within the context of a MATLAB code is contained in the Course Notes entitled Numerical Methods. The state is completely de- termined at π‘π‘ππ (we got it from doing the same calculation at the last time step). So, we can look at Eqns. (4), (5), and (6) as three (vector) equations in three (vector) unknowns.1
The task is to solve those equations at each time step and then move on to the next time step. As in all dynamics problems we must specify initial condition on position and ve- locity (i.e., xo and vo must be known as part of the problem specification). To get ready to start the time marching algorithm you must also know the acceleration ao at time zero. The acceleration cannot be specified, but rather must be computed from the equation of motion, in this case Eqn. (6) so
ππππ = βπππ§π§ β ππ ππ π£π£πππ―π―ππ (7)
Once the initial state is completely established then the time stepping algorithm can be done. Note that Eqn. (6) is nonlinear (because of the velocity term, which is sort of a vec- tor version of velocity squared). Therefore, we will need to use Newtonβs method at each time step to solve our system of equations (again, see the course notes).
The time-stepping algorithm for projectile motion without drag has been implemented in the MATLAB program projectile.m which we have provided for you and is available on the Blackboard website. This program shows how to set up the time-stepping part of the MATLAB code. Note that without the drag term the equation of motionβi.e., Eqn. (6)
1 If you write out all of these three vector equations in components then it is nine scalar equations in nine scalar unknowns. It will be convenient to keep the equations in vector notation because we can implement these equations in MATLAB as vector equations.
Arizona State University The Mechanics Project CEE 212βDynamics CP 1βProjectile
Β© 2013 Keith D. Hjelmstad 3
without dragβare not nonlinear so we do not have a Newton βwhileβ loop in this code. You will need to put that in as part of this project. If you think about it, what you really need to do to get from my code to your code is to deal with what is different between my equation of motion and your equation of motion (yours has the drag term, mine does not). Note that the numerical integration equationsβEqns. (5) and (6) aboveβare the same in both cases because they only implement the fact that acceleration is the time rate of change of velocity which is the time rate of change of position.
The MATLAB program projectile.m is the program framework that we will use for all of the Computing Projects in this course. Therefore, understanding how this one is set up will help you to get oriented for all future CPs. The descriptions of some of the features are noted in the course notes Numerical Methods. For future computing projects you will have this basic code for a launching point (the time stepping algorithm will be basically the same in each case, the equations of motion will change). Study the code carefully.
What you need to do
For this computing project you can get going in two steps: (1) get the program to com- pute correctly using an explicit approximation (see the course notes) and (2) do the code for the real thingβi.e., the implicit implementation.
As mentioned in Numerical Methods, the explicit approximation uses the simplifying trick of using the old velocity π―π―ππ in the equation of motion instead of the correct new val- ue π―π―ππ+1. That allows us to compute the acceleration at the new state (approximately) as
ππππ+1 = βπππ§π§ β πππ£π£πππ―π―ππ/ππ
This equation can be implemented in projectile.m by simply adding the drag term. Be- cause it is the old velocity (which is known from the last time step) you donβt need New- tonβs method to solve the equation of motion. You should be able to get this working by changing a few lines of projectile.m!2
Once you get the explicit version of the code working move on to the implicit version. This part is the main challenge and purpose of this project. In essence, you need to im- plement Newtonβs method (in a βwhileβ loop) to satisfy the equations of motionβEqn. (6)βat each time step. The course notes Numerical Methods shows you how to get the equations for the Newton iteration.
2 This approachβsolving a simpler problem before you get into the complexities of the real prob- lem at handβis a good programming practice. It allows you to sort things out one step at a time and at each step you can get a working code that might help to verify the next version. When you get the explicit version working you will want to save that for posterity (i.e., start the next code in a new file so you can go back to that one as needed).
Arizona State University The Mechanics Project CEE 212βDynamics CP 1βProjectile
Β© 2013 Keith D. Hjelmstad 4
Once you get your code working, use it to study the phenomenon of terminal velocity. You can, in fact, use terminal velocity as one of the ways to verify the code because it is possible to derive an analytical expression from the equations of motion for terminal ve- locity (assuming that the direction does not change, which would be true for a particle traveling in exactly the same direction as gravity, velocity parallel to n). Examine what happens when the projectile velocity is not in a constant vertical directionβi.e., the gen- eral projectile-motion problem, wherein there is both a horizontal and vertical component to the motion. How does horizontal motion affect the vertical terminal speed? Will a ball that hits water in a swimming pool at an angle hit the bottom at the same time as a ball that hits going straight down if the vertical component of the velocity is the same?
You are, of course, free (and encouraged) to explore anything you want within the con- text of particle motion with drag forces. Note that your report will be evaluated on the basis of the interest and insights of your study. This part of the assignment invites you to discover and to explore. You could change your code to account for ambient wind (i.e., the fluid moving on its own independent of the particle) and then you could explore why it is harder to hit a homerun in baseball hitting into the wind compared to with the wind. You can, and should study how the numerical analysis parameters affect your solution. What happens if you change the time step? What happens if you change the parameter Ξ²?
Write a report documenting your work and the results (in accord with the specification given in the document Guidelines for Doing Computing Projects). Post it to BlackBoard prior to the deadline. Consult the document Evaluation of Computing Projects to see how your project will be evaluated to make sure that you can get full marks.