Ejercicio: 2Eva_IT2015_T2 Deflexión de mástil
\frac{\delta ^2 y}{\delta x^2} = \frac{f}{2EI} (L-x)^2 x= 0, y = 0, \frac{\delta y}{\delta x} = 0Ecuación en forma estandarizada:
y'' = \frac{f}{2EI} (L-x)^2Sistema de ecuaciones
y' = z = f(x,y,z) z' = \frac{f}{2EI} (L-x)^2 = g(x,y,z)siendo:
\frac{f}{2EI} =\frac{60}{2(1.25 \times 10 ^{-8}) (0.05)} = 4.8 \times 10^{-6}El mástil mide L=30 m y se requieren 30 intervalos, entonces h = 30/30 = 1.
Usando muestras = tramos +1 = 31
Se plantea una solución usando Runge Kutta de 2do Orden
f(x,y,z) = z g(x,y,z) = (4.8 \times 10^{-6})(30-x)^2Desarrollo analítico
Las iteraciones se realizan para llenar los datos de la tabla,
i | xi | yi | zi |
0 | 0 | 0 | 0 |
1 | 1 | 0.00216 | 0.00417 |
2 | 2 | 0.00835 | 0.00807 |
3 | 3 | tarea | … |
iteración 1
i = 0 ; x0= 0; y0 = 0; z0 = 0
K_{1y} = h f(x_0,y_0, z_0)= 1(0) = 0K_{1z} = h g(x_0,y_0, z_0) = = 1(4.8 \times 10^{-6})(30-0)^2 = 0.00432 K_{2y} = h f(x_0+h,y_0+K_{1y}, z_0+K_{1z}) = = 1(0+0.00432) = 0.00432 K_{2z} = h g(x_0+h,y_0+K_{1y}, z_0+K_{1z}) = = 1(4.8 \times 10^{-6})(30-(0+1))^2 = 0.00403 y_1 = y_0 + \frac{K_{1y}+K_{2y}}{2} = = 0 + \frac{0+0.00432}{2} = 0.00216 z_1 = z_0 + \frac{K_{1z}+K_{2z}}{2} = = 0 + \frac{0.00432+0.00403}{2} = 0.00417
iteración 2
i = 2 ; x1= 1; y1 = 0.00216; z1 = 0.00417
K_{1y} = h f(x_1,y_1, z_1)= 1(0.00417) = 0.00417 K_{1z} = h g(x_1,y_1, z_1) = = 1(4.8 \times 10^{-6})(30-1)^2 = 0.00403 K_{2y} = h f(x_1+h,y_1+K_{1y}, z_1+K_{1z}) = = 1(0.00417+0.00403) = 0.00821 K_{2z} = h g(x_1+h,y_1+K_{1y}, z_1+K_{1z}) = = 1(4.8 \times 10^{-6})(30-(1+1))^2 = 0.00376 y_2 = y_1 + \frac{K_{1y}+K_{2y}}{2} = = 0.00216 + \frac{0.00417+0.00821}{2} = 0.00835 z_2 = z_2 + \frac{K_{1z}+K_{2z}}{2} = = 0.00417 + \frac{0.00403+0.00376}{2} = 0.00807iteración 3
i = 2; x2= 2; y2 = 0.00835; z2 = 0.00807
tarea …
Para facilitar los cálculos se propone usa el algoritmo en Python, como se describe en la siguiente sección.
Algoritmo en Python
Al usar el algoritmo se puede comparar los resultados entre Runge-Kutta de 2do orden y de 4to Orden.
De los resultados se presenta la siguiente gráfica
Observe en la gráfica la diferencia de escalas entre los ejes.
Runge Kutta 2do Orden [x, y, z] [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 1.00000000e+00 2.16000000e-03 4.17840000e-03] [ 2.00000000e+00 8.35680000e-03 8.07840000e-03] [ 3.00000000e+00 1.83168000e-02 1.17096000e-02] [ 4.00000000e+00 3.17760000e-02 1.50816000e-02] [ 5.00000000e+00 4.84800000e-02 1.82040000e-02] ... [ 2.90000000e+01 9.29856000e-01 4.32216000e-02] [ 3.00000000e+01 9.73080000e-01 4.32240000e-02] [ 3.10000000e+01 1.01630400e+00 4.32264000e-02]]
Runge Kutta 4do Orden [x, y, z] [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] [ 1.00000000e+00 2.11240000e-03 4.17760000e-03] [ 2.00000000e+00 8.26240000e-03 8.07680000e-03] [ 3.00000000e+00 1.81764000e-02 1.17072000e-02] [ 4.00000000e+00 3.15904000e-02 1.50784000e-02] [ 5.00000000e+00 4.82500000e-02 1.82000000e-02] ... [ 2.90000000e+01 9.28800400e-01 4.31984000e-02] [ 3.00000000e+01 9.72000000e-01 4.32000000e-02] [ 3.10000000e+01 1.01520040e+00 4.32016000e-02]] >>>
Las instrucciones en Python obtener los resultados:
# 2Eva_IT2015_T2 Deflexión de mástil # solución propuesta: edelros@espol.edu.ec import numpy as np def rungekutta2fg(fx,gx,x0,y0,z0,h,muestras): tamano = muestras + 1 estimado = np.zeros(shape=(tamano,3),dtype=float) # incluye el punto [x0,y0] estimado[0] = [x0,y0,z0] xi = x0 yi = y0 zi = z0 for i in range(1,tamano,1): K1y = h * fx(xi,yi,zi) K1z = h * gx(xi,yi,zi) K2y = h * fx(xi+h, yi + K1y, zi + K1z) K2z = h * gx(xi+h, yi + K1y, zi + K1z) yi = yi + (K1y+K2y)/2 zi = zi + (K1z+K2z)/2 xi = xi + h estimado[i] = [xi,yi,zi] return(estimado) def rungekutta4fg(fx,gx,x0,y0,z0,h,muestras): tamano = muestras + 1 estimado = np.zeros(shape=(tamano,3),dtype=float) # incluye el punto [x0,y0] estimado[0] = [x0,y0,z0] xi = x0 yi = y0 zi = z0 for i in range(1,tamano,1): K1y = h * fx(xi,yi,zi) K1z = h * gx(xi,yi,zi) K2y = h * fx(xi+h/2, yi + K1y/2, zi + K1z/2) K2z = h * gx(xi+h/2, yi + K1y/2, zi + K1z/2) K3y = h * fx(xi+h/2, yi + K2y/2, zi + K2z/2) K3z = h * gx(xi+h/2, yi + K2y/2, zi + K2z/2) K4y = h * fx(xi+h, yi + K3y, zi + K3z) K4z = h * gx(xi+h, yi + K3y, zi + K3z) yi = yi + (K1y+2*K2y+2*K3y+K4y)/6 zi = zi + (K1z+2*K2z+2*K3z+K4z)/6 xi = xi + h estimado[i] = [xi,yi,zi] return(estimado) # INGRESO f = 60 L = 30 E = 1.25e8 I = 0.05 x0 = 0 y0 = 0 z0 = 0 tramos = 30 fx = lambda x,y,z: z gx = lambda x,y,z: (f/(2*E*I))*(L-x)**2 # PROCEDIMIENTO muestras = tramos + 1 h = L/tramos tabla2 = rungekutta2fg(fx,gx,x0,y0,z0,h,muestras) xi2 = tabla2[:,0] yi2 = tabla2[:,1] zi2 = tabla2[:,2] tabla4 = rungekutta4fg(fx,gx,x0,y0,z0,h,muestras) xi4 = tabla4[:,0] yi4 = tabla4[:,1] zi4 = tabla4[:,2] # SALIDA print('Runge Kutta 2do Orden') print(' [x, y, z]') print(tabla2) print('Runge Kutta 4do Orden') print(' [x, y, z]') print(tabla4) # GRAFICA import matplotlib.pyplot as plt plt.plot(xi2,yi2, label='Runge-Kutta 2do Orden') plt.plot(xi4,yi4, label='Runge-Kutta 4do Orden') plt.title('Deflexión de mástil') plt.xlabel('x') plt.ylabel('y: deflexión') plt.legend() plt.grid() plt.show()