How do I implement friction into my script?

조회 수: 5 (최근 30일)
The Legend
The Legend 2020년 1월 19일
clear;
close all;
clc;
tic
aT = 0;
ad = 0;
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 = 3000;
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;
vy = vy - (gy * dt);
vx = vx - (gx * dt);
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
This is a model that I've created for calculating the distance a missile travels under the following conditions:
velocity = 2000 m / s
gravity = dependent on height
distance = influenced by curvature of the earth
friction = not present
Now, I am trying to implement friction into my script and I know that the friction force is related to the speed by a coefficient:
Ff = gamma * | v | * v
With Ff and v being vectors in the direction of the missile.
Could anyone please give me a hint to what I could do to implement this relation into the script.
I will then alternate gamma and compare the results of the script to get the best value for gamma.

채택된 답변

Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato 2020년 1월 19일
Friction is a force that produces acceleration which changes the velocity, so if you add an additional term to the velocity update you may get the effect that you want to. Theoretically you would need to define the mass of the missile, but this can be controlled by the parameter gamma (both are constant, costant*constant = constant), in the end you will have something like:
gamma = 1e-5;
vy = vy - (gy * dt) - gamma*abs(vy)*vy*dt;
vx = vx - (gx * dt) - gamma*abs(vx)*vx*dt;
  댓글 수: 3
Jim Riggs
Jim Riggs 2020년 1월 26일
편집: Jim Riggs 2020년 1월 26일
This equation is not the correct form.
it should be
Vtot = sqrt(vx^2+vy^2);
vy = vy - dt * (gy + gamma*Vtot*vy/mass);
vx = vx - dt * (gx + gamma*Vtot*vy/mass);
the product gamma*Vtot*vx is a FORCE in the x direction.
Force/mass is an accleration in the x direction.
(although, I suppose that is is possible that the 1/mass factor is already included in gamma, so if this is the case, then the equation should be:
vy = vy - dt * (gy + gamma*Vtot*vy);
vx = vx - dt * (gx + gamma*Vtot*vx);
For more detail on the Vtot * vx factor see the discussion here
Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato 2020년 1월 26일
You're right, it should be Vtot. I didn't reflect enough time at first and gave a too quick response. Thanks for coming back to clear this even though it was already in the other question.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Gamma Functions에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by