Análisis experimental de un MRU

profecamor · updated March 10, 2025
import matplotlib.pyplot as plt
import numpy as np

# Datos proporcionados
tiempos = np.array([0, 3.22, 5.87, 8.83, 11.63, 14.39, 17.19, 19.76, 22.94, 25.92, 29.13, 32.17])
distancias = np.array([0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44])

# Calcular las velocidades promedio por tramo
velocidades = (distancias[1:] - distancias[:-1]) / (tiempos[1:] - tiempos[:-1])

# Velocidad promedio
velocidad_promedio = np.mean(velocidades)

# Error estándar de la velocidad promedio (SEM)
sem = np.std(velocidades, ddof=1) / np.sqrt(len(velocidades))

# Tiempos intermedios
tiempos_intermedios = (tiempos[1:] + tiempos[:-1]) / 2

# Ajuste lineal con matriz de covarianza
coeficientes, covarianza = np.polyfit(tiempos, distancias, 1, cov=True)
m, b = coeficientes
error_m = np.sqrt(covarianza[0, 0])
error_b = np.sqrt(covarianza[1, 1])

# Crear la recta ajustada
tiempos_ajuste = np.linspace(min(tiempos), max(tiempos), 100)
distancias_ajuste = m * tiempos_ajuste + b

# Coeficiente de determinación R^2
y_pred = m * tiempos + b
ss_total = np.sum((distancias - np.mean(distancias))**2)
ss_residual = np.sum((distancias - y_pred)**2)
r2 = 1 - (ss_residual / ss_total)

# Función para graficar distancia vs tiempo
def graficar_distancia_tiempo():
    plt.figure(figsize=(10, 5))
    plt.title('Ajuste Lineal de Distancia vs. Tiempo', fontsize=18)
    plt.scatter(tiempos, distancias, color='blue', s=50)
    plt.plot(tiempos_ajuste, distancias_ajuste, color='orange', linestyle='--', label=f'Ajuste lineal: $y = {m:.3f}x + {b:.3f}$\n$R^2 = {r2:.3f}$')
    plt.xlabel('Tiempo $(s)$', fontsize=16)
    plt.ylabel('Distancia $(m)$', fontsize=16)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    plt.grid(True)
    plt.legend(fontsize=12)
    plt.tight_layout()
    plt.show()

# Función para graficar velocidad vs tiempo
def graficar_velocidad_tiempo():
    plt.figure(figsize=(10, 5))
    plt.title('Velocidad vs. Tiempo', fontsize=18)
    plt.scatter(tiempos_intermedios, velocidades, color='red', s=50)
    plt.axhline(np.mean(velocidades), color='blue', linestyle='--', label=f'Velocidad media: {np.mean(velocidades):.3f} m/s')
    plt.xlabel('Tiempo $(s)$', fontsize=16)
    plt.ylabel('Velocidad $(m/s)$', fontsize=16)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    plt.xlim(0, np.max(tiempos))
    plt.legend(fontsize=12)
    plt.grid(True)
    plt.tight_layout()
    plt.show()

# Tabla con tiempos, posiciones y velocidades promedio, por tramo.
print("\nTiempos, Posiciones y Velocidades Promedio, por tramo:")
print("="*70)
print(f"{'Tramo':<8}{'ti(s)':<12}{'ti+1(s)':<12}{'xi(m)':<12}{'xi+1(m)':<12}{'vi(m/s)':<12}")
print("="*70)
for i, (t1, t2, x1, x2, v) in enumerate(zip(tiempos[:-1], tiempos[1:], distancias[:-1], distancias[1:], velocidades)):
    print(f"{i+1:<8}{t1:<12.3f}{t2:<12.3f}{x1:<12.3f}{x2:<12.3f}{v:<12.3f}")
print("="*70)

#Resultados del ajuste linea Distancia Vs tiempo
print("\nResultados del ajuste lineal - Distancia vs. Tiempo")
print("="*60)
print(f" Pendiente o velocidad (m/s): {m:.3f} ± {error_m:.3f} m/s")
print(f" Ordenada al origen (b): {b:.3f} ± {error_b:.3f} m")
print(f" Coeficiente de determinación R²: {r2:.3f}")
print("="*60)

#Resultados del ajuste uniforme Velocidad Vs tiempo
print("\nResultados del ajuste uniforme - Velocidad vs. Tiempo")
print("="*60)
print(f" Error estadístico (SEM) de la velocidad promedio: {sem:.3f} m/s")
print(f" Velocidad promedio: {velocidad_promedio:.3f} ± {sem:.3f} m/s")
print("="*60)

# Llamado a las funciones
graficar_distancia_tiempo()
graficar_velocidad_tiempo()
Output

Comments

Please sign up or log in to contribute to the discussion.