Experiencia Teorico-Experimental: Llenado y vaciado de tanques.¶
Por: Karen Sofía Rodríguez, Jeison Fernando Puin, Enoth Salcedo, Brayan Alejandro Barón
PROCESO DE DESCARGA!!¶
Para este proceso de descarga, diseñamos un tanque que tuviera las siguientes medidas:
40cm de circunferencia, por lo tanto, el tanque tiene 20/π (6.366197724) cm de radio 45 cm de altura, de los cuales 40cm son usados para contener el líquido
Para hallar el volumen, haremos un pequeño sólido de revolución
from matplotlib import pyplot as plt
from sympy import symbols, sqrt, integrate, Integral
from sympy.abc import x
import sympy as sp
import numpy as np
import math
# Sólido de revolución para hallar el volumen del tanque
h = 40
x_val = np.linspace(0, h)
r = (20)/(np.pi)
print("El radio es de " + str(r) + " cm y la altura de tu cilindro es de " + str(h) + " cm")
print("Hacemos la integral:")
x = symbols('x', real = True)
g_x = (r)**2
volumen = sp.integrate(g_x * sp.pi, (x, 0,h)).evalf()
print( volumen , "centímetros cúbicos")
print((sp.Rational(volumen, 1000).evalf()) , "litros")
#Gráfica del cilindro
radius = r
height = h
u = sp.Symbol('u')
v = sp.Symbol('v')
x = radius * sp.cos(u)
y = radius * sp.sin(u)
z = v
x_func = sp.lambdify((u, v), x, 'numpy')
y_func = sp.lambdify((u, v), y, 'numpy')
z_func = sp.lambdify((u, v), z, 'numpy')
u_vals = np.linspace(0, 2*np.pi, 100)
v_vals = np.linspace(0, height, 100)
U, V = np.meshgrid(u_vals, v_vals)
X = x_func(U, V)
Y = y_func(U, V)
Z = z_func(U, V)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, color='b', alpha=0.6)
ax.set_xlim([-radius, radius])
ax.set_ylim([-radius, radius])
ax.set_zlim([0, height])
ax.set_box_aspect([1, 1, 2])
plt.show()
El radio es de 6.366197723675814 cm y la altura de tu cilindro es de 40 cm Hacemos la integral: 5092.95817894065 centímetros cúbicos 5.09295817894065 litros
CÁLCULOS TEÓRICOS...¶
Una vez con todas las medidas, podemos evaluar las diferentes ecuaciones y gráficos teóricos, para luego compararlo con los experimentales...
Coeficiente de descarga Kd:¶
Radio r = Radio del orificio de salida = 0.0025m
Radio R = Radio del tanque = 0.063661...m
\begin{equation} K_d = \frac{r^{2}}{R^{2}} \sqrt{2 g_l} \end{equation}\begin{equation} K_d = \frac{0.0025^{2}}{{\frac{0.2}{\pi}}^{2}} \sqrt{2 (9.8)} \end{equation}\begin{equation} K_d = 6.827281456 * 10^{-3} \end{equation}Altura H_0, Raiz de H_0¶
\begin{equation} H_0 = 0.4 \end{equation}\begin{equation} \sqrt{H_0} = \frac{\sqrt{10}}{5} = 0.632455532... \end{equation}Función lineal √h = - K_d / 2 * t + C¶
Constante de integración C = √H_0 = 0.632455532
\begin{equation} \sqrt{H_0} = \frac{-K_d}{2} t + \sqrt{H_0} \end{equation}\begin{equation} \sqrt{H_0} = -0.003413640t + 0.632455532 \end{equation}Función cuadrática h = K_d^2 / 2 * t^2 - kdt C + c^2¶
\begin{equation} h = \frac{K_d^{2}}{4} t^{2} - K_d t C + C^{2} \end{equation}\begin{equation} h = 1.165294302 * 10^{-5} t^{2} - 4.317951926*10^{-3} t + 0.4 \end{equation}Derivada (dh/dt) de la función cuadrática¶
(Redondeando los decimales)
\begin{equation} \frac{dh}{dt} = \frac{11 t- 2155}{500000} \end{equation}\begin{equation} \frac{dh}{dt} = 2.2 * 10 ^{-5} t - 0.00431 \end{equation}#Gráficos teóricos
import matplotlib.pyplot as plt
import numpy as np
# Definir las funciones
def sqrt_H0(t):
return -1* 0.003413640 * t + 0.632455532
def h(t):
return 1.165294302e-5 * t**2 - 4.317951926e-3 * t + 0.4
def dh_dt(t):
return 2.2e-5 * t - 0.00431
# Crear un rango de valores para t
t_values = np.linspace(0, 1000, 400)
# Evaluar las funciones
sqrt_H0_values = sqrt_H0(t_values)
h_values = h(t_values)
dh_dt_values = dh_dt(t_values)
# Crear las gráficas
plt.figure(figsize=(18, 6))
# Gráfico de sqrt(H_0)
plt.subplot(1, 3, 1)
plt.plot(t_values, sqrt_H0_values, label=r'$\sqrt{H_0} = -0.003413640t + 0.632455532$')
plt.title(r'Gráfico de $\sqrt{H_0}$')
plt.xlabel('t')
plt.ylabel(r'$\sqrt{H_0}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 1])
# Gráfico de h(t)
plt.subplot(1, 3, 2)
plt.plot(t_values, h_values, label='h(t)')
plt.title('Gráfico de h(t)')
plt.xlabel('t')
plt.ylabel('h')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 0.5])
# Gráfico de dh/dt
plt.subplot(1, 3, 3)
plt.plot(t_values, dh_dt_values, label=r'$\frac{dh}{dt}$', color='blue')
plt.title(r'Gráfico de $\frac{dh}{dt}$')
plt.xlabel('t')
plt.ylabel(r'$\frac{dh}{dt}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([-0.005, 0.001])
# Mostrar las gráficas
plt.tight_layout()
plt.show()
CÁLCULOS EXPERIMENTALES!¶
Al hacer el vaciado del tanque experimental, obtuvimos varios datos con Tracker Video Analysis. Aproximadamente 1800 datos, que se ajustan a una función de grado 2 que corresponde a h(t)
Función ajustada :
\begin{equation} h = 1 * 10 ^{-5} t^{2} - 0.0042 t + 0.3839 \end{equation}Esta función ya está en su forma más simple, por lo tanto, no requerimos acceder a polinomios de Taylor para su aproximación.
De esta función podemos inferir que:
\begin{equation} C^{2} = 0.3839 \end{equation}\begin{equation} C = 0.619596643... \end{equation}\begin{equation} K_d C = -0.0042 \end{equation}\begin{equation} K_d = -6.778603544... * 10^{-3} \end{equation}\begin{equation} \sqrt{H_0} = C = 0.619596643... \end{equation}\begin{equation} H_0 = 0.3839 \end{equation}\begin{equation} \text{Por lo tanto, las funciones} \sqrt{H_0} , h(t), \frac{dh}{dt} \text{ quedarían de la siguiente manera:} \end{equation}\begin{equation} \sqrt{H_0} = \frac{-K_d}{2} t + \sqrt{H_0} \end{equation}\begin{equation} \sqrt{H_0} = -0.0039 t + 0.6356 \end{equation}\begin{equation} h = \frac{K_d^{2}}{4} t^{2} - K_d t C + C^{2} \end{equation}\begin{equation} h = 1*10^{-5} t^{2} - 0.0042 + 0.3839 \end{equation}\begin{equation} \frac{dh}{dt} = 2*10^{-5} t -0.0042 \end{equation}#Gráficas experimentales
import matplotlib.pyplot as plt
import numpy as np
# Definir las funciones
def sqrt_H0(t):
return -1* 0.0039 * t + 0.6356
def h(t):
return 1e-5 * t**2 - 4.2e-3 * t + 0.3839
def dh_dt(t):
return 2e-5 * t - 0.0042
# Crear un rango de valores para t
t_values = np.linspace(0, 1000, 400)
# Evaluar las funciones
sqrt_H0_values = sqrt_H0(t_values)
h_values = h(t_values)
dh_dt_values = dh_dt(t_values)
# Crear las gráficas
plt.figure(figsize=(18, 6))
# Gráfico de sqrt(H_0)
plt.subplot(1, 3, 1)
plt.plot(t_values, sqrt_H0_values, label=r'$\sqrt{H_0} = -0.003413640t + 0.632455532$')
plt.title(r'Gráfico de $\sqrt{H_0}$')
plt.xlabel('t')
plt.ylabel(r'$\sqrt{H_0}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 1])
# Gráfico de h(t)
plt.subplot(1, 3, 2)
plt.plot(t_values, h_values, label='h(t)')
plt.title('Gráfico de h(t)')
plt.xlabel('t')
plt.ylabel('h')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 0.5])
# Gráfico de dh/dt
plt.subplot(1, 3, 3)
plt.plot(t_values, dh_dt_values, label=r'$\frac{dh}{dt}$', color='blue')
plt.title(r'Gráfico de $\frac{dh}{dt}$')
plt.xlabel('t')
plt.ylabel(r'$\frac{dh}{dt}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([-0.005, 0.001])
# Mostrar las gráficas
plt.tight_layout()
plt.show()
Gráficas sobrepuestas:¶
#Gráficos teóricos
import matplotlib.pyplot as plt
import numpy as np
# Definir las funciones
def sqrt_H0(t):
return -1* 0.003413640 * t + 0.632455532
def EXPsqrt(t):
return -1* 0.0039 * t + 0.6356
def h(t):
return 1.165294302e-5 * t**2 - 4.317951926e-3 * t + 0.4
def EXPh(t):
return 1e-5 * t**2 - 4.2e-3 * t + 0.3839
def dh_dt(t):
return 2.2e-5 * t - 0.00431
def EXPdh_dt(t):
return 2e-5 * t - 0.0042
# Crear un rango de valores para t
t_values = np.linspace(0, 1000, 400)
# Evaluar las funciones
sqrt_H0_values = sqrt_H0(t_values)
h_values = h(t_values)
dh_dt_values = dh_dt(t_values)
EXPsqrt_H0_values = EXPsqrt(t_values)
EXPh_values = EXPh(t_values)
EXPdh_dt_values = EXPdh_dt(t_values)
# Crear las gráficas
plt.figure(figsize=(18, 6))
# Gráfico de sqrt(H_0)
plt.subplot(1, 3, 1)
plt.plot(t_values, sqrt_H0_values, label=r'$Teórico$')
plt.plot(t_values, EXPsqrt_H0_values)
plt.title(r'Gráfico de $\sqrt{H_0}$')
plt.xlabel('t')
plt.ylabel(r'$\sqrt{H_0}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 1])
# Gráfico de h(t)
plt.subplot(1, 3, 2)
plt.plot(t_values, h_values, label='Teórico')
plt.plot(t_values, EXPh_values)
plt.title('Gráfico de h(t)')
plt.xlabel('t')
plt.ylabel('h')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([0, 0.5])
# Gráfico de dh/dt
plt.subplot(1, 3, 3)
plt.plot(t_values, dh_dt_values, label=r'$Teórico$', color='blue')
plt.plot(t_values, EXPdh_dt_values, color='orange')
plt.title(r'Gráfico de $\frac{dh}{dt}$')
plt.xlabel('t')
plt.ylabel(r'$\frac{dh}{dt}$')
plt.grid(True)
plt.legend()
plt.xlim([0, 200])
plt.ylim([-0.005, 0.001])
# Mostrar las gráficas
plt.tight_layout()
plt.show()
Cálculo del error: K_d y C¶
# Valores de K_d
K_d_teorico = 6.827281456 * 10**-3
K_d_experimental = 6.778603544 * 10**-3
# Cálculo del porcentaje de error de K_d
error_K_d = abs(K_d_teorico - K_d_experimental) / abs(K_d_teorico) * 100
print(f"Porcentaje de error de K_d: {error_K_d:.2f}%")
# Valores de C (teóricos y experimentales)
C_teorico = (0.4)**0.5
C_experimental = (0.3839)**0.5
# Cálculo del porcentaje de error de C
error_C = abs(C_teorico - C_experimental) / abs(C_teorico) * 100
print(f"Porcentaje de error de C: {error_C:.2f}%")
Porcentaje de error de K_d: 0.71% Porcentaje de error de C: 2.03%