2Eva_2024PAOI_T2 Salto Bungee longitud total de cuerda

2da Evaluación 2024-2025 PAO I. 28/Agosto/2024

Tema 2. (40 puntos) Bungee Jumping 02
Para el salto del Bungee del ejercicio del tema anterior se toman lecturas con un sensor de velocidad sujetado a la persona.

2.1 De la tabla de datos obtenida, se observa que los tamaños de paso en tiempo no siempre son equidistantes.
Se requiere encontrar la distancia recorrida en el intervalo de [0,2.55] usando fórmulas de integración compuestas.

ti vi
0 0.0000
0.25 2.4479
0.5 4.8849
0.75 7.3001
1 9.6832
1.375 13.1763
1.75 16.5451
2.125 19.7641
2.4 22.0193
2.55 23.2075

2.2 Usando los datos de la tabla para el intervalo [2.55, 5.175] donde la velocidad de la caída de la persona al primer salto ha llegado a casi cero, o antes del primer rebote, se ha obtenido un polinomio de interpolación:

v = -3.979t2 + 21.557t – 5.3997

Obtenga la distancia recorrida en el segundo intervalo usando el método de Cuadratura de Gauss.

a. Realice el planteamiento de las ecuaciones para cada sección del ejercicio.

b. Describa el criterio usado para determinar el número de tramos usado en cada caso.

c. Desarrolle las expresiones completas del ejercicio para cada sección.

d. Encuentre la distancia total (profundidad) alcanzada por la persona al dar el salto.

Rúbrica: literal a 2.1 (5 puntos), a 2.2 (5 puntos) literal b (5 puntos), literal c 2.1 (10 puntos), c 2.2 (10 puntos), literal d (5 puntos)

Referencia:[1] Chapra. capítulo 28. Ejercicio 28.41 p852.

[2] Extreme Bungy Jumping with Cliff Jump Shenanigans! Play On in New Zealand! 4K! – devinsupertramp. 23 mar 2015.

2Eva_2024PAOI_T1 EDO Salto Bungee tiempo extiende cuerda

2da Evaluación 2024-2025 PAO I. 28/Agosto/2024

Tema 1. (30 puntos) Salto Bungee 01
La ecuación diferencial para la velocidad de alguien que practica el salto del bungee es diferente según si el saltador ha caído una distancia en la que la cuerda está extendida por completo y comienza a estirarse o encogerse.

Si la distancia recorrida es menor que la longitud de la cuerda, el saltador sólo está sujeto a las fuerzas gravitacional y de arrastre de la cuerda.

\frac{d^2y}{dt^2} = g - signo(v) \frac{C_d}{m}\Big( \frac{dy}{dt}\Big)^2 y \leq L

Salto Bungee 02Suponga que las condiciones iniciales son:

y(0) =0

\frac{dy(0)}{dt} = 0

Una vez que la cuerda comienza a estirarse, también deben incluirse las fuerzas del resorte y del amortiguamiento de la cuerda.

\frac{d^2y}{dt^2} = g - signo(v) \frac{C_d}{m}\Big( \frac{dy}{dt}\Big)^2 -\frac{k}{m}(y-L) - \frac{\gamma}{m}( \frac{dy}{dt}\Big) y \gt L
dy/dt m/s velocidad (v)
t s tiempo
g 9.8 m/s2 gravedad
cd 0.25 kg/m coeficiente de arrastre
m 68.1 Kg masa
L 30 m Longitud de la cuerda
k 40 N/m constante de resorte de la cuerda
γ 8 N s/m coeficiente de amortiguamiento de la cuerda
signo(v) función que devuelve –1, 0 y 1, para v negativa, cero y positiva, respectivamente

Encuentre el tiempo tc y la velocidad de la persona cuando se alcanza la longitud de la cuerda extendida y sin estirar (30 m), es decir y<L, aún se entra cayendo signo(v)=1. (solo primera ecuación)

a. Realice el planteamiento del ejercicio usando Runge-Kutta de 2do Orden

b. Desarrolle tres iteraciones para y(t) con tamaño de paso h=0.5

c. Usando el algoritmo, aproxime la solución para y en el intervalo entre [0,tc], adjunte sus resultados.txt

d. Indique el valor de tc, muestre cómo mejorar la precisión y realice sus observaciones sobre los resultados.

Observación: dy/dt = v, función signo(v) en Numpy:np.sign(v)

Rúbrica: literal a (5 puntos), literal b (15 puntos), literal c resultados.txt y grafica.png (5 puntos), literal d (5 puntos),

Referencia: [1] Chapra. capítulo 28. Ejercicio 28.41 p852.

[2] Extreme Bungy Jumping with Cliff Jump Shenanigans! Play On in New Zealand! 4K! – devinsupertramp. 23 mar 2015.

 

1Eva_2024PAOI_T3 Tasas de natalidad de reemplazo en Ecuador

1ra Evaluación 2024-2025 PAO I. 2/Julio/2024

Tema 3 (30 puntos) El  acelerado crecimiento de la población de mayor edad tendrá un fuerte impacto en los gastos futuros del Instituto de Seguridad Social (IESS), una entidad a la que actualmente (2024) no le alcanzan sus ingresos para pagar las pensiones a sus jubilados y otros rubros. [1] trabajadores vs Pensionistas

Un motivo a considerar, podría ser la caída de la natalidad es un fenómeno generalizado en los países desarrollados que tienen tasa de hijos por mujer en edad fértil por debajo de la tasa de reemplazo poblacional de 2.1

Ejemplos de estos casos son Corea del Sur, Japón y China [2,3], países donde la cantidad de personas que trabajan y aportan al seguro social tiende a ser cada vez menor respecto a los pensionistas (jubilados).

Para el caso de Ecuador a fin de realizar un análisis preliminar, se requiere disponer de un modelo matemático que permita estimar cuando ser alcanzaría esta tasa de natalidad.

Promedio Hijos por mujer en Ecuador. INEC 29 Agosto 2019 [4]
tasa 7.32 6.39 5.58 4.89 4.31 3.85 3.50 3.26 3.03 2.79 2.54 2.35
año 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
k 0 1 2 3 4 5 6 7 8 9 10 11

Realice un modelo de interpolación polinómica usando los datos de los años 1965, 1980, 1995 y 2010.

a. Describa el planteamiento del ejercicio, justificando el grado del polinomio seleccionado

b. Realice el del sistema de ecuaciones en su forma matricial y muestre la matriz aumentada

c. Resuelva el sistema usando los algoritmos correspondientes.

d. Presente el polinomio obtenido y grafique verificando que P(x) pase por los puntos de muestra.

e. Use el resultado P(x) para estimar la tasa de hijos por mujer para el año 2020 y calcule el error.

f. Estime el año en que se alcanza la tasa mínima de reemplazo de 2.1

Adjunte los archivos de resultados, algoritmos y gráficas realizados para el ejercicio

Rúbrica: literal a (5 puntos), literal b (5 puntos), literal c (5 puntos), literal d (5 puntos), literal e (5 puntos) ), literal f (5 puntos).

Referencia:  [1] IESS: Envejecimiento de la población disparará gastos; Peña plantea subir aportes. Primicias.ec: 3 Marzo 2024. https://www.primicias.ec/noticias/economia/envejecimiento-poblacion-iess-aportes/
[2] «Emergencia nacional» en Corea del Sur: por qué las mujeres surcoreanas no están teniendo hijos. BBC News Mundo. 30 marzo 2024.

[3] Por qué China amplió a 3 el número de hijos que pueden tener las parejas. BBC News Mundo. 4 junio 2021.
https://www.youtube.com/watch?v=8kErwjPKwjY .
[4] 5 datos sobre población del Ecuador. INEC Ecuador. 29 Agosto 2019. Min 0:45 https://www.youtube.com/watch?v=wjTZNfykmZU [5] ¿Por qué los PAÍSES RICOS se enfrentan al COLAPSO DEMOGRÁFICO? VisualEconomik. 11 Octubre 2022.

import numpy as np
tasa = [7.32, 6.39, 5.58, 4.89, 4.31, 3.85, 3.50, 3.26, 3.03, 2.79, 2.54, 2.35]
anio = [1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020]
k    = [   0,     1,   2,    3,    4,   5,     6,    7,    8,    9,   10,   11]
cual = [0,3,6,9]
tasamin = 2.1
fi = np.take(tasa,cual) # datos seleccionados

s1Eva_2024PAOI_T3 Tasas de natalidad de reemplazo en Ecuador

Ejercicio: 1Eva_2024PAOI_T3 Tasas de natalidad en países desarrollados

Los datos de la tabla que se requieren usar para la tabla son los años 1965, 1980, 1995 y 2010.

Promedio Hijos por mujer en Ecuador. INEC 29 Agosto 2019 [4]
tasa 7.32 4.89 3.50 2.79
año 1965 1980 1995 2010
k 0 3 6 9

literal a

Para cuatro datos o muestras el grado del polinomio que se puede plantear es 3. La ecuación se ordena siguiendo el modelo para la matriz de Vandermonde, primer coeficiente es del termino de mayor grado.

p(x) = ax^3+bx^2+cx+d

Por el orden de magnitud del eje x comparado con los valores de las constantes, se usan los valores del vector k que corresponde a los índices de la tabla. El valor del año se obtiene al hacer un cambio de escala que inicia en el año t0 = 1965 y tamaño de paso Δx = 5 años.

el sistema de ecuaciones usando cada punto será:

p(0) = a(0)^3+b(0)^2+c(0)+d = 7.32 p(3) = a(3)^3+b(3)^2+c(3)+d = 4.89 p(6) = a(6)^3+b(6)^2+c(6)+d = 3.50 p(9) = a(9)^3+b(9)^2+c(9)+d = 2.79

literal b

El sistema de ecuaciones para la Matriz de Vandermonde D y el vector de constantes B en la forma de matriz aumentada D|B:

\left[ \begin{array}{cccc | c} (0)^3 & (0)^2 & (0) & 1 & 7.32 \\ (3)^3 & (3)^2 & (3) &1 &4.89\\ (6)^3 & (6)^2 & (6) &1 & 3.50 \\ (9)^3 & (9)^2 & (9) & 1 & 2.79 \end{array} \right]

literal c

Resolviendo el sistema de ecuaciones con el algoritmo y usando la instrucción np.linalg.solve(A,B)

>>> np.linalg.solve(A,B)
array([-2.22222222e-03,  7.77777778e-02,
       -1.02333333e+00,  7.32000000e+00])

literal d

p(x) = -0.00222 x^3 + 0.07777 x^2 - 1.0233 x + 7.32

Para el ajuste de escala de años, se usa:

año = x*5 +1965

la gráfica usando el algoritmo, muestra que el polinomio pasa por los puntos seleccionados y existe un error entre los puntos que no participan en la construcción del polinomio.

tasa reemplazo colapso Ec v1

literal e

El año 2020 en x se escala como

2020 = x*5 +1965

x = 11

o revisando la tabla proporcionada en el ejercicio

p(11) = -0.00222 (11)^3 + 0.07777(11)^2 - 1.0233 (11)x + 7.32 = 2.5166

el error se calcula usando el valor medido para el año 2020

error = | 2.51- 2.35| = 0.16

literal f

p(x) = -0.00222 x^3 + 0.07777 x^2 - 1.0233 x + 7.32 = 2.51

para resolverlo se requiere usar cualquiera de los algoritmos de la unidad 2.

>>> import scipy.optimize as opt
>>> opt.bisect(px,11,30,xtol=0.001)
20.312713623046875
>>>

que corresponde al año = 20.31*5+1965 = 2066.55

Sin embargo la interpolación se usa para estimar valores dentro del intervalo de muestras. El concepto de extrapolación corresponde a otro capítulo. Sin embargo la pregunta se la considera para evaluar la comprensión de la unidad 2.


Algoritmo con Python

El resultado con el algoritmo se observa como

xi [0 3 6 9]
fi [7.32 4.89 3.5  2.79]
Matriz Vandermonde: 
[[  0.   0.   0.   1.]
 [ 27.   9.   3.   1.]
 [216.  36.   6.   1.]
 [729.  81.   9.   1.]]
los coeficientes del polinomio: 
[-2.22222222e-03  7.77777778e-02 
 -1.02333333e+00  7.32000000e+00]
Polinomio de interpolación: 
-0.00222222224*x**3 + 0.077777778*x**2 - 1.02333333*x + 7.32

 formato pprint
                       3                      2                            
- 0.002222222224*x  + 0.0777777778*x  - 1.023333333*x + 7.32
>>> px(11)
2.5166666666667066

Instrucciones en Python

# 1Eva_2024PAOI_T3 Tasas de natalidad en países desarrollados
import numpy as np
import matplotlib.pyplot as plt
import sympy as sym

# INGRESO
tasa = [7.32, 6.39, 5.58, 4.89,4.31,3.85,3.50,3.26,3.03,2.79,2.54,2.35]
anio = [1965, 1970, 1975, 1980,1985,1990,1995,2000,2005,2010,2015,2020]
k    = [   0,     1,   2,    3,   4,   5,   6,   7,   8,   9,  10,  11]
cual = [0,3,6,9]
tasamin = 2.1

# PROCEDIMIENTO
fi = np.take(tasa,cual)
xi = np.take(k,cual)

# El polinomio de interpolación
# muestras = tramos+1
muestras = 25

# PROCEDIMIENTO
# Convierte a arreglos numpy 
xi = np.array(xi)
B = np.array(fi)
n = len(xi)

# Matriz Vandermonde D
D = np.zeros(shape=(n,n),dtype =float)
for i in range(0,n,1):
    for j in range(0,n,1):
        potencia = (n-1)-j # Derecha a izquierda
        D[i,j] = xi[i]**potencia

# Aplicar métodos Unidad03. Tarea
# Resuelve sistema de ecuaciones A.X=B
coeficiente = np.linalg.solve(D,B)

# Polinomio en forma simbólica
x = sym.Symbol('x')
polinomio = 0
for i in range(0,n,1):
    potencia = (n-1)-i   # Derecha a izquierda
    termino = coeficiente[i]*(x**potencia)
    polinomio = polinomio + termino

# Polinomio a forma Lambda
# para evaluación con vectores de datos xin
px = sym.lambdify(x,polinomio)

# Para graficar el polinomio en [a,b]
a = np.min(xi)
b = np.max(xi)
xin = np.linspace(a,b,muestras)
yin = px(xin)
   
# SALIDA
print('xi', xi)
print('fi',fi)
print('Matriz Vandermonde: ')
print(D)
print('los coeficientes del polinomio: ')
print(coeficiente)
print('Polinomio de interpolación: ')
print(polinomio)
print('\n formato pprint')
sym.pprint(polinomio)

# Grafica
plt.plot(anio,tasa,'o')
plt.plot(xi*5+anio[0],fi,'o',color='red', label='[xi,fi]')
plt.plot(xin*5+anio[0],yin,color='red', label='p(x)')
plt.xlabel('xi')
plt.ylabel('fi')
plt.legend()
plt.axhline(0)
plt.axhline(2.1,linestyle='-.')
plt.xlabel('anio')
plt.ylabel('tasa')
plt.title(polinomio)
plt.show()

 

1Eva_2024PAOI_T2 Temperatura en nodos de placa cuadrada

1ra Evaluación 2024-2025 PAO I. 2/Julio/2024

Tema 2 (40 puntos) La distribución de temperatura en estado estable en una placa cuadrada caliente está modelada por la ecuación de Laplace [1], cuya solución en su forma iterativa cuando el factor
(Δy)2/(Δx) = 1 se interpreta como:

“La temperatura en los nodos de la malla de una placa se puede calcular con el promedio de las temperaturas de los 4 nodos vecinos de la izquierda, derecha, arriba y abajo” [2].

Considere placa cuadrada de 4.5 cm de lado tiene la temperatura en los nodos de los bordes como se indica en la figura. Placa Cuadrada Calentada Nodos01

a) Plantee el sistema de ecuaciones para encontrar los valores en los nodos a, b, c, d. Use la solución descrita para la ecuación de Laplace.

b) Presente la matriz aumentada y Muestre los pasos detallados para el pivoteo parcial por filas.

c) Desarrolle las expresiones para resolver mediante el método de Gauss-Seidel. Considere para el vector inicial Xo, valores intermedios entre las temperaturas de los bordes de la placa.

d) Realice al menos 3 iteraciones, indicando el error por iteración.

e) Analice la convergencia del método, número de condición y resultados obtenidos.

Adjunte los archivos del algoritmo y resultados de computadora utilizados.

Rúbrica: Literal a (5 puntos), literal b (5 puntos), literal c (5 puntos), literal d (15 puntos). literal e (5 puntos) Adjuntos (5 puntos)

Referencia: [1] Ejercicio 12.39 p339 Steven C. Chapra. Numerical Methods 7th Edition.
[2] Ecuaciones Elípticas. Método iterativo. http://blog.espol.edu.ec/analisisnumerico/edp-elipticas-metodo-iterativo/

s1Eva_2024PAOI_T2 Temperatura en nodos de placa cuadrada

Placa Cuadrada Calentada Nodos01Ejercicio: 1Eva_2024PAOI_T2 Temperatura en nodos de placa cuadrada

literal a

El planteamiento de las ecuaciones según se cita en la solución iterativa es el promedio de los nodos adjacentes:

a = \frac{100+40+b+c}{4} b = \frac{40+20+a+d}{4} c = \frac{100+80+a+d}{4} d = \frac{80+20+c+b}{4}

reordenando las ecuaciones para su forma maticial:

4a -b -c = 100+40 4b -a -d= 40+20 4c -a -d= 100+80 4d -c -b= 80+20

literal b

la forma matricial del sistema de ecuaciones es:

\begin{bmatrix} 4 & -1 &-1 & 0 \\ -1 & 4 & 0 &-1 \\ -1 & 0 & 4 &-1 \\ 0 & -1 &-1 & 4 \end{bmatrix} \begin{bmatrix} a \\ b \\ c \\ d \end{bmatrix} = \begin{bmatrix} 140 \\ 60 \\ 180 \\ 100 \end{bmatrix}

matriz aumentada:

\left[ \begin{array} {cccc|c} 4 & -1 &-1 & 0 & 140\\ -1 & 4 & 0 &-1 & 60 \\ -1 & 0 & 4 &-1 & 180 \\ 0 & -1 &-1 & 4 & 100 \end{array}\right]

al revisar el procedimiento de pivoteo parcial por filas se muestra que ya se encuentra pivoteada la matriz. Por lo que no es necesario realizar cambios en las filas.

literal c

Las expresiones a partir de la matriz aumentada y pivoteada para usar en un método iterativo como Gauss-Seidel son:

a = 0.25(b+c+140) b = 0.25*(a+d+60) c = 0.25(a+d+180) d = 0.25(c+b+100)

el vector inicial debe considerar que las temperaturas serán medias entre los  bordes de la placa

X0 = [ (100+40)/2, (40+20)/2, (100+80)/2, (80+20)/2 ]

X0 = [ 70, 30, 90, 50 ]

literal d iteraciones

itera = 0

a = 0.25(30+90+140)= 65

b = 0.25*(65+50+60) = 43.75

c = 0.25(65+50+180) = 73.75

d = 0.25(73.75+43.75+100) = 54.375

error = max|[65-70, 43.75-30, 73.75-90, 54.375-50]|

error = max|[ -5, 13.75, -16.25, 4.375| = 16.25

X1 = [ 65, 43.75, 73.75, 54.375 ]

itera = 1

a = 0.25(43.75+73.75+140)= 64.375

b = 0.25*(64.375+54.375+60) = 44.687

c = 0.25(64.375+54.375+180) = 74.687

d = 0.25(74.687+44.687+100) = 54.843

error = max|[64.375-65, 44.687-43.75, 74.687-73.75, 54.843-54.375]|

error = max|[-0.625, 0.937, 0.937, 0.468| = 0.937

X2 = [ 64.375, 44.687, 74.687, 54.843 ]

itera = 2

a = 0.25(44.687+74.687+140)= 64.843

b = 0.25*(64.843 +54.843+60) = 44.921

c = 0.25(64.843+54.843+180) = 74.921

d = 0.25(74.921+44.921+100) = 54.960

error = max|[64.843-64.375, 44.921-44.687, 74.921-74.687, 54.960-54.843]|

error = max|[0.468, 0.234, 0.234, 0.117| = 0.468

X3 = [ 64.843, 44.921, 74.921, 54.960 ]

literal e

El método converge pues los errores en cada iteración disminuyen. Los valores obtenidos en el resultado son acorde a las temperaturas esperadas en los nodos.

Algoritmos con Python

Los resultados obtenidos son:

X 0 = [65.    43.75  73.75  54.375]
X 1 = [64.375   44.6875  74.6875  54.84375]
X 2 = [64.84375   44.921875  74.921875  54.9609375]
X 3 = [64.9609375  44.98046875 74.98046875 54.99023438]
X 4 = [64.99023438 44.99511719 74.99511719 54.99755859]
X 5 = [64.99755859 44.9987793  74.9987793  54.99938965]
X 6 = [64.99938965 44.99969482 74.99969482 54.99984741]
X 7 = [64.99984741 44.99992371 74.99992371 54.99996185]
X 8 = [64.99996185 44.99998093 74.99998093 54.99999046]
X 9 = [64.99999046 44.99999523 74.99999523 54.99999762]
respuesta X: 
[[64.99999046]
 [44.99999523]
 [74.99999523]
 [54.99999762]]
verificar A.X=B: 
[[139.99997139]
 [ 59.99999285]
 [179.99999285]
 [100.        ]]
>>>

el algoritmo usado es:

# 1Eva_2024PAOI_T2 Temperatura en nodos de placa cuadrada
# Método de Gauss-Seidel
import numpy as np
# INGRESO
A = np.array([[4,-1,-1,0],
              [-1,4,0,-1],
              [-1,0,4,-1],
              [0,-1,-1,4]],dtype=float)
B = np.array([140,60,180,100],dtype=float)
X0  = np.array([70,30,90,50],dtype=float)

tolera = 0.0001
iteramax = 100

# PROCEDIMIENTO
# Gauss-Seidel
tamano = np.shape(A)
n = tamano[0]
m = tamano[1]
#  valores iniciales
X = np.copy(X0)
diferencia = np.ones(n, dtype=float)
errado = 2*tolera

itera = 0
while not(errado<=tolera or itera>iteramax):
    # por fila
    for i in range(0,n,1):
        # por columna
        suma = 0 
        for j in range(0,m,1):
            # excepto diagonal de A
            if (i!=j): 
                suma = suma-A[i,j]*X[j]
        nuevo = (B[i]+suma)/A[i,i]
        diferencia[i] = np.abs(nuevo-X[i])
        X[i] = nuevo
    print('X',itera,'=',X)
    errado = np.max(diferencia)
    itera = itera + 1

# Respuesta X en columna
X = np.transpose([X])
# revisa si NO converge
if (itera>iteramax):
    X=0
# revisa respuesta
verifica = np.dot(A,X)

# SALIDA
print('respuesta X: ')
print(X)
print('verificar A.X=B: ')
print(verifica)

 

1Eva_2024PAOI_T1 Vaciado de reservorio semiesférico

1ra Evaluación 2024-2025 PAO I. 2/Julio/2024

Tema 1. (30 puntos) Un reservorio semiesférico de radio R = 3 m, está lleno agua hasta la altura h como se muestra en la figura. En la base tiene un tubo de salida con abertura de área a = 0.01 m2. El coeficiente de fricción hidráulico K = 0.85   g = 9.8 m/s2.
tanque semiesfera
Se requiere que el reservorio se vacíe en menos de tf = 15 min.
La ecuación diferencial para el vaciado de tanques es:

A(h)\frac{dh}{dt} = -Ka\sqrt{2gh}

Considerando la relación de la altura del líquido h con
respecto al radio R de la semiesfera: r^2 + \Big( R-h\Big)^2 = R^2
Y el Área del círculo en función de h: A(h) = \pi \Big(2Rh -h^2 \Big)

se encuentra la solución general en la expresión:

\frac{4}{3}R \Big(h_f^{3/2} - h_0^{3/2} \Big) - \frac{2}{5}\Big(h_f^{5/2} - h_0^{5/2} \Big) = \frac{Ka}{\pi}\sqrt{2g}\Big(t_0-t_f \Big)

Dado que se vacía el reservorio, hf = 0 y que el experimento inicia en t0=0, h0 =h y tf=t, la expresión se simplifica:


-\frac{4}{3}R h^{3/2} + \frac{2}{5} h^{5/2} = -\frac{Ka}{\pi} t \sqrt{2g}

a. Plantear el ejercicio para encontrar h para un t dado, muestre el intervalo de búsqueda y una gráfica.

b. Desarrolle usando el método de Newton-Raphson para tres iteraciones y tolerancia milimétrica.

c. Verifique el orden de convergencia y observe sus resultados usando el algoritmo.

Nota: la gravedad g tiene unidades de segundos, el tiempo de vaciado está en minutos.

Rúbrica: Planteamiento (5 puntos), iteraciones y error (15 puntos), análisis de la convergencia (5 puntos). observación de resultados, algoritmo y gráficas adjuntos (5 puntos).

Referencia:
[1] Ejercicio 25.21 p765 y 5.17. p143 Steven C. Chapra. Numerical Methods 7th Edition.
[2] Vaciado de un tanque semiesférico. Tiempo total de vaciado. Demostración y aplicación. Sebastian Rodriguez

s1Eva_2024PAOI_T1 Vaciado de reservorio semiesférico

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.


-\frac{4}{3}R h^{3/2} + \frac{2}{5} h^{5/2} = -\frac{Ka}{\pi} t \sqrt{2g}
-\frac{4}{3}(3) h^{3/2} + \frac{2}{5} h^{5/2} = -\frac{(0.85)(0.01)}{\pi} (15)(60) \sqrt{2(9.8)}

la función para encontrar la raíz se reordena como f(h)=0

f(h) = -\frac{4}{3}(3) h^{3/2} + \frac{2}{5} h^{5/2} +\frac{(0.85)(0.01)}{\pi} (15)(60) \sqrt{2(9.8)} f(h) = -4h^{3/2} + 0.4 h^{5/2} +10.7805

tanque semiesferatanque semiesfera v2Usando 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)

f(h) = -4h^{3/2} + 0.4 h^{5/2} +10.7805 f'(h) = -6\frac{ h^{3/2}}{h} + \frac{h^{5/2}}{h} f'(h) = -6 h^{1/2}+ h^{3/2}

El valor inicial puede ser por ejemplo, el centro del intervalo:

x_0= \frac{a+b}{2} = \frac{0+3}{2} = 1.5

itera=0

f(1.5) = -4(1.5)^{3/2} + 0.4 (1.5)^{5/2} +10.7805= 4.5343 f'(1.5) = -6\frac{ 1.5^{3/2}}{1.5} + \frac{1.5^{5/2}}{1.5} = -5.5113 x_1= x_0 - \frac{f(1.5)}{f'(1.5)}= 1.5-\frac{4.5343}{-5.5113} =2.3227 error_1 =|x1-x0| = |2.3227-1.5| =0.8227

itera=1

f(2.3227) = -4(2.3227)^{3/2} + 0.4 (2.3227)^{5/2} +10.7805= -0.09019 f'(2.3227) = -6\frac{ 2.3227^{3/2}}{2.3227} + \frac{2.3227^{5/2}}{2.3227} = -5.6043 x_2= 2.3227-\frac{-0.09019}{-5.6043} = 2.3066 error_2 = |2.3066-2.3227| =0.01611

itera=2

f(2.3227) = -4(2.3066)^{3/2} + 0.4 (2.3066)^{5/2} +10.7805= -0.0007104 f'(2.3227) = -6\frac{ 2.3227^{3/2}}{2.3227} + \frac{2.3227^{5/2}}{2.3227} = -5.6093 x_3= 2.3227-\frac{-0.0007104}{-5.6093} = 2.3066 error_3 = |2.3066-2.3066| =0.000007241

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)

 

3Eva_2023PAOII_T3 Volumen por solido de revolución de un peón

3ra Evaluación 2023-2024 PAO II. 15/Febrero/2024

Tema 3 (40 puntos) Los sólidos de revolución se generan al girar una región plana alrededor de un eje.un peon 3D

El volumen generado al girar la región de una función f(x) en el intervalo [a,b], se puede calcular como el volumen del disco de radio f(x) y anchura dx.

V = \int_{a}^{b} \pi (f(x))^2 dx

Calcule el volumen de revolución generado por la región sombreada y limitada los puntos de la tabla del tema anterior y la gráfica 2D mostrada. volumen de un Peon 2D de revolucion

Realice el ejercicio usando para los integrales el método de integración por Cuadratura de Gauss para al menos lo tres primeros intervalos.

xi=[ 0, 3, 5.  , 9.985 , 14.97 , 17.97, 40.04, 43.29, 51.6449, 60]
yi=[15,15,13.25,14.1552, 9.6768,  9.67,  4.64,  4.64,  8.9768, 0.]

Para el desarrollo de cada intervalo:
a. Realice el planteamiento de las formulas de volumen de sólido de revolución.
b. Desarrolle las expresiones completas con valores numéricos que permitan revisar sus operaciones.
c. Indique el resultado obtenido para cada integral.
d. Determine el volumen de revolución generado por la región sombreada presentada en la gráfica usando el algoritmo en Python.
e. Adjunte sus resultados.txt y algoritmos.py

Rúbrica: literal a (12 puntos), literal b (12 puntos), literal c (6 puntos), literal d (5 puntos), literal e (5 puntos)

Referencia: [1] Volúmenes de sólidos de revolución. Moisés Villena Muñoz. Capítulo 4 p78. https://www.dspace.espol.edu.ec/bitstream/123456789/4800/4/7417.pdf

[2]Curso Torno Madera. Práctica de realización de peón de ajedrez. Taller Escuela Pinocho. 21 octubre 2021

s3Eva_2023PAOII_T3 Volumen por solido de revolución de un peón

Ejercicio: 3Eva_2023PAOII_T3 Volumen por solido de revolución de un peón

El volumen se calcula a partir de la expresión:

V = \int_{a}^{b} \pi (f(x))^2 dx

volumen de un Peon 2D de revolucion

xi=[ 0, 3, 5.  , 9.985 , 14.97 , 17.97, 40.04, 43.29, 51.6449, 60]
yi=[15,15,13.25,14.1552, 9.6768,  9.67,  4.64,  4.64,  8.9768, 0.]

Para el intervalo [0,3]

La función es una constante

literal a, b y c

f(x) = 15 V = \int_{0}^{3} \pi (15)^2 dx = \pi (15)^2 x \big|_{0}^{3} = \pi (15)^2 (3-0) = 2120.5750

Para el intervalo [3,5]

literal a

La función es una recta con pendiente negativa

f(x) = -0.875 x + 17.625 V = \int_{3}^{5} \pi (f(x))^2 dx V = \int_{3}^{5} \pi (-0.875 x+17.625)^2 dx

para el integral con cuadratura de Gauss

g(x) = \pi (-0.875*x+17.625)^2

literal b y c

x_a = \frac{5+3}{2} - \frac{5-3}{2}\frac{1}{\sqrt{3}} = 3.4226 x_b = \frac{5+3}{2} + \frac{5-3}{2}\frac{1}{\sqrt{3}} = 4.5773

con lo que el resultado aproximado del integral se convierte en:

I \cong \frac{5-3}{2}(g(3.4226) + g(4.5773)) = \frac{5-3}{2} (672.43+582.76) = 1255.1971

Para el intervalo [5, 14.97]

literal a

Del polinomio obtenido en el ejercicio anterior para éste intervalo

f(x) = -0.1083 x^2+1.8047 x + 6.9341 V = \int_{5}^{14.97} \pi (f(x))^2 dx V = \int_{5}^{14.97} \pi (-0.1083 x^2+1.8047 x + 6.9341)^2 dx [ g(x) = \pi (-0.1083 x^2+1.8047 x + 6.9341)^2

literal b y c

x_a = \frac{14.97+5}{2} - \frac{14.97-5}{2}\frac{1}{\sqrt{3}} = 7.1069 x_b = \frac{14.97+5}{2} + \frac{14.97-5}{2}\frac{1}{\sqrt{3}} = 12.8630

con lo que el resultado aproximado del integral se convierte en:

I \cong \frac{14.97-5}{2}(g(7.1069) + g(12.8630)) = \frac{14.97-5}{2} (641.5176+469.8124) = 5539.9805

literal d

El volumen total es la suma de los resultados de cada una de las secciones:

V_{total} = 2120.5750 + 1255.1971 + 5539.9805 + ...

Tarea: continuar con los otros intervalos para obtener el volumen total.

literal e

Resultados con el algoritmo

para f(x):
[xa,xb]= [0.6339745962155612, 2.366025403784439]
[f(xa),f(xb)]= [915.4418590078262, 760.106947830205]
Volumenfx:  2513.323210257047

para f(x):
[xa,xb]= [3.4226497308103743, 4.577350269189626]
[f(xa),f(xb)]= [672.4334354361756, 582.7637293668464]
Volumenfx:  1255.1971648030221

para f(x):
[xa,xb]= [7.106908908089714, 12.863091091910285]
[f(xa),f(xb)]= [641.5176069162055, 469.8124936184865]
Volumenfx:  5539.98055116544

un peon 3D

Instrucciones en Python

# 3Eva_2023PAOII_T3 Volumen por solido de revolución de un peón
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

# INGRESO
# intervalos eje x, funciones
#a=0 ; b=3 ; f = lambda x: np.pi*(15)**2 + 0*x
#a=3 ; b=5 ; f = lambda x: np.pi*(-0.875*x+17.625)**2
# con el polinomio del tema 2
a=5 ; b=14.97 ; f = lambda x: np.pi*(-0.1083*x**2+1.8047*x + 6.9341)**2
# con el circulo del tema 1
#a=5 ; b=14.97 ; f = lambda x: np.pi*(np.sqrt(6.7**2-(x-8.6)**2) + 7.6)**2

xmuestras = 31

# PROCEDIMIENTO
# Volumen para f(x) con Cuadratura de Gauss
xa = (b+a)/2 + (b-a)/2*(-1/np.sqrt(3)) 
xb = (b+a)/2 + (b-a)/2*(1/np.sqrt(3))
Volumenfx = (b-a)/2*(f(xa)+f(xb))
xab = [xa,xb]
fab = [f(xa),f(xb)]

# SALIDA
print("para f(x):")
print("[xa,xb]=", xab)
print("[f(xa),f(xb)]=", fab)
print("Volumenfx: ",Volumenfx)
print()

Añadir para graficar en 2D

# grafica 2D para el area de corte en eje y,x --------
# muestras en x
xi = np.linspace(a, b, xmuestras)
fi = f(xi)
f0 = np.zeros(xmuestras,dtype=float)

# grafica 2D
figura2D = plt.figure()
grafica2D = figura2D.add_subplot(111)
grafica2D.plot(xi,fi,color='blue',label='f(x)')
grafica2D.fill_between(xi,fi,f0,color='lightblue')
grafica2D.grid()
grafica2D.set_title('Area para sólido de revolución')
grafica2D.set_xlabel('x')
grafica2D.set_ylabel('f(x)')

Añadir para graficar en 3D

# Para grafica 3D -----------------------
# angulo w de rotación
w_a = 0
w_b = 2*np.pi
w_muestras = 31

# grafica 3D muestras en x y angulo w
wi = np.linspace(w_a, w_b, w_muestras)
X, W = np.meshgrid(xi, wi)
# proyeccion en cada eje 
Yf = f(xi)*np.cos(W)
Zf = f(xi)*np.sin(W)

# grafica 3D
figura3D = plt.figure()
grafica = figura3D.add_subplot(111, projection='3d')

grafica.plot_surface(X, Yf, Zf,
color='blue', label='f(x)',
alpha=0.6, rstride=6, cstride=12)

grafica.set_title('Sólido de revolución')
grafica.set_xlabel('x')
grafica.set_ylabel('y')
grafica.set_zlabel('z')
# grafica.legend()
eleva = 30
rota = -45
deltaw = 5
grafica.view_init(eleva, rota)

# rotacion de ejes
for angulo in range(rota, 360+rota, deltaw ):
grafica.view_init(eleva, angulo)
plt.draw()
plt.pause(.001)
plt.show()

.