Missile Lauch friction gamma factor - Output deviating from desired output, please help!

2 visualizaciones (últimos 30 días)
Goal:
I'm trying to implement friction into this script of a launch of a missile.
The friction force should be related to the velocity like: Ff = -gamma|v|v.
Subsequently we also have the gravity force acting on the missile: Fg = mg.
The values of ad should be as follows, but I am unable to get this desired output:
ad = [300332, 302763, 303903, 303771, 302384, 299763, 295927, 290896, 284693];
for degrees of launch 37, 39, 41, 43, 45, 47, 49, 51, 53 respectively.
Script:
clear;
close all;
clc;
tic
m = 500;
aT = [];
ad = [];
gamma = 1.0e-5
for i = [37:2:53]
r = 6371 * 10^3;
G = 6.674 * 10^-11;
M = 5.972 * 10^24;
g = (G * M)/(r^2);
theta0 = i;
ax = 0;
ay = r;
v0 = 2000;
vx0 = v0*cosd(theta0);
vy0 = v0*sind(theta0);
x = 0;
y = r;
vx = vx0;
vy = vy0;
T = 0;
dt = 0.01;
at = 0;
landed = 0;
z = 1;
while landed == 0
z = z + 1;
T = T + dt;
xo = x;
yo = y;
x = x + vx * dt;
y = y + vy * dt;
d = sqrt(x^2 + y^2);
alpha = atand(x/y);
g = (G*M)/(d^2);
gy = cosd(alpha) * g;
gx = sind(alpha) * g;
FgY = m * gy;
FgX = m * gx;
FricY = gamma*abs(vy)*vy;
FricX = gamma*abs(vx)*vx;
FnetY = FgY - FricY;
FnetX = FgX - FricX;
vy = vy - (gy * dt) - (FnetY / m)*dt; % This should substract gravity and friction from the velocity, not sure if this is correct.
vx = vx - (gx * dt) - (FnetX / m)*dt; % Same for this line of code
v = vx/sin(alpha);
ax = [ax, x];
ay = [ay, y];
if d < r
landed = 1;
end
end
aT = [aT, T];
distance = (alpha/360) * 2 * pi * r;
ad = [ad, distance];
fprintf('Checked for degree: %.0f\n', i)
end
toc
Output:
ad = [200358, 203662, 205972, 207257, 207539, 206800, 205056, 202324, 198615];
for degrees of launch 37, 39, 41, 43, 45, 47, 49, 51, 53 respectively.
Any help / suggestions are immensly appreciated!
  1 comentario
the cyclist
the cyclist el 20 de En. de 2020
I'm not able to run the code right now, but one suggestion I have is to run your code without the frictional force (for which you can calculate the correct answer by hand), and see if your code is giving the correct answer for that. That way you'll know if it is the friction calculation that is wrong, or something else.

Iniciar sesión para comentar.

Respuesta aceptada

Jim Riggs
Jim Riggs el 20 de En. de 2020
Step 1: Draw a free body diagram that shows the body with all of the forces that act on it and the coordinate frame(s) that are being used.
Step 2: For a point-mass in 2 dimensions, you should be able to use the free body diagram (by inspection) to ensure that you are calculating the force components correctly; sum of the forces in X = m*Ax, sum of forces in Y = m*Ay.
Are forces defined in body or inertial axes? (The aerodynamic force is usually in body axes, but the gravity force is defined in Inertial axes)
Show us this drawing and we can work from there.
  11 comentarios
Jim Riggs
Jim Riggs el 20 de En. de 2020
Editada: Jim Riggs el 20 de En. de 2020
OK. If you compare your definition of the Friction force to my equation for the aerodynamic drag, you get
-gamma * |v| * v = 1/2 AirDensity * Airspeed^2 * DragCoefficient * referenceArea
The |v| * V term is a way of computing Airspeed^2 and preserving the sign, so it can be positive or negative. If we let |v| * v = Airspeed^2 in my equation, we are left with
-gamma = 1/2 AirDensity * DragCoefficient * referenceArea.
So gamma represents an aerodynamic factor which is good for a constant air density, and a constant drag coefficient (the reference area is always constant).
To apply this, you are almost there, with one small change.
The drag force in the X direction is DragForce * Uvx
Note that Uvx = Vx / | V | and V^2 = |V | * | V |, so
If DragForce = 1/2 * AirDensity * | v | * | v | * DragCoefficient * referenceArea
Fx = 1/2 AirDensity | v| * | v| * DragCoefficient * referenceArea * Vx / | v|
substitute -gamma = 1/2 AirDensity * DragCoefficient * referenceArea
Fx = -gamma * | v | * | v | * Vx / | v |
Fx = -gamma * | v | * Vx
Compare this with your equation
FrictX = gamma * abs(vx) * vx;
So, you need to make 2 changes:
1) You need a - sign on gamma
2) the abs(Vx) should be abs(V) the magnitude of the total velocity vector.
El Pepeno
El Pepeno el 20 de En. de 2020
Thank you so much for the help, I will try to figure it out now.
Much appreciated, have a nice week!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Multibody Modeling 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!

Translated by