MATLAB Projectile motion with friction in MATLAB (ODE45)

AI Thread Summary
The discussion focuses on modeling projectile motion with air resistance in MATLAB using the ODE45 function. The air resistance is defined as proportional to the square of the velocity, with a variable B that depends on the height above ground. The user has derived equations of motion but struggles to define a function for ODE45 due to interdependent variables. Key guidance includes structuring the function to represent the derivatives of position and velocity while incorporating the effects of air resistance. The conversation emphasizes the need to update the height variable as calculations progress over time.
cwrn
Messages
15
Reaction score
0
I'm working on a little project where I want to plot the motion of a projectile with air resistance. The air resistance can be assumed to be proportional to the velocity squared.

F_{f}=-Bv^{2}

F_{f,x}=F_{f}\frac{v_{x}}{v}, \ \ F_{f,y}=F_{f}\frac{v_{y}}{v}

where B depends on the height, y above the ground

B(y) = B_{0}e^{-y/y_{0}}

Given

k = \frac{B_{0}}{m}=4\cdot 10^{-5} \ m^{-1}, \ y_{0} = 1\cdot 10^4 \ m, \ v_{0} = 700 \ m/s

I have derived the equations of motion as following:

\vec{r}=\left(v_{0}tcos\theta-\frac{1}{2}kvv_{x}e^{-y/y_{0}}\cdot t^2\right)\hat{i}+\left(v_{0}tcos\theta+\frac{1}{2}\left[\vec{g}-kvv_{y}e^{-y/y_{0}}\right] t^2\right)\hat{j}

\vec{v}=\left(v_{0}cos\theta-kvv_{x}e^{-y/y_{0}}\cdot t\right)\hat{i}+\left(v_{0}sin\theta+\left [\vec{g}-kvv_{y}e^{-y/y_{0}}\right]t\right)\hat{j}

\vec{a}=\left(-kvv_{x}e^{-y/y_{0}}\right)\hat{i}+\left(\vec{g}-kvv_{y}e^{-y/y_{0}}\right)\hat{j}

I'm having trouble defining a function I can use with ode45 since there are several variables depending on each other (assuming my equations are correct). Any tips would be greatly appreciated.
 
Last edited:
Physics news on Phys.org
I haven't checked if the equations are correct, but they are not differential equations!

What you need for ode45 is something like
$$
\begin{align}
\frac{dx}{dt} &= v_x \\
\frac{dy}{dt} &= v_y \\
\frac{dv_x}{dt} &= a_x \\
\frac{dv_y}{dt} &= a_y
\end{align}
$$
where you replace ##a_x## and ##a_y## by the proper expressions involving the forces.
 
DrClaude said:
I haven't checked if the equations are correct, but they are not differential equations!

What you need for ode45 is something like
$$
\begin{align}
\frac{dx}{dt} &= v_x \\
\frac{dy}{dt} &= v_y \\
\frac{dv_x}{dt} &= a_x \\
\frac{dv_y}{dt} &= a_y
\end{align}
$$
where you replace ##a_x## and ##a_y## by the proper expressions involving the forces.

Yes, I'm aware of this. Solving this with ode45 should yield the x and y vectors that I want to plot. I'm just not sure how to define the function itself since it depends on B which in turn depends on y.
$$
\begin{align}
B(y) = B_{0}e^{-y/y_{0}}
\end{align}
$$
 
If you take the array y to contain ##(x,y,v_x,v_y)##, then you would write something like
Code:
function dy = projectile(t,y)
B0 = 1;
y0 = 123;

dy = zeros(4,1);    % a column vector
dy(1) = y(3);
dy(2) = y(4);
dy(3) = B0 * exp(-y(2)/y0) * y(3);
dy(4) = B0 * exp(-y(2)/y0) * y(4);
(Note that the code doesn't correspond to your problem.)
 
cwrn said:
Yes, I'm aware of this. Solving this with ode45 should yield the x and y vectors that I want to plot. I'm just not sure how to define the function itself since it depends on B which in turn depends on y.
$$
\begin{align}
B(y) = B_{0}e^{-y/y_{0}}
\end{align}
$$

You start off your calculations with a known position for the projectile, which means you are going to know an initial value for y. As the calculation progresses, then the values of y will need to be updated depending on your independent variable, which I assume would be time.
 
Back
Top