# Oscilador armónico amortiguado

Erwin Renzo Franco Diaz


```python
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
sp.init_printing()
```

Si no se ha dado alguna restricción a las cantidades simbólicas con las que se trabaja, $\texttt{sympy}$ buscará la solución más general a la ecuación de movimiento. Esto nos puede llevar a tener soluciones complejas o por casos. Para evitar esto, especificamos la naturaleza de nuestras cantidades. En este caso, el tiempo, el desplazamiento y las condiciones iniciales son reales, mientras que las constantes además, son positivas.


```python
t = sp.symbols('t', real = True)
x = sp.Function('x', real = True)(t)

w = sp.symbols('omega', positive = True)
g = sp.symbols('gamma', positive = True)

x0 = sp.symbols('x_0', real = True)
x0dot = sp.symbols('\dot{x_0}', real = True)

CI = {x.subs(t, 0): x0, sp.diff(x, t).subs(t, 0): x0dot}

eq_damped = sp.Eq(sp.diff(x, (t, 2)) + g*sp.diff(x, t) + w**2*x,  0)

eq_damped
```

## Caso1: $\gamma = 0.1(2\omega)$


```python
g1 = 0.1*2*w 

eq1 = eq_damped.subs(g, g1)
sol1 = sp.dsolve(eq1, x, ics=CI)

sol1
```

## Caso 2: $\gamma = 0.5(2\omega)$


```python
g2 = 0.5*2*w

eq2 = eq_damped.subs(g, g2)
sol2 = sp.dsolve(eq2, x, ics=CI)

sol2
```

## Caso 3: $\gamma = 0.9(2\omega)$


```python
g3 = 0.9*2*w

eq3 = eq_damped.subs(g, g3)
sol3 = sp.dsolve(eq3, x, ics=CI)

sol3 = sol3.rewrite(sp.cos).simplify()
sol3
```


```python
w_num = 0.5
x0_num = 5
x0dot_num = 10

x_num1 = sp.lambdify(t, sol1.subs([(w, w_num), (x0, x0_num), (x0dot, x0dot_num)]).rhs, 'numpy')
x_num2 = sp.lambdify(t, sol2.subs([(w, w_num), (x0, x0_num), (x0dot, x0dot_num)]).rhs, 'numpy')
x_num3 = sp.lambdify(t, sol3.subs([(w, w_num), (x0, x0_num), (x0dot, x0dot_num)]).rhs, 'numpy')

t_plot = np.linspace(0, 50, 1000)
x_plot1 = x_num1(t_plot)
x_plot2 = x_num2(t_plot)
x_plot3 = x_num3(t_plot)

plt.plot(t_plot, x_plot1, t_plot, x_plot2, t_plot, x_plot3)
plt.legend(['$0.3(2\omega)$', '$0.5(2\omega)$', '$0.9(2\omega)$'])
```

# Dos péndulos acoplados

Indicando que los desplazamientos y las velocidades son reales, y que las constantes son positivas es posible resolver el sistema de ecuaciones de manera analítica.


```python
x1_c = sp.Function('x_1', real = True)(t)
x0_c = sp.Function('x_0', real = True)(t)
v = sp.Function('v', real = True)(t)
u = sp.Function('u', real = True)(t)

m, g, k, l = sp.symbols('m, g, k, l', positive = True)

x10, x00, v0, u0 = sp.symbols('x_1^{(0)}, x_2^{(0)}, v_0, u_0')

eq1 = sp.Eq(v, sp.diff(x1_c, t))
eq2 = sp.Eq(u, sp.diff(x0_c, t))
eq3 = sp.Eq(m*sp.diff(v, t) - m*(g/l)*x1_c - k*(x1_c - x0_c), 0)
eq4 = sp.Eq(m*sp.diff(u, t) - m*(g/l)*x0_c - k*(x0_c - x1_c), 0)

eqs = [eq1, eq2, eq3, eq4]

CI = {x1_c.subs(t, 0): x10, x0_c.subs(t, 0): x00, v.subs(t, 0): v0, u.subs(t, 0): u0}

x1_c, x0_c, v, u = sp.dsolve(eqs, [x1_c, x0_c, v, u], ics = CI)

x1_c = x1_c.rewrite(sp.cos).simplify()
x0_c = x0_c.rewrite(sp.cos).simplify()
```

La respuesta que da $\texttt{sympy}$ contiene una parte compleja con una constante arbitraria. Esto se debe a que se tiene una exponencial elevada a la raíz de un número negativo, el cual es complejo, por lo que junto con la $i$ en frente resulta, termina siendo real. Lo que se debe hacer entonces, es eliminar esta exponencial compleja usando la identidad de Euler

$$
e^{i\theta} = \cos{\theta} + i\sin{\theta}.
$$


```python
x1_c
```


```python
x0_c
```


```python
m_num_c = 0.5
g_num_c = 10
k_num_c = 0.5
l_num_c = 1

x10_num = 4
x00_num = -0.5
v0_num = 1
u0_num = 0

subst = [(m, m_num_c), (g, g_num_c), (k, k_num_c), (l, l_num_c), (x10, x10_num), (x00, x00_num), (v0, v0_num), (u0, u0_num)]

x1_num_c = sp.lambdify(t, x1_c.subs(subst).rhs, 'numpy')
x0_num_c = sp.lambdify(t, x0_c.subs(subst).rhs, 'numpy')

x1_plot_c = x1_num_c(t_plot)
x0_plot_c = x0_num_c(t_plot)

plt.plot(t_plot, x1_plot_c, t_plot, x0_plot_c)
plt.legend(['$x_1$', '$x_0$'])
plt.show()
```


```python
x0c
```

37bd4cdf7a60f320abfa48682578205c71edcf3a
ipynb
Jupyter Notebook
week-3/solucionario_week3.ipynb
PCPUNMSM/Summer-School-2020
49fdf5b40a1f71e5da57836a98eb996d2beb17a1
MIT
2020-02-22T18:30:12.000Z
2021-11-14T19:24:23.000Z
week-3/solucionario_week3.ipynb
PCPUNMSM/Summer-School-2020
49fdf5b40a1f71e5da57836a98eb996d2beb17a1
MIT
week-3/solucionario_week3.ipynb
PCPUNMSM/Summer-School-2020
49fdf5b40a1f71e5da57836a98eb996d2beb17a1
MIT
2020-01-31T22:14:00.000Z
2020-02-08T16:37:08.000Z
Qwen/Qwen-72B
1. YES
2. YES