Ejercicio: 1Eva_2024PAOI_T1 Vaciado de reservorio semiesférico
literal a. Planteamiento
A partir de la solución expresión propuesta y simplificada del ejercicio, se reemplaza los valores de R, K, a y g que son constantes. Como se da el valor de t=(15 min)(60 s/min), se unifica la unidad de medida de tiempo a segundos pues g=9.6 m/s2.
la función para encontrar la raíz se reordena como f(h)=0
Usando la gráfica proporcionada del reservorio semiesférico, el valor de h no puede superar la altura R. Al vaciar el reservorio h=0.
Por lo que el intervalo a usar es [0,3]. Se verifica la existencia de una raíz al con la gráfica y Python.
b. Método de Newton Raphson
El método requiere la derivada f'(h)
El valor inicial puede ser por ejemplo, el centro del intervalo:
itera=0
itera=1
itera=2
literal c, convergencia
considerando tolerancia de 10-3 (milimétrica), solo serán necesarias 3 iteraciones.
El método converge al mostrarse que los errores disminuyen en cada iteración.
El resultado se encuentra dentro del intervalo y es x = 2.3066
Algoritmo con Python
resultados:
fh: ____ ____ / 3 / 5 - 4.0*\/ h + 0.4*\/ h + 10.7805172327811 dfh: ____ ____ / 3 / 5 6.0*\/ h 1.0*\/ h - ----------- + ----------- h h ['xi', 'xnuevo', 'tramo'] [[1.5000e+00 2.3227e+00 8.2272e-01] [2.3227e+00 2.3066e+00 1.6118e-02] [2.3066e+00 2.3066e+00 7.2412e-06]] raiz en: 2.306612665792577 con error de: 7.241218404896443e-06 >>> f(1.5) 4.534318388683996 >>> df(1.5) -5.5113519212621505 >>> f(2.3227) -0.09019959114247378 >>> df(2.3227) -5.604354799446854 >>> f(2.3066) 7.104683901282272e-05 >>> df(2.3066) -5.609349350102558
instrucciones:
# 1Eva_2024PAOI_T1 Vaciado de reservorio semiesférico import numpy as np import matplotlib.pyplot as plt import sympy as sym # INGRESO h = sym.Symbol('h') t = 15*60 R = 3 g = 9.8 area = 0.01 K = 0.85 fh = -(4/3)*R*sym.sqrt(h**3)+(2/5)*sym.sqrt(h**5)+(K*area/np.pi)*np.sqrt(2*g)*(t) # Grafica de f(h) a = 0 b = 3 muestras = 15 # PROCEDIMIENTO hi = np.linspace(a,b,muestras) # para evaluación numérica con numpy f = sym.lambdify(h,fh) fi = f(hi) # derivada con sympy dfh = sym.diff(fh,h,1) df = sym.lambdify(h,dfh) # SALIDA print('fh:') sym.pprint(fh) print('dfh:') sym.pprint(dfh) plt.plot(hi,fi) plt.axhline(0, color='black') plt.xlabel('h') plt.ylabel('f') plt.title(fh) plt.show() ## Método de Newton-Raphson # INGRESO fx = f dfx = df x0 = (a+b)/2 # mitad del intervalo (ejemplo) tolera = 0.001 # PROCEDIMIENTO tabla = [] tramo = abs(2*tolera) xi = x0 while (tramo>=tolera): xnuevo = xi - fx(xi)/dfx(xi) tramo = abs(xnuevo-xi) tabla.append([xi,xnuevo,tramo]) xi = xnuevo # convierte la lista a un arreglo. tabla = np.array(tabla) n = len(tabla) # SALIDA print(['xi', 'xnuevo', 'tramo']) np.set_printoptions(precision = 4) print(tabla) print('raiz en: ', xi) print('con error de: ',tramo)