Este trabalho apresenta um modelo matemático para descrever a trajetória e velocidade de um saltador de Bungee Jumping, utilizando o método numérico de Runge Kutta de 4ª ordem para resolver as equações diferenciais do movimento. O trabalho aborda tanto a fase de queda livre quanto o movimento restringido pela corda elástica, considerando efeitos de amortecimento viscoso e forças aerodinâmicas.
Algumas hipóteses simplificadoras foram adotadas. Por exemplo, o saltador percorrerá a trajetoria apenas na vertical, desprezando o delocamento lateral provocado por ventos. Obteremos assim um modelo unidimensional.
Onde:
Com termos adicionais:
Onde as constantes são:
\[ \begin{aligned} k_1 &= f_1(t_n, v_n) \\ k_2 &= f_1(t_n + \frac{h}{2}, v_n + \frac{h}{2}k_1) \\ k_3 &= f_1(t_n + \frac{h}{2}, v_n + \frac{h}{2}k_2) \\ k_4 &= f_1(t_n + h, v_n + hk_3) \end{aligned} \]Com constantes:
\[ \begin{aligned} k_1 &= f_3(v_n) \\ l_1 &= f_2(y_n, v_n) \\ k_2 &= f_3(v_n + \frac{h}{2}l_1) \\ l_2 &= f_2(y_n + \frac{h}{2}k_1, v_n + \frac{h}{2}l_1) \\ k_3 &= f_3(v_n + \frac{h}{2}l_2) \\ l_3 &= f_2(y_n + \frac{h}{2}k_2, v_n + \frac{h}{2}l_2) \\ k_4 &= f_3(v_n + hl_3) \\ l_4 &= f_2(y_n + hk_3, v_n + hl_3) \end{aligned} \]O movimento no bungee jumping é descrito por equações diferenciais de segunda ordem, que podem ser transformadas em sistemas de primeira ordem para aplicação do método de Runge-Kutta.
EDO original (segunda ordem):
\[ \frac{d^2y}{dt^2} = g \]Sistema equivalente (duas EDOs de primeira ordem):
\[ \begin{cases} \displaystyle \frac{dy}{dt} = v \\ \displaystyle \frac{dv}{dt} = g \end{cases} \]EDO original (segunda ordem):
\[ \frac{d^2y}{dt^2} = g - \frac{k}{m}(y - L) - \frac{c}{m}v \]Sistema equivalente:
\[ \begin{cases} \displaystyle \frac{dy}{dt} = v \\ \displaystyle \frac{dv}{dt} = g - \frac{k}{m}(y - L) - \frac{c}{m}v \end{cases} \]
# Modelo de Bungee Jumping - Solução Numérica em Python
import numpy as np
import matplotlib.pyplot as plt
# Parâmetros do modelo
mc = 70 # Massa do saltador (kg)
L = 50 # Comprimento da corda (m)
k = 100 # Rigidez da corda (N/m)
c = 15 # Coeficiente de amortecimento (Ns/m)
g = 9.81 # Gravidade (m/s²)
# Condições iniciais
y0 = 0 # Posição inicial (m)
v0 = 0 # Velocidade inicial (m/s)
t0, t_total = 0, 60 # Tempo inicial e total (s)
h = 0.1 # Passo de tempo (s)
# Pré-alocação de arrays
t = np.arange(t0, t_total + h, h)
y = np.zeros_like(t)
v = np.zeros_like(t)
y[0], v[0] = y0, v0
# Funções das equações diferenciais
def f1(v):
return g - 0.1*v*abs(v) # Queda livre com arrasto
def f2(y, v):
return g - (k/mc)*max(y-L,0) - (c/mc)*v # Corda tensionada
# Implementação do Runge-Kutta 4ª ordem
for i in range(len(t) - 1):
if y[i] <= L: # Queda livre
k1 = f1(v[i])
k2 = f1(v[i] + 0.5*h*k1)
k3 = f1(v[i] + 0.5*h*k2)
k4 = f1(v[i] + h*k3)
v[i+1] = v[i] + (h/6)*(k1 + 2*k2 + 2*k3 + k4)
y[i+1] = y[i] + h*v[i]
else: # Movimento restringido
k1_v = f2(y[i], v[i])
k1_y = v[i]
k2_v = f2(y[i] + 0.5*h*k1_y, v[i] + 0.5*h*k1_v)
k2_y = v[i] + 0.5*h*k1_v
k3_v = f2(y[i] + 0.5*h*k2_y, v[i] + 0.5*h*k2_v)
k3_y = v[i] + 0.5*h*k2_v
k4_v = f2(y[i] + h*k3_y, v[i] + h*k3_v)
k4_y = v[i] + h*k3_v
y[i+1] = y[i] + (h/6)*(k1_y + 2*k2_y + 2*k3_y + k4_y)
v[i+1] = v[i] + (h/6)*(k1_v + 2*k2_v + 2*k3_v + k4_v)
# Cálculos adicionais
v_terminal = np.sqrt(2*mc*g/(1.225*0.5*0.04)) # Velocidade terminal teórica
print(f"Velocidade terminal teórica: {v_terminal:.2f} m/s")
# Gráficos
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(t, y, 'b-', linewidth=2, label='Posição')
plt.axhline(y=L, color='r', linestyle='--', label='Comprimento da corda')
plt.ylabel('Altura (m)')
plt.title('Modelo de Bungee Jumping')
plt.legend()
plt.grid(True)
plt.subplot(2, 1, 2)
plt.plot(t, v, 'm-', linewidth=2, label='Velocidade')
plt.xlabel('Tempo (s)')
plt.ylabel('Velocidade (m/s)')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
%% Modelo Físico de Bungee Jumping - Solução Numérica com Runge-Kutta 4ª Ordem
clc; clear; close all;
%% Parâmetros
mc = 70; % Massa do saltador (kg)
L = 40; % Comprimento da corda (m)
k = 80; % Rigidez (N/m)
c = 10; % Amortecimento (Ns/m)
g = 9.81; % Gravidade
% Condições Iniciais
y0 = 0; v0 = 0; t0 = 0; t_total = 60; h = 0.05;
%% Equações
f1 = @(v) g - 0.1*v*abs(v); % Queda livre com arrasto
f2 = @(y, v) g - (k/mc)*max(y-L,0) - (c/mc)*v; % Corda tensionada
%% Simulação RK4
t = t0:h:t_total;
N = length(t);
y = zeros(1,N); v = zeros(1,N);
y(1) = y0; v(1) = v0;
for i = 1:N-1
if y(i) <= L
% Queda livre
k1 = f1(v(i));
k2 = f1(v(i) + 0.5*h*k1);
k3 = f1(v(i) + 0.5*h*k2);
k4 = f1(v(i) + h*k3);
v(i+1) = v(i) + (h/6)*(k1 + 2*k2 + 2*k3 + k4);
y(i+1) = y(i) + h*v(i);
else
% Corda tensionada
k1_v = f2(y(i), v(i));
k1_y = v(i);
k2_v = f2(y(i)+0.5*h*k1_y, v(i)+0.5*h*k1_v);
k2_y = v(i)+0.5*h*k1_v;
k3_v = f2(y(i)+0.5*h*k2_y, v(i)+0.5*h*k2_v);
k3_y = v(i)+0.5*h*k2_v;
k4_v = f2(y(i)+h*k3_y, v(i)+h*k3_v);
k4_y = v(i)+h*k3_v;
y(i+1) = y(i) + (h/6)*(k1_y + 2*k2_y + 2*k3_y + k4_y);
v(i+1) = v(i) + (h/6)*(k1_v + 2*k2_v + 2*k3_v + k4_v);
end
end
%% Gráficos
figure('Position', [100 100 800 600]);
subplot(2,1,1);
plot(t, y, 'b', 'LineWidth', 2);
hold on;
line([t(1) t(end)], [L L], 'Color', 'r', 'LineStyle', '--', 'LineWidth', 1.5);
title('Posição vs Tempo');
ylabel('Altura (m)');
legend('Posição', 'Comprimento da corda', 'Location', 'best');
grid on;
subplot(2,1,2);
plot(t, v, 'm', 'LineWidth', 2);
title('Velocidade vs Tempo');
ylabel('Velocidade (m/s)'); xlabel('Tempo (s)');
grid on;
%% Resultados
fprintf('=== RESULTADOS ===\n');
fprintf('Altura máxima alcançada: %.2f m\n', max(y));
fprintf('Velocidade máxima: %.2f m/s\n', min(v));
# Modelo de Bungee Jumping - Solução Numérica no Maple
restart;
with(plots):
with(DEtools):
# Parâmetros do modelo
mc := 70: # Massa (kg)
L := 50: # Comprimento da corda (m)
k := 100: # Rigidez (N/m)
c := 15: # Amortecimento (Ns/m)
g := 9.81: # Gravidade (m/s²)
# Equação diferencial
bungee_eq := diff(y(t), t$2) =
g - piecewise(y(t) < L, 0, (k/mc)*(y(t)-L) + (c/mc)*diff(y(t), t)):
# Condições iniciais
ics := y(0) = 0, D(y)(0) = 0:
# Solução numérica
sol := dsolve({bungee_eq, ics}, y(t), numeric, output=listprocedure):
Y := eval(y(t), sol): # Posição
V := eval(diff(y(t), t), sol): # Velocidade
# Cálculo do alongamento máximo
E := L + (mc * g) / k:
L_max := E + sqrt(E^2 - L^2):
printf("Alongamento máximo da corda: %.2f m\n", L_max);
# Plotagem
p1 := plot(Y, 0..60, color=blue, thickness=2, legend="Posição [m]",
labels=["Tempo (s)", ""], title="Modelo de Bungee Jumping"):
p2 := plot(V, 0..60, color=red, thickness=2, legend="Velocidade [m/s]"):
display(p1, p2, size=[800,400]);