Numerical approximation of projectile motion with air resistance
    12 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Dan
 el 9 de Jul. de 2012
  
    
    
    
    
    Comentada: Sam
 el 17 de Feb. de 2023
            For a school project, I need to estimate the maximum distance of a projectile without neglecting air resistance. I'm following the procedure outlined here:
On the second page it shows a nice, step by step process to find a numerical approximation. I am trying to reproduce the trajectory of the baseball that is shown on the last page in order to verify my model. However, the plot shows that the baseball will travel over 100 meters, while my model shows that it will travel about 80. Here is my code:
clear 
clc
close all
%Constants for Baseball
  m=.145 %kg
  A=pi*(.0366*2)^2/4 %m^2
  C=.5 %Drag Coefficient of a sphere
  rho= 1.2 %kg/m^3 (density of air)
  D=rho*C*A/2
  g=9.81 %m/s^2 (acceleration due to gravity)
    %Initial Conditions
    delta_t= .001 %s
    x(1)=0
    y(1)=0
    v=50 %m/s
    theta=35 %deg
    vx=v*cosd(theta)
    vy=v*sind(theta)
    t(1)=0 
    %Start Loop
    i=1
    while min(y)> -.001
        ax=-(D/m)*v*vx;
        ay=-g-(D/m)*v*vy;
        vx=vx+ax*delta_t;
        vy=vy+ay*delta_t;
        x(i+1)=x(i)+vx*delta_t+.5*ax*delta_t^2;
        y(i+1)=y(i)+vy*delta_t+.5*ay*delta_t^2;
        t(i+1)=t(i)+delta_t;
        i=i+1;
    end
    plot(x,y)
    xlabel('x distance (m)')
    ylabel('y distance (m)')
    title('Projectile Path')
If anyone has a few minutes to take a look at this, I'd really appreciate it. I can't seem to find the problem. Thank you!
2 comentarios
  Walter Roberson
      
      
 el 9 de Jul. de 2012
				Well-presented question! You tell us what you are trying to do, you give a reference, you show us your code, you tell us the difference between what you expect and what you get. Thank you!
  Sam
 el 17 de Feb. de 2023
				There is an if statement that has air resistance act in one direction as the ball is travelling upward and act in the other way as the ball travels downward. This is because air is always acting against the motion and the motion changes as the ball travels.
Respuesta aceptada
  Teja Muppirala
    
 el 9 de Jul. de 2012
        You are forgetting to update v inside your loop.
v = sqrt(vx^2 + vy^2);
Right now it is sitting at v = 50 the whole time.
Más respuestas (1)
  Stiles
 el 5 de Abr. de 2017
        Also
A=pi*(.0366*2)^2/4 %m^2
should be: A=pi*(.0366)^2 %m^2
as it is the projected surface area
4 comentarios
  darova
      
      
 el 18 de Mzo. de 2019
				Cant understand why you consider acceleration twice?
vx=vx+ax*delta_t;
x(i+1)=x(i)+vx*delta_t+.5*ax*delta_t^2;
  Nikolaj Maack Bielefeld
 el 20 de Mzo. de 2019
				
      Editada: Nikolaj Maack Bielefeld
 el 20 de Mzo. de 2019
  
			@darova
He calculates each step with constant acceleration. That is only an approximation, but it is a very good one for very small delta_t.
The way I understand his loop:
Line 1&2 (with my own correction from above): 
ax3=-(D/m)*vx3^2;
ay3=-g-(D/m)*vy3^2;
First he uses the velocity and the air resistance (a function of velocity, google NASA hehe) to calculate the acceleration component in x- and y-direction. In each direction this is (-D*v^2)/m where v is the x- or y-component of the velocity and minus because it is opposite the movement. In the y-direction gravity is added too. So now we have acceleration. As far as I see you must do this step first in order to begin with how much the projectile is slowed down in the first iteration.
Line 2&3:
vx3=vx3+ax3*delta_t;
vy3=vy3+ay3*delta_t;
These formulas are simply formulas valid for constant acceleration. They calculate the new velocity from the initial velocity and the acceleration from above. What this actually means is that the projectile will not have the initial velocity at any point in this calculation. That's part of the explanation why these iterations always end up a little shorter than the analytical solution, as I've demonstrated above. (The other part is that the iterations always experience more negative acceleration because they are not continuous).
Line 4&5:
x3(i+1)=x3(i)+vx3*delta_t+.5*ax3*delta_t^2;
y3(i+1)=y3(i)+vy3*delta_t+.5*ay3*delta_t^2;
This formula (used for each component), is also simply a standard formula valid for constant acceleration. It is used to calculate the new position of the projectile. As stated above this formula actually never uses the initial velocity. It always calculates the new position from the velocity and acceleration, but the velocity and acceleration are both calculated from the velocity of the previous iteration. But that is actually the best one can do, since a calculation like this can never be continuous.
Now, did this answer your question?
Ver también
Categorías
				Más información sobre Chassis Systems en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







