Ejercicio: 2Eva_2023PAOI_T2 Péndulo vertical amortiguado
literal a
\frac{d^2 \theta}{dt^2} = -\mu \frac{d\theta}{ dt}-\frac{g}{L}\sin (\theta)Se simplifica su forma a:
\frac{d\theta}{dt}= z = f_t(t,\theta,z) \frac{d^2\theta }{dt^2}= z' = -\mu z -\frac{g}{L}\sin (\theta) = g_t(t,\theta,z)se usan los valores dados: g = 9.81 m/s2, L = 2 m
f_t(t,\theta,z) = z g_t(t,\theta,z) = - 0.5 z -\frac{9.81}{2}\sin (\theta)y los valores iniciales para la tabla: θ(0) = π/4 rad, θ’ (0) = 0 rad/s, se complementan los valores en la medida que se aplica el desarrollo.
ti | θ(ti) | θ'(ti)=z |
0 | π/4 | 0 |
0.2 | 0.7161 | -0.6583 |
0.4 | 0.5267 | -0.1156 |
0.6 | 0.2579 | -0.1410 |
… |
literal b
Iteración 1: ti = 0 ; yi = π/4 ; zi = 0
K1y = h * ft(ti,yi,zi) = 0.2*(0) = 0 K1z = h * gt(ti,yi,zi) = 0.2*(-0.5(0) -(9.81/2)sin (π/4) = -0.6930 K2y = h * ft(ti+h, yi + K1y, zi + K1z) = 0.2*(0-0.6930)= -0.1386 K2z = h * gt(ti+h, yi + K1y, zi + K1z) = 0.2*(-0.5(0-0.6930) -(9.81/2)sin(π/4-0) = -0.6237 yi = yi + (K1y+K2y)/2 = π/4+ (0+(-0.1386))/2 = 0.7161 zi = zi + (K1z+K2z)/2 = 0+(-0.6930-0.6237)/2 = -0.6583 ti = ti + h = 0 + 0.2 = 0.2 estimado[i] = [0.2,0.7161,-0.6583]
Iteración 2: ti = 0.2 ; yi = 0.7161 ; zi = -0.6583
K1y = h * ft(ti,yi,zi) = 0.2*(-0.6583) = -0.1317 K1z = h * gt(ti,yi,zi) = 0.2*(- 0.5 ( -0.6583) -(9.81/2)sin (0.7161) = -0.5775 K2y = h * ft(ti+h, yi + K1y, zi + K1z) = 0.2*(-0.6583 -0.5775)= -0.2472 K2z = h * gt(ti+h, yi + K1y, zi + K1z) = 0.2*(- 0.5 (-0.6583 -0.5775) -(9.81/2)sin(0.7161-0.1317) = -0.4171 yi = yi + (K1y+K2y)/2 = 0.7161 + (-0.1317-0.2472)/2 = 0.5267 zi = zi + (K1z+K2z)/2 = -0.6583+(-0.5775-0.4171)/2 = -0.1156 ti = ti + h = 0.2 + 0.2 = 0.4 estimado[i] = [0.4,0.5267,-0.1156]
Iteración 3: ti = 0.4 ; yi = 0.5267 ; zi = -1.156
K1y = h * ft(ti,yi,zi) = 0.2*(-1.156) = -0.2311 K1z = h * gt(ti,yi,zi) = 0.2*(- 0.5(-1.156) -(9.81/2)sin (0.5267) = -0.3771 K2y = h * ft(ti+h, yi + K1y, zi + K1z) = 0.2*(-1.156 -0.3771)= -0.3065 K2z = h * gt(ti+h, yi + K1y, zi + K1z) = 0.2*(- 0.5 ( -1.156 -0.3771) -(9.81/2)sin(0.5267-0.2311) = -0.1322 yi = yi + (K1y+K2y)/2 = 0.5267 + (-0.2311-0.3065)/2 = 0.2579 zi = zi + (K1z+K2z)/2 = -1.156+(-0.3771-0.1322)/2 = -1.410 ti = ti + h = 0.4 + 0.2 = 0.6 estimado[i] = [0.6,0.2579,-1.410]
literal c
resultados del algoritmo:
[ t, y, dyi/dti=z, K1y, K1z, K2y, K2z] [[ 0.000e+00 7.854e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00] [ 2.000e-01 7.161e-01 -6.583e-01 0.000e+00 -6.930e-01 -1.386e-01 -6.237e-01] [ 4.000e-01 5.267e-01 -1.156e+00 -1.317e-01 -5.775e-01 -2.472e-01 -4.171e-01] [ 6.000e-01 2.579e-01 -1.410e+00 -2.311e-01 -3.771e-01 -3.065e-01 -1.322e-01] [ 8.000e-01 -3.508e-02 -1.377e+00 -2.820e-01 -1.089e-01 -3.038e-01 1.756e-01] ...
con h=0.2 se tienen 1/0.2 = 5 tramos por segundo, por lo que para 10 segundo serán 50 tramos. La cantidad de muestras = tramos + 1(valor inicial) = 51
con lo que se puede usar el algoritmo en EDO Runge-Kutta d2y/dx2
literal d
Se observa que la respuesta es oscilante y amortiguada en magnitud como se esperaba según el planteamiento. Con el tiempo se estabilizará en cero.
Instrucciones en Python
# 2Eva_2023PAOI_T2 Péndulo vertical amortiguado import numpy as np import matplotlib.pyplot as plt def rungekutta2_fg(f,g,x0,y0,z0,h,muestras): tamano = muestras + 1 estimado = np.zeros(shape=(tamano,7),dtype=float) # incluye el punto [x0,y0,z0] estimado[0] = [x0,y0,z0,0,0,0,0] xi = x0 yi = y0 zi = z0 for i in range(1,tamano,1): K1y = h * f(xi,yi,zi) K1z = h * g(xi,yi,zi) K2y = h * f(xi+h, yi + K1y, zi + K1z) K2z = h * g(xi+h, yi + K1y, zi + K1z) yi = yi + (K1y+K2y)/2 zi = zi + (K1z+K2z)/2 xi = xi + h estimado[i] = [xi,yi,zi,K1y,K1z,K2y,K2z] return(estimado) # INGRESO theta = y g = 9.8 L = 2 ft = lambda t,y,z: z gt = lambda t,y,z: -0.5*z +(-g/L)*np.sin(y) t0 = 0 y0 = np.pi/4 z0 = 0 h = 0.2 muestras = 51 # PROCEDIMIENTO tabla = rungekutta2_fg(ft,gt,t0,y0,z0,h,muestras) # SALIDA np.set_printoptions(precision=3) print(' [ t, \t\t y, \t dyi/dti=z, K1y,\t K1z,\t K2y,\t K2z]') print(tabla) # Grafica ti = np.copy(tabla[:,0]) yi = np.copy(tabla[:,1]) zi = np.copy(tabla[:,2]) plt.subplot(121) plt.plot(ti,yi) plt.grid() plt.xlabel('ti') plt.title('yi') plt.subplot(122) plt.plot(ti,zi, color='green') plt.xlabel('ti') plt.title('dyi/dti') plt.grid() plt.show()