import numpy as np
import matplotlib.pyplot as plt
# Asignar masa directamente (para evitar problemas de interacción)
m = 1.0 # Masa fija en kg
print(f"Se usará una masa de {m} kg por defecto.")
# Parámetros del sistema
k = 10.0 # constante del resorte (N/m)
c = 0.5 # coeficiente de amortiguación (N*s/m)
# Condiciones iniciales
x0 = 1.0 # posición inicial (m)
v0 = 0.0 # velocidad inicial (m/s)
# Tiempo de simulación
t_final = 10.0 # tiempo final de simulación (s)
dt = 0.01 # paso de tiempo (s)
# Crear un arreglo para almacenar los resultados
t = np.arange(0, t_final, dt)
x = np.zeros(len(t))
v = np.zeros(len(t))
# Condiciones iniciales
x[0] = x0
v[0] = v0
# Aplicar el método de Euler
for i in range(1, len(t)):
a = (-k * x[i-1] - c * v[i-1]) / m
v[i] = v[i-1] + a * dt
x[i] = x[i-1] + v[i] * dt
"""
Teoría del Método de Euler:
El método de Euler es un procedimiento numérico sencillo para aproximar soluciones a ecuaciones diferenciales ordinarias (EDO) de primer orden.
Se basa en la idea de que la pendiente de la solución en un punto puede aproximarse con la derivada evaluada en ese punto.
**Ecuación diferencial general:**
dy/dt = f(t, y)
Donde:
- t es la variable independiente (generalmente tiempo).
- y es la función que queremos aproximar.
- f(t, y) es la derivada de y respecto a t, que determina la pendiente en cada punto.
**Fórmula del Método de Euler:**
y[n+1] = y[n] + f(t[n], y[n]) * dt
t[n+1] = t[n] + dt
Donde:
- y[n] es la aproximación actual de la solución.
- y[n+1] es la nueva aproximación después de un paso.
- dt es el paso de tiempo o incremento.
**Ventajas del método de Euler:**
1. Es simple de implementar y computacionalmente eficiente.
2. Es adecuado para sistemas dinámicos básicos o como punto de partida para métodos más complejos.
**Limitaciones del método de Euler:**
1. Puede ser inexacto si el paso de tiempo (dt) es grande.
2. Tiende a acumular errores de truncamiento, especialmente en problemas rígidos o con soluciones rápidamente cambiantes.
3. Es explícito, lo que significa que puede no ser estable para ciertos problemas con pasos grandes.
**Aplicación en el sistema masa-resorte-amortiguador:**
En el problema actual, utilizamos el método de Euler para resolver las ecuaciones diferenciales que describen el movimiento de un sistema masa-resorte con amortiguación:
x''(t) + (c/m) * x'(t) + (k/m) * x(t) = 0
Estas ecuaciones se descomponen en un sistema de dos ecuaciones de primer orden:
v'(t) = (-k/m) * x(t) - (c/m) * v(t)
x'(t) = v(t)
Y se resuelven iterativamente con el método de Euler.
"""
# Graficar los resultados
plt.plot(t, x)
plt.xlabel('Tiempo (s)')
plt.ylabel('Posición (m)')
plt.title('Vibración de un sistema de masa-resorte-amortiguador')
plt.grid(True)
plt.show()
To embed this project on your website, copy the following code and paste it into your website's HTML: