Compare a solução numérica com a solução analítica de um sistema massa-mola. Considere que as consições iniciais são dadas por x(0)=1,0 \mathrm{~mm} e \dot{x}(0)=2,0 \mathrm{mm} / \mathrm{s}. Plote na mesma figura as soluções obtidas para \omega_{n}=0,5 \mathrm{rad} / \mathrm{s}, \omega_{n}=1,0 \mathrm{rad} / \mathrm{s}, \omega_{n}=2,0 \mathrm{rad} / \mathrm{s} e \omega_{n}=4,0 \mathrm{rad} / \mathrm{s}.

Passo 1

O que o enunciado pede e quais dados temos.
  • Pede: comparar a solução numérica com a solução analítica de um sistema massa-mola (oscilador harmônico simples) e plotar as soluções na mesma figura para quatro valores de frequência natural: \omega_n = 0{,}5, \omega_n = 1{,}0, \omega_n = 2{,}0 e \omega_n = 4{,}0 (unidades \mathrm{rad/s}).
  • Condições iniciais dadas: \;x(0)=1{,}0\\ \mathrm{mm} e \;\dot{x}(0)=2{,}0\\ \mathrm{mm/s}.
  • Pressuposição natural razoável (não foi dito o contrário): não há amortecimento nem forçamento externo, logo o modelo é o oscilador harmônico simples.
  • Resultado esperado: (1) obter a solução analítica x(t) para cada \omega_n; (2) integrar numericamente o mesmo sistema e comparar (por exemplo calculando erro máximo e RMS); (3) plotar ambas na mesma figura para cada valor de \omega_n (ou todas juntas diferenciando por cores/linhas).

Passo 2

Escrevendo a equação do movimento e entendendo o que ela significa.
  • Equação do oscilador harmônico livre (massa-mola sem amortecimento nem força externa) é
\ddot{x} + \omega_n^2 x = 0.
Aqui \;x(t) é o deslocamento (em \mathrm{mm}), \dot{x} é velocidade ( \mathrm{mm/s}), \ddot{x} é aceleração ( \mathrm{mm/s^2}), e \omega_n é a frequência natural (em \mathrm{rad/s}).
  • Essa é uma equação diferencial ordinária linear de segunda ordem com coeficientes constantes. A solução geral é uma combinação de seno e cosseno porque as raízes da equação característica são imaginárias puros.

Passo 3

Encontrando a solução analítica geral e aplicando as condições iniciais.
  • Solução geral da equação homogênea:
x(t) = A\cos(\omega_n t) + B\sin(\omega_n t),
onde A e B são constantes determinadas pelas condições iniciais.
  • Aplicando \;x(0)=1{,}0\\ \mathrm{mm}:
x(0)=A\cos(0)+B\sin(0)=A \quad\Longrightarrow\quad A = 1{,}0\\ \mathrm{mm}.
  • Derivando a solução para obter a velocidade:
\dot{x}(t) = -A\omega_n\sin(\omega_n t) + B\omega_n\cos(\omega_n t).
Aplicando \;\dot{x}(0)=2{,}0\\ \mathrm{mm/s}:
\dot{x}(0)=B\omega_n = 2{,}0\quad\Longrightarrow\quad B = \frac{2{,}0}{\omega_n}\\ \mathrm{mm}.
  • Portanto a solução analítica (para qualquer \omega_n) é
x_{\text{analítica}}(t) = 1{,}0\cos(\omega_n t) + \frac{2{,}0}{\omega_n}\sin(\omega_n t)\quad(\text{em mm}).í
Observação física: quando \omega_n é pequeno, o termo \frac{2}{\omega_n} fica grande — velocidade inicial elevada comparada à rapidez das oscilações.

Passo 4

Transformando o problema de 2ª ordem em um sistema de 1ª ordem para integrar numericamente.
  • Para aplicar um integrador numérico padrão (ex.: Runge–Kutta), escrevemos o sistema em forma de primeiro ordem definindo vetores de estado.
  • Defina x_1 = x\) e \(x_2 = \dot{x}\). Então \[\begin{cases} \dot{x}_1 = x_2,\\[4pt] \dot{x}_2 = -\omega_n^2 x_1. \end{cases}
  • Em forma vetorial, com \mathbf{y} = \begin{pmatrix} x_1 \\\ x_2 \end{pmatrix}\], \[\dot{\mathbf{y}} = f(t,\mathbf{y}) = \begin{pmatrix} x_2 \\\\ -\omega_n^2 x_1 \end{pmatrix}.\] - Condição inicial em vetor: \(\mathbf{y}(0) = \begin{pmatrix} 1{,}0 \\\\ 2{,}0 \end{pmatrix} (unidades mm e mm/s).]

Passo 5

Escolhendo o método numérico (motivo da escolha) e explicando como ele funciona (a aula curta).
  • Vou usar o método Runge–Kutta de quarta ordem (RK4). Motivo: é simples de implementar, bastante preciso (erro local O(h^5), erro global O(h^4)) e estável o suficiente para este tipo de ODE linear sem rigidez.
  • Esquema RK4 por passo (para vetor \mathbf{y}, passo h, a partir de t_n,y_n):
\begin{aligned} k_1 &= f(t_n,y_n),\\\ k_2 &= f\big(t_n + \tfrac{h}{2},\; y_n + \tfrac{h}{2}k_1\big),\\\ k_3 &= f\big(t_n + \tfrac{h}{2},\; y_n + \tfrac{h}{2}k_2\big),\\\ k_4 &= f(t_n + h,\; y_n + h k_3),\\\ y_{n+1} &= y_n + \tfrac{h}{6}\,(k_1 + 2k_2 + 2k_3 + k_4). \end{aligned}
  • Aqui k_i são vetores do mesmo formato que y. Cada passo avança a solução em \Delta t = h.
  • Escolha do passo h: deve ser pequeno em comparação com o período das oscilações. O período é T = \tfrac{2\pi}{\omega_n}. Para a maior frequência \omega_n=4{,}0, T \approx 1{,}571\\ \mathrm{s}. Uma escolha segura e prática é h=1\times10^{-3}\\ \mathrm{s} (ou h=1\times10^{-4} se quiser altíssima precisão). h=1\times10^{-3} dá muitos pontos por período e precisão suficiente para comparar com a solução analítica.

Passo 6

Definindo intervalo de tempo e critérios de comparação.
  • Intervalo de tempo sugerido para plot: escolher t\in[0,\,20]\\ \mathrm{s}. Justificativa: para \omega_n=0{,}5 temos T\approx 12{,}566\\ \mathrm{s}, então 20\\ \mathrm{s} mostra mais de um período lento; para frequências maiores mostra várias oscilações.
  • Com h=1\times10^{-3} e t_{\max}=20\\ \mathrm{s} teremos 20001 pontos — aceitável em CPU moderno.
  • Métricas de comparação: erro absoluto ponto a ponto |x_{\text{num}}(t_i)-x_{\text{analítica}}(t_i)|í, e estatísticas como erro máximo \max_i | \cdot | e erro RMS:
\text{RMS} = \sqrt{\frac{1}{N}\sum_{i=1}^N \big(x_{\text{num}}(t_i)-x_{\text{analítica}}(t_i)\big)^2 }.í

Passo 7

Código disponível (Python) para gerar soluções analíticas e numéricas e plotar tudo junto.
  • Abaixo está um script Python completo que você pode copiar e executar. Ele implementa RK4, calcula a solução analítica, computa erro máximo e RMS e plota as curvas (numérica e analítica) para cada \omega_n na mesma figura (cada \omega com cor diferente e estilos distintos para numérico/analítico).
import numpy as np
import matplotlib.pyplot as plt

# parâmetros iniciais
x0 = 1.0       # mm
v0 = 2.0       # mm/s
omegas = [0.5, 1.0, 2.0, 4.0]  # rad/s

# tempo
t0 = 0.0
tmax = 20.0    # s
h = 1e-3

Passo 8

t = np.arange(t0, tmax + h, h)
def f(y, omega):
# y = [x, v]
return np.array([y[1], - (omega**2) * y[0]])
def rk4_integrate(omega):
y = np.zeros((len(t), 2))
y[0, :] = np.array([x0, v0])
for i in range(len(t)-1):
k1 = f(y[i], omega)
k2 = f(y[i] + 0.5hk1, omega)
k3 = f(y[i] + 0.5hk2, omega)
k4 = f(y[i] + hk3, omega)
y[i+1] = y[i] + (h/6.0)
(k1 + 2k2 + 2k3 + k4)
return y[:,0] # retorna apenas x
plt.figure(figsize=(10,6))
colors = [‘C0’,‘C1’,‘C2’,‘C3’]
for idx, omega in enumerate(omegas):
# solução analítica
x_anal = 1.0 * np.cos(omega * t) + (2.0/omega) * np.sin(omega * t)
# solução numérica RK4
x_num = rk4_integrate(omega)
# erros
err = np.abs(x_num - x_anal)
err_max = np.max(err)
err_rms = np.sqrt(np.mean(err**2))
print(f"omega={omega:.1f} rad/s: err_max = {err_max:.3e} mm, err_rms = {err_rms:.3e} mm")
# plot: analítico linha contínua, numérico pontos (ou linha tracejada)
plt.plot(t, x_anal, color=colors[idx], linestyle=’-’, label=f’analítica, ω={omega:.1f}’)
plt.plot(t, x_num, color=colors[idx], linestyle=’–’, linewidth=0.8, label=f’numerica RK4, ω={omega:.1f}’)
plt.xlabel(‘t (s)’)
plt.ylabel(‘x (mm)’)
plt.title(‘Comparação solução analítica e numérica (RK4) - massa-mola’)
plt.legend()
plt.grid(True)
plt.xlim(0, tmax)
plt.tight_layout()
plt.show()

- Observações sobre o código:
  - A função `rk4_integrate` integra o sistema para um dado \(\omega\) retornando o vetor \(x(t)\).
  - O print no loop mostra os erros máximos e RMS para cada \(\omega\); assim você compara quantitativamente.
  - Se o plot ficar "poluído" por todas as curvas juntas, você pode plotar subplots (um por \(\omega\)) em vez de todas juntas.

Passo 9

Interpretação dos resultados e dicas para a prova (como resolver na hora).
  • Solução analítica: memorize a forma geral para o oscilador sem amortecimento:
x(t) = A\cos(\omega_n t) + B\sin(\omega_n t),
e que A=x(0), B=\dot{x}(0)/\omega_n. Essa é a maneira mais direta em prova para obter x(t).
  • Para comparar numericamente: transforme em sistema de 1ª ordem, escolha um integrador de boa ordem (RK4 é padrão) e um passo h pequeno em relação ao período T=\tfrac{2\pi}{\omega_n}. Uma regra prática: tenha pelo menos algumas dezenas de pontos por período (p.ex. 100–1000) para gráficos suaves e baixa discrepância.
  • Como avaliar erro na prova: calcule \max |x_{\text{num}}-x_{\text{anal}}| e \text{RMS}; se ambos forem muito pequenos (tipicamente <10^{-3} mm com h=10^{-3} s neste problema) a solução numérica está boa.
  • Cuidado com \omega_n muito pequeno: o termo \tfrac{2}{\omega_n} pode ficar grande e a amplitude resultante pode ser muito maior; isso não é erro, é física — significa que a mesma velocidade inicial produz maior deslocamento em sistemas lentos.

Passo 10

Resumo do procedimento prático (passo-a-passo curto que você pode usar na prova se pedirem comparar numérico vs analítico rapidamente)
  1. Escreva a ODE: \ddot{x}+\omega_n^2 x=0.
  2. Use solução analítica x(t)=A\cos(\omega_nt)+B\sin(\omega_nt) e aplique A=x(0),\; B=\dot{x}(0)/\omega_n.
  3. Para solução numérica, transforme em sistema de 1ª ordem e use RK4 com passo h pequeno.
  4. Compare por |x_{\text{num}}-x_{\text{anal}}| e faça o gráfico juntos (linhas diferentes).
  5. Interprete os erros e verifique se fazem sentido fisicamente.

Resposta

x(t)=1{,}0\cos(\omega_n t) + \frac{2{,}0}{\omega_n}\sin(\omega_n t)\\ \text{(mm)}
Para cada \omega_n dado:
\omega_n=0{,}5:\quad x(t)=\cos(0{,}5t) + 4{,}0\sin(0{,}5t)\\ \text{(mm)}
\omega_n=1{,}0:\quad x(t)=\cos(1{,}0t) + 2{,}0\sin(1{,}0t)\\ \text{(mm)}
\omega_n=2{,}0:\quad x(t)=\cos(2{,}0t) + 1{,}0\sin(2{,}0t)\\ \text{(mm)}
\omega_n=4{,}0:\quad x(t)=\cos(4{,}0t) + 0{,}5\sin(4{,}0t)\\ \text{(mm)}

Exercícios relacionados