Chronology Current Month Current Thread Current Date
[Year List] [Month List (current year)] [Date Index] [Thread Index] [Thread Prev] [Thread Next] [Date Prev] [Date Next]

Re: [Phys-l] Linear Air Drag



Peter Schoch wrote:
I have a quandry, and am hoping someone can clear it up for me...

I just worked a linear air drag problem for 2-D motion to show my students. The x direction was not a problem. For the y direction I worked it to rise to a max height, lower than if no drag were present, and then switching the sign of the drag term I worked the other half of the vertical motion. I got what appears to be a perfectly reasonable solution, whose graph is what I expected (lower y and shorter in x than the vacuum case).

Now, I've just been given a copy of Taylor's "Classical Mechanics" and asked to teach the course next semester. In that textbook (which seems very well done) he does linear drag in Chapter 2. As part of it he does vertical motion, initial v upward, solves the first order, ODE and states that it is good for the entire motion!

Now, I admit that my solution matches his for the t=0 to highest point of rise part. However, for the second part of the motion, with the drag 'switched' my solution differs slightly from his -- and the graphs of he two differ (but only very slightly). I checked the errata for the textbook, and none are mentioned for this.

I need some outside brain power. Why is Taylor's solution correct (that you need not 'switch' the drag term at the apex of the motion)?

Thank you,
Peter Schoch
Hmmm. I'm puzzled by the concept of linear air resistance.
Air drag for projectiles is a function of v squared.
In this case it is usual to work an iterative solution. As it happens,
the question of maximizing range for a projectile for reasonably
realistic conditions was an example provided by Sherrod with his
Non Linear Regression package. It reads reasonably like c language.
People will more often do something similar with a spreadsheet,
these days.
I have copied his method here below. As you can see, he shows the drag
vector opposite to the instantaneous direction of travel.

Brian W


/*
* Determine the firing angle (above horizontal) that will cause
* a projectile to travel the maximum distance, accounting for
* air resistance.
*/
Title "Firing angle for maximum range";
/* Parameter whose optimum value is to be determined */
Parameter Angle=40; /* Firing angle */
Constrain Angle=20,70; /* Put reasonable range on angle */
/* Constants for problem */
Constant Vm = 300; /* Muzzle velocity (m/s) */
Constant G = 9.80; /* Acceleration of gravity (m/s^2) */
Constant Airres = 0.0012; /* Air resistance factor */
Constant Step = 0.005; /* Time step (seconds) */
/* Work variables */
Double Vx,Vy,X,Y,V,Dar;
Double Xlast,Ylast;
/*
* Projectile is fired from ground level.
*/
X = 0;
Y = 0;
/*
* Compute initial X,Y velocities.
*/
Vx = Vm * cos(Angle);
Vy = Vm * sin(Angle);
/*
* Simulate the flight of the projectile by advancing time
* through small steps until it hits the ground.
*/
do {
/*
* Compute new X,Y position using current velocity and
* time step.
*/
X += Step * Vx;
Y += Step * Vy;
/*
* Apply gravitational acceleration to Y velocity.
*/
Vy -= Step * G;
/*
* Apply air resistance to speeds.
* Note: Force of air resistance is proportional to the
* speed squared.
*/
/* Compute total linear speed */
V = sqrt(Vx^2 + Vy^2);
/* Determine deceleration due to air resistance */
Dar = Airres * V^2;
/* Apply this to the X and Y velocities */
Vx -= Step * Dar * Vx / V;
Vy -= Step * Dar * Vy / V;
/*
* Remember last position above the ground.
*/
if (Y > 0) {
Xlast = X;
Ylast = Y;
}
/*
* Loop until projectile hits the ground.
*/
} while (Y > 0);
/*
* Projectile hit the ground (and may be underground).
* Use last above-ground position to interpolate X
* at the point of impact (i.e., when Y was 0).
* Assume it moved in a straight line during the last step.
*/
X = Xlast - Ylast * ((X - Xlast) / (Y - Ylast));
/*
* Maximize the distance.
* Note: The absolute value of the function is minimized
* which results in X being maximized.
*/
Function 100000 - X;
Data;