Determine os modos de vibração por meio do cálculo dos autovalores e autovetores de forma analítica e utilizando um código computacional no Colab.
Passo 1
O enunciado pede que eu determine os modos de vibração (autovalores e autovetores) do corpo rígido apoiado em duas molas, tanto de forma analítica quanto mostrando um código para executar no Colab. Eu observo a figura e pego as seguintes informações da imagem: as molas têm constantes \,k_1 (à esquerda) e \,k_2 (à direita), as distâncias da linha do centro (ponto de rotação/centro de massa) até as molas são \,\ell_1 (esquerda) e \,\ell_2 (direita), as coordenadas generalizadas escolhidas são a translação vertical do centro \,x (positivo para cima) e a rotação em torno do centro \theta (sentido arbitrário). Também assumirei que o corpo tem massa \,m e momento de inércia em relação ao centro \,J.
Perguntas explícitas que iremos responder:
Encontrar analiticamente os autovalores (frequências naturais \omega) do sistema de 2 GDL.
Encontrar analiticamente os autovetores (modos \varphi, razão entre \,x e \theta).
Mostrar um código para calcular numericamente autovalores/autovetores no Colab (Python).
Passo 2
Definição das coordenadas e expressão das deformações das molas (cinemática linearizada).
Quando o corpo tem deslocamento vertical \,x e pequena rotação \theta, a deformação (alongamento) da mola esquerda e da mola direita, medida positiva como aumento de comprimento, são aproximadamente:
\delta_1 = x + \ell_1 \theta, \qquad \delta_2 = x - \ell_2 \theta.
Explicação: um deslocamento vertical \,x afeta ambas as molas igualmente; uma rotação \theta eleva um lado e abaixa o outro — para o lado esquerdo a contribuição é +\ell_1\theta (sinal conforme definição de \theta), e para o lado direito é -\ell_2\theta. Essas fórmulas valem para rotações pequenas (aproximação linear).
Passo 3
Energia potencial elástica e obtenção da matriz de rigidez.
A energia potencial total armazenada nas molas é
V = \tfrac{1}{2}k_1\delta_1^2 + \tfrac{1}{2}k_2\delta_2^2.
Substituindo \delta_1,\delta_2:
V = \tfrac{1}{2}k_1(x+\ell_1\theta)^2 + \tfrac{1}{2}k_2(x-\ell_2\theta)^2.
A matriz de rigidez K no sistema de coordenadas generalizadas (x,\theta) é dada pelos segundos derivadas de V:
Comentário físico: K_{11} é a rigidez translacional efetiva; K_{22} é a rigidez rotacional; K_{12} é o acoplamento translação–rotação (pode ser positivo, negativo ou zero dependendo de \,k_i\ell_i).
Passo 4
Matriz de massa generalizada.
Escolhendo coordenadas x e \theta referidas ao centro de massa, a matriz de massa é diagonal (não há termo de produto massa-inércia entre as coordenadas coordenadas escolhidas):
M = \begin{pmatrix} m & 0 \\[4pt] 0 & J \end{pmatrix},
onde \,m é a massa do conjunto e \,J é o momento de inércia em relação ao centro. Explicação: m multiplica a aceleração vertical e J a aceleração angular; em coordenadas corpo-fixadas centradas no CM não aparecem termos fora da diagonal.]
Passo 5
Forma matricial das equações e problema de autovalores.
As equações do movimento linearizadas para movimentos livres (sem amortecimento) são
M\ddot{\mathbf{q}} + K\mathbf{q} = \mathbf{0},
onde \mathbf{q}=\begin{pmatrix}x\\\ \theta\end{pmatrix}. Procuramos soluções harmônicas do tipo \mathbf{q}(t)=\boldsymbol{\varphi}\,e^{i\omega t}. Substituindo:
(-\omega^2 M + K)\boldsymbol{\varphi} = \mathbf{0}.
Isto é um problema de autovalores generalizado: devemos encontrar \omega^2 (autovalores) tais que exista \boldsymbol{\varphi}\neq\mathbf{0} satisfazendo a equação acima. A condição para soluções não-triviais é
\det(K - \omega^2 M) = 0.
Passo 6
Equação característica e solução para \omega^2 (autovalores).
Defina \lambda=\omega^2. O determinante dá uma equação quadrática em \lambda:
Observação: como \lambda=\omega^2, as frequências naturais são \omega_{1,2}=\sqrt{\lambda_{1,2}} (se \lambda_{i}>0). Para referência alternativa, a mesma solução pode ser escrita (sem dividir por mJ) como
\lambda_{1,2}=\frac{K_{11}J+K_{22}m \pm \sqrt{(K_{11}J-K_{22}m)^2 + 4mJ K_{12}^2}}{2 m J}.
Passo 7
Autovetores (modos) analíticos: razão entre \,x e \theta.
Para cada autovalor \lambda (cada \omega^2), encontramos \boldsymbol{\varphi}=(\varphi_1,\varphi_2)^\top não-nulo resolvendo
(K - \lambda M)\boldsymbol{\varphi}=\mathbf{0}.
Usando a primeira linha dessa matriz:
(K_{11}-m\lambda)\varphi_1 + K_{12}\varphi_2 = 0.
Isto fornece a razão entre os componentes do modo:
ou alternativamente tomar \varphi_1=1 e achar \varphi_2 pela segunda equação. Para obter um modo com norma unida, normaliza-se \boldsymbol{\varphi} dividindo pelo seu comprimento euclidiano ou pela norma mass-weighted \sqrt{\boldsymbol{\varphi}^\top M \boldsymbol{\varphi}}, conforme necessidade (na prática para respostas dinâmicas a força modal a norma mass-weighted é útil).]
Passo 8
Casos especiais e interpretação física (intuição).
Caso simétrico: se k_1=k_2=k e \ell_1=\ell_2=\ell então K_{12}=k\ell-k\ell=0: não há acoplamento translação–rotação. Então as equações se separam e as frequências são
Os modos são puros: \boldsymbol{\varphi}_{\text{trans}}=(1,0)^\top (somente deslocamento vertical) e \boldsymbol{\varphi}_{\text{rot}}=(0,1)^\top (somente rotação). Isso ajuda a interpretar os sinais e valores em casos gerais: o acoplamento desloca as frequências e mistura os modos.
Passo 9
Código para executar no Colab (Python). Cole este bloco como uma célula em um notebook Colab e execute. Primeiro trecho: cálculo numérico com numpy; segundo trecho: simbolicamente com sympy (opcional) para ver expressões analíticas.
# Código Colab: autovalores e autovetores (numérico)
import numpy as np
# parâmetros (exemplo numérico — substitua pelos seus valores)
k1 = 15000.0 # N/m
k2 = 15000.0 # N/m
l1 = 1.2 # m
l2 = 1.2 # m
m = 1200.0 # kg
J = 400.0 # kg m^2
# montar matrizes K e M
K11 = k1 + k2
K12 = k1*l1 - k2*l2
K22 = k1*l1**2 + k2*l2**2
K = np.array([[K11, K12],
[K12, K22]], dtype=float)
M = np.array([[m, 0.0],
[0.0, J]], dtype=float)
# resolver problema generalizado K phi = lambda M phi => lambda = omega^2
# transformamos para matriz padrão A = inv(M) @ K
A = np.linalg.inv(M).dot(K)
eigvals, eigvecs = np.linalg.eig(A)
# ordenar por frequência crescente
idx = np.argsort(eigvals)
eigvals = eigvals[idx]
eigvecs = eigvecs[:, idx]
omegas = np.sqrt(eigvals)
print("omega^2 (rad^2/s^2):", eigvals)
print("omega (rad/s):", omegas)
print("modos (cada coluna é um autovetor [x; theta]):")
print(eigvecs)
# para normalizar modos com norma mass-weighted:
for i in range(eigvecs.shape[1]):
phi = eigvecs[:,i]
norm_m = np.sqrt(phi.T.dot(M).dot(phi))
print("modo", i+1, "norma mass-weighted:", norm_m)
eigvecs[:,i] = phi / norm_m
print("modos normalizados (mass-weighted):")
print(eigvecs)
Opcional — símbolo com sympy para ver as fórmulas analíticas:
Primeiro escreva claramente \,K e \,M com os elementos mostrados.
Depois monte \det(K-\lambda M)=0 e aplique a fórmula quadrática para \lambda. Não tente expandir tudo numericamente antes de aplicar a fórmula; mantenha símbolos até o final se for pedida expressão analítica.
Para o autovetor correspondente a cada \lambda, use a relação \varphi_1 = -\dfrac{K_{12}}{K_{11}-m\lambda}\varphi_2 e escolha uma escala conveniente (por exemplo \varphi_2=1), depois normalize se necessário.
Se o exercício der números, use o código do Passo 9 para checar rapidamente os valores.