Python
import numpy as np
import matplotlib.pyplot as plt

# Parámetros dados
codigo = 1151921
m = 0.71  # kg
A = 0.121  # Convertido a metros
T = 3.05  # s

# Frecuencia angular
omega = 2 * np.pi / T

# Constante del resorte
k = m * omega**2

# Tiempos especificados y adicionales para suavizar la curva
t_spec = np.array([0, T/8, 3*T/8, T/2, 5*T/8, 3*T/4, 7*T/8, T])
t_add = np.linspace(0, T, 100)  # 100 puntos para suavizar la curva
t_values = np.unique(np.concatenate((t_spec, t_add)))

# Funciones de movimiento armónico simple
x = A * np.cos(omega * t_values)
v = -A * omega * np.sin(omega * t_values)
a = -A * omega**2 * np.cos(omega * t_values)

# Energías
K = 0.5 * m * v**2
U = 0.5 * k * x**2
E = 0.5 * k * A**2 * np.ones_like(t_values)

# Gráficas
# Elongación, Velocidad y Aceleración
plt.figure(figsize=(14, 8))

plt.subplot(3, 1, 1)
plt.plot(t_values, x, 'b-', label='Elongación')
plt.plot(t_spec, A * np.cos(omega * t_spec), 'bo')  # Puntos especificados
for t in t_spec:
    plt.text(t, A * np.cos(omega * t), f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.title('Elongación vs. Tiempo')
plt.xlabel('Tiempo (s)')
plt.ylabel('Elongación (m)')
plt.grid(True)
plt.legend()

plt.subplot(3, 1, 2)
plt.plot(t_values, v, 'r-', label='Velocidad')
plt.plot(t_spec, -A * omega * np.sin(omega * t_spec), 'ro')  # Puntos especificados
for t in t_spec:
    plt.text(t, -A * omega * np.sin(omega * t), f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.title('Velocidad vs. Tiempo')
plt.xlabel('Tiempo (s)')
plt.ylabel('Velocidad (m/s)')
plt.grid(True)
plt.legend()

plt.subplot(3, 1, 3)
plt.plot(t_values, a, 'g-', label='Aceleración')
plt.plot(t_spec, -A * omega**2 * np.cos(omega * t_spec), 'go')  # Puntos especificados
for t in t_spec:
    plt.text(t, -A * omega**2 * np.cos(omega * t), f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.title('Aceleración vs. Tiempo')
plt.xlabel('Tiempo (s)')
plt.ylabel('Aceleración (m/s²)')
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()

# Energías en función del tiempo
plt.figure(figsize=(14, 8))

plt.plot(t_values, K, 'b-', label='Energía Cinética')
plt.plot(t_spec, 0.5 * m * (-A * omega * np.sin(omega * t_spec))**2, 'bo')  # Puntos especificados
for t in t_spec:
    plt.text(t, 0.5 * m * (-A * omega * np.sin(omega * t))**2, f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.plot(t_values, U, 'r-', label='Energía Potencial')
plt.plot(t_spec, 0.5 * k * (A * np.cos(omega * t_spec))**2, 'ro')  # Puntos especificados
for t in t_spec:
    plt.text(t, 0.5 * k * (A * np.cos(omega * t))**2, f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.plot(t_values, E, 'm-', label='Energía Total')
plt.title('Energía Cinética, Potencial y Total vs. Tiempo')
plt.xlabel('Tiempo (s)')
plt.ylabel('Energía (J)')
plt.grid(True)
plt.legend()
plt.show()

# Energías en función de la posición
plt.figure(figsize=(14, 8))

plt.plot(x, K, 'b-', label='Energía Cinética')
plt.plot(A * np.cos(omega * t_spec), 0.5 * m * (-A * omega * np.sin(omega * t_spec))**2, 'bo')  # Puntos especificados
for t in t_spec:
    plt.text(A * np.cos(omega * t), 0.5 * m * (-A * omega * np.sin(omega * t))**2, f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.plot(x, U, 'r-', label='Energía Potencial')
plt.plot(A * np.cos(omega * t_spec), 0.5 * k * (A * np.cos(omega * t_spec))**2, 'ro')  # Puntos especificados
for t in t_spec:
    plt.text(A * np.cos(omega * t), 0.5 * k * (A * np.cos(omega * t))**2, f'{round(t, 4)}', fontsize=8, verticalalignment='bottom')
plt.title('Energía Cinética y Potencial vs. Posición')
plt.xlabel('Posición (m)')
plt.ylabel('Energía (J)')
plt.grid(True)
plt.legend()
plt.show()