s1Eva2018TI_T1 Tanque esférico canchas deportivas

Ejercicio: 1Eva2018TI_T1 Tanque esférico canchas deportivas

tanque esférico diagrama

literal a

Planteamiento: Para seleccionar el rango para h=[a,b], se observa que el tanque puede estar vacío, a=0 o lleno al máximo,
b=2R = 2(3)=6, con lo que se obtiene:

h =[0.0, 6.0]

conociendo la proporción con el valor máximo, se tiene un valor inicial para h0 para las iteraciones.

Primero se calcula el volumen máximo h=2R:

V = \frac{\pi h^{2} (3R-h)}{3} Vmax = \frac{\pi}{3} (2R)^2 (3R-2R) Vmax = \frac{4\pi }{3}R^{3}= 113.09

Se aproxima el valor de h suponiendo que el volumen de llenado del tanque es proporcional a la altura h. Es tan solo un criterio, no es el valor real, pero es un punto de partida. Puede seleccionar otro criterio mientras lo describa en la evaluación.

h_0 = (6)\frac{30}{113.09} = 1.59

literal b

Desarrollo analítico:

Usar Newton-Raphson con tolerancia 1e-6

V = \frac{\pi h^{2} (3R-h)}{3} \frac{\pi h^{2} (3R-h)}{3} - V = 0

se busca V=30, siendo R=3

f(h) = \frac{\pi h^{2} (3(3)-h)}{3} - 30 = 0 f(h) = \frac{\pi }{3}h^2 (9-h)-30 f(h) = \frac{\pi }{3}(9h^2 -h^3)-30 f'(h) = \frac{\pi }{3}(18h-3h^2)

el punto siguiente de iteración es:

h_{i+1} = h_{i} -\frac{f(h)}{f'(h)}

itera = 0, h= 1.59

f(1.59) = \frac{\pi }{3}(9(1.59)^2 -1.59^3)-30 = -10.3826 f'(1.59) = \frac{\pi }{3}(18(1.59)-3(1.59)^2)= 27.3234 h_{i+1} = h_{i} -\frac{f(h)}{f'(h)} h_{1} = 1.59 -\frac{-10.3826}{27.3234} =1.97

Errado = | 1.97-1.59 | = 0.38

aún no se alcanza la tolerancia, se procede con una nueva iteración

itera = 1, h= 1.97

f(1.97) = \frac{\pi }{3}(9(1.97)^2 -1.97^3)-30 = -1.4298 f'(1.97) = \frac{\pi }{3}(18(1.97)-3(1.97)^2)= 33.0694 h_{2} = 1.97 -\frac{-1.4298}{33.0694} =2.0132

Errado = | 2.0132 - 1.97 | = 0.0432

aún no se alcanza la tolerancia, se procede con una nueva iteración

la iteración 2 de deja como tarea

Desarrollo con algoritmo:

con lo que se realiza la tabla de iteraciones:

método de Newton-Raphson
i ['xi', 'fi', 'dfi', 'xnuevo', 'tramo']
0 [  1.59   -10.3826  27.3234   1.97     0.38  ]
1 [ 1.97   -1.4298 33.0694  2.0132  0.0432]
2 [ 2.0132e+00 -3.4547e-01  3.3704e+01  2.0235e+00  1.0250e-02]
3 [ 2.0235e+00 -8.6687e-02  3.3854e+01  2.0260e+00  2.5606e-03]
4 [ 2.0260e+00 -2.1938e-02  3.3891e+01  2.0267e+00  6.4731e-04]
5 [ 2.0267e+00 -5.5637e-03  3.3901e+01  2.0268e+00  1.6412e-04]
6 [ 2.0268e+00 -1.4118e-03  3.3903e+01  2.0269e+00  4.1641e-05]
7 [ 2.0269e+00 -3.5827e-04  3.3904e+01  2.0269e+00  1.0567e-05]
8 [ 2.0269e+00 -9.0925e-05  3.3904e+01  2.0269e+00  2.6819e-06]
9 [ 2.0269e+00 -2.3076e-05  3.3904e+01  2.0269e+00  6.8062e-07]
raíz en:  2.0269054968263562

En valor práctico 2.026 m usando flexómetro, a menos que use medidor láser con precisión 10-6 usará más dígitos con un tanque de 6 metros de altura ganará una precisión de una gota de agua para usar en duchas o regar el césped .

1Eva2018TI_T1 Tanque Esférico Canchas Deportivas  gráfica 01 Newton-Raphson

c) El orden de convergencia del error observando las tres primeras iteraciones es cuadrático

Algoritmo con Python

# 1Eva2018TI_T1 Tanque esférico canchas deportivas
# Ejemplo 1 (Burden ejemplo 1 p.51/pdf.61)
import numpy as np
 
def newton_raphson(fx,dfx,x0, tolera, iteramax=100,
                   vertabla=False, precision=4):
    '''fx y dfx en forma numérica lambda
    xi es el punto inicial de búsqueda
    si no converge hasta iteramax iteraciones
    la respuesta es NaN (Not a Number)
    '''
    itera=0
    xi = x0
    tramo = abs(2*tolera)
    if vertabla==True:
        print('método de Newton-Raphson')
        print('i', ['xi','fi','dfi', 'xnuevo', 'tramo'])
        np.set_printoptions(precision)
    while (tramo>=tolera):
        fi = fx(xi)
        dfi = dfx(xi)
        xnuevo = xi - fi/dfi
        tramo = abs(xnuevo-xi)
        if vertabla==True:
            print(itera,np.array([xi,fi,dfi,xnuevo,tramo]))
        xi = xnuevo
        itera = itera + 1
 
    if itera>=iteramax:
        xi = np.nan
        print('itera: ',itera,
              'No converge,se alcanzó el máximo de iteraciones')
 
    return(xi)
 
# INGRESO
fx  = lambda h: (np.pi/3)*(9*h**2-h**3)-30
dfx = lambda h: (np.pi/3)*(18*h-h**2)
 
x0 = 1.59
tolera = 0.000001
 
# PROCEDIMIENTO
xi= newton_raphson(fx,dfx,x0, tolera, vertabla=True)
# SALIDA
print('raíz en: ', xi)

# GRAFICA
import matplotlib.pyplot as plt
a = 0
b = 3
muestras = 21
 
xj = np.linspace(a,b,muestras)
fj = fx(xj)
plt.plot(xj,fj, label='f(x)')
plt.plot(xi,0, 'o')
plt.axhline(0)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.grid()
plt.legend()
plt.show()

Ejemplos - Ejercicios resueltos de Métodos Numéricos