1Eva_2021PAOI_T1 Función recursiva y raíces de ecuaciones

1ra Evaluación 2021-2022 PAO I. 6/Julio/2021

Tema 1. (30 puntos) La sucesión mostrada puede ser calculada de forma recursiva para un valor inicial x0.

x_n = ln \Bigg(\frac{1}{2+x_{n-1}} \Bigg)

n = 1, 2, 3, …
x0 = -0.45

a. Realice 7 iteraciones con la sucesión, tabule y grafique los resultados.

Considerando solamente el intervalo  [-0.5,-0.4]

b. ¿Se puede afirmar que para todo valor inicial x0 la sucesión converge? Justifique su respuesta.

En algoritmos de computadora, la forma recursiva de la sucesión puede consumir rápidamente recursos, por lo que se plantea encontrar el valor al que converge la sucesión usando siguiente ecuación:

x +ln(x+2) = 0

x0 = -0.45

c. Encuentre el valor que resuelve la ecuación usando el método de Newton-Raphson con tolerancia de 10-4. Realice al menos 3 iteraciones completas y comente sobre la convergencia.

d. Presente sus conclusiones y recomendaciones para los resultados obtenidos entre el literal b y c.

Rúbrica: literal a (5 puntos), literal b (3 puntos), literal c, verifica intervalo (4 puntos), iteraciones (10 puntos), convergencia (5 puntos), literal d (4 puntos)

 

s1Eva_2021PAOI_T2 Atención hospitalaria con medicamentos limitados

Ejercicio: 1Eva_2021PAOI_T2 Atención hospitalaria con medicamentos limitados

literal a

Se plantea el sistema de ecuaciones de acuerdo a la cantidad de medicamentos que se administra a cada tipo de paciente, siendo las variables X=[a,b,c,d] de acuerdo a la tabla:

Niños Adolescentes Adultos Adultos Mayores Medicamentos /semana
Medicamento_A 0.3 0.4 1.1 4.7 3500
Medicamento_B 1 3.9 0.15 0.25 3450
Medicamento_C 0 2.1 5.6 1.0 6500
0.3 a + 0.4 b + 1.1 c + 4.7 d = 3500 a + 3.9 b + 0.15 c + 0.25 d = 3450 0 a +2.1 b + 5.6 c + 1.0 d = 6500

Mostrando que el número de incógnitas no es igual al número de ecuaciones, por lo que sería necesario de disponer de otra ecuación, o  usar una variable libre.


literal b

Siguiendo las indicaciones sobre la variable libre que sea para el grupo de pacientes niños, te tiene que

0.4 b + 1.1 c + 4.7 d = 3500 - 0.3 K 3.9 b + 0.15 c + 0.25 d = 3450 - K 2.1 b + 5.6 c + 1.0 d = 6500 - 0 K

y haciendo K = 100, se convierte en :

0.4 b + 1.1 c + 4.7 d = 3500 - 0.3(100) = 3470 3.9 b + 0.15 c + 0.25 d = 3450 - 100 = 3350 2.1 b + 5.6 c + 1.0 d = 6500 - 0 = 6500

literal c

Antes de desarrollar el ejercicio para el algoritmo se requiere convertir el sistema de ecuaciones a su forma matricial. Por lo que se plantea la matriz aumentada:

\begin{pmatrix} 0.4 & 1.1 & 4.7 & \Big| & 3470 \\ 3.9 & 0.15 &0.25 & \Big| & 3350 \\ 2.1 & 5.6 & 1.0 &\Big| & 6500\end{pmatrix}

Se realiza el pivoteo parcial por filas, que al aplicar en la primera columa, se intercambia la primera y segunda fila, de tal forma que el mayor valor quede en la primera casilla de la diagonal.

\begin{pmatrix} 3.9 & 0.15 &0.25 & \Big| & 3350 \\ 0.4 & 1.1 & 4.7 & \Big| & 3470 \\ 2.1 & 5.6 & 1.0 &\Big| & 6500\end{pmatrix}

se continua el mismo proceso para la segunda casilla de la diagonal hacia abajo, se aplica también pivoteo parcial,

\begin{pmatrix} 3.9 & 0.15 &0.25 & \Big| & 3350 \\ 2.1 & 5.6 & 1.0 &\Big| & 6500 \\ 0.4 & 1.1 & 4.7 & \Big| & 3470 \end{pmatrix}

Con lo que el sistema queda listo para resolver por cualquier método.

Si seleccionamos Gauss-Seidel, el vector inicial de acuerdo al enunciado será X0=[100,100,100]

y las ecuaciones a resolver son:

b = \frac{3350 - 0.15 c - 0.25 d}{3.9} c = \frac{6500 - 2.1 b - 1.0 d}{5.6} d = \frac{3470- 0.4 b - 1.1 c}{4.7}

iteración 1

X0=[100,100,100]

b = \frac{3350 - 0.15(100) - 0.25 (100)}{3.9} = 848.71 c = \frac{6500 - 2.1 (848.71 ) - 1.0 (100)}{5.6} = 824.58 d = \frac{3470- 0.4 (848.71 ) - 1.1 (824.58)}{4.7} = 473.07

X1=[848.71, 824.58, 473.07]

diferencia = [848.71, 824.58, 473.07] – [100,100,100]

diferencia = [748.71, 724.58, 373.07]

error = max|diferencia| = 748.71

resultado del error es mayor que tolerancia de 0.01, se continua con la siguiente iteración.

iteración 2

X1=[848.71, 824.58, 473.07]

b = \frac{3350 - 0.15 (824.58) - 0.25 (473.07)}{3.9} = 796.93 c = \frac{6500 - 2.1 (796.93) - 1.0 (473.07)}{5.6} = 777.38 d = \frac{3470- 0.4 (796.93) - 1.1 (777.38)}{4.7} = 488.53

X2 = [796.93, 777.38, 488.53]

diferencia = [796.93, 777.38, 488.53]  – [848.71, 824.58, 473.07]

diferencia = [-51.78 ,  -47.2, 15.52]

error = max|diferencia| = 51.78

iteración 3

X2 = [796.93, 777.38, 488.53]

b = \frac{3350 - 0.15 (777.38) - 0.25 (488.53)}{3.9} = 797.75 c = \frac{6500 - 2.1 (797.75) - 1.0 (488.53)}{5.6} = 774.31 d = \frac{3470- 0.4 (797.75) - 1.1 (774.31)}{4.7} = 489.18

x3 = [ 797.75, 774.31, 489.18]

diferencias = [ 797.75, 774.31, 489.18] – [796.93, 777.38, 488.53]

diferencias = [0.82, -3.07, 0.65]

error = max|diferencia| = 3.07

Observación, el error disminuye en cada iteración, por lo que el sistema converge.

solución con el algoritmo, solo se toma la parte entera de la respuesta, pues los pacientes son números enteros.

respuesta X: [797.83, 774.16, 489.20]

con lo que el primer resultado es:

 X = [797, 774, 489]

literal d

Si la cantidad de pacientes presentados en una seman es la que se indica en el enunciado [350,1400,1500,1040], se determina que el sistema hospitalario estatal no podrá atender a todos los pacientes al compara con la capacidad encontrada en el literal c.

Hay un exceso de 2129 pacientes encontrados por grupo:

exceso = [350, 1400, 1500, 1040] – [100, 797, 774, 489] = [250, 603, 726, 551]

con lo que se recomienda una medida de confinamiento para disminuir los contagios y poder atender a los pacientes que se presenten.

literal e

Siendo K = 0, al estar vacunados todos los niños, y suponiendo que la vacuna es una cura, se tiene:

0.4 b + 1.1 c + 4.7 d = 3500 - 0.3 K = 3500 3.9 b + 0.15 c + 0.25 d = 3450 - K = 3450 2.1 b + 5.6 c + 1.0 d = 6500 - 0 k = 6500

pivoteado parcialmente por filas se tiene:

\begin{pmatrix} 3.9 & 0.15 &0.25 & \Big| & 3450 \\ 2.1 & 5.6 & 1.0 &\Big| & 6500 \\ 0.4 & 1.1 & 4.7 & \Big| & 3500 \end{pmatrix}

Resolviendo por un método directo:

se obtiene:

respuesta X: [823.46, 763.35, 495.94]

que al compararse con la capacidad anterior en números enteros se encuentra una diferencia de un incremento de 21 pacientes neto ante la condición de usar todos los medicamentos disponibles.

diferencia = [823, 763, 495] – [797, 774, 489] = [26, -11, 6]


 Instrucciones en Python

# Método de Gauss-Seidel
# solución de sistemas de ecuaciones
# por métodos iterativos

import numpy as np

# INGRESO
A = np.array([[0.4, 1.10, 4.7 ],
              [3.9, 0.15, 0.25],
              [2.1, 5.60, 1.0  ]])
k = 100
B = np.array([3500.-0.3*k,3450-1*k,6500-0*k])

X0  = np.array([100.0,100,100])

tolera = 0.001
iteramax = 100

# PROCEDIMIENTO
# Matriz aumentada
Bcolumna = np.transpose([B])
AB  = np.concatenate((A,Bcolumna),axis=1)
AB0 = np.copy(AB)

# Pivoteo parcial por filas
tamano = np.shape(AB)
n = tamano[0]
m = tamano[1]

# Para cada fila en AB
for i in range(0,n-1,1):
    # columna desde diagonal i en adelante
    columna = abs(AB[i:,i])
    dondemax = np.argmax(columna)
    
    # dondemax no está en diagonal
    if (dondemax !=0):
        # intercambia filas
        temporal = np.copy(AB[i,:])
        AB[i,:]  = AB[dondemax+i,:]
        AB[dondemax+i,:] = temporal

A = np.copy(AB[:,:n])
B = np.copy(AB[:,n])

# 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)
    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_2021PAOI_T3 Interpolar, modelo de contagios 2020

1ra Evaluación 2021-2022 PAO I. 6/Julio/2021

Tema 3 (35 puntos) Para evaluar las medidas de confinamiento aplicadas durante el año 2020 se requiere de un modelo del comportamiento de contagios por unidad de tiempo.

Se disponen de los datos de casos graves por semana mostrados en la tabla y se busca obtener un polinomio de interpolación de grado 4 semejante al mostrado en la figura.

Semana Fecha casos graves
9 2/3/2020 1435
10 9/3/2020 1645
11 16/3/2020 1503
12 23/3/2020 3728
13 30/3/2020 7154
14 6/4/2020 6344
15 13/4/2020 4417
16 20/4/2020 3439
17 27/4/2020 2791
18 4/5/2020 2576
19 11/5/2020 2290
20 18/5/2020 2123
21 25/5/2020 2023
22 1/6/2020 2067
23 8/6/2020 2163
24 15/6/2020 2120
25 22/6/2020 2125

a. Desarrolle el polinomio de interpolación usando los puntos sombreados en la tabla, correspondientes a las semanas 11, 13, 16, 18 y 20.

b. Calcule los errores en el intervalo sobre los datos que no se usaron entre las semanas [11,20]

c. Desarrolle y justifique una propuesta para disminuir los errores encontrados en el literal anterior, sobre el mismo intervalo, es decir obtiene un nuevo polinomio.

d. Calcule los errores en el intervalo para el modelo del literal c y compare con los obtenidos en el literal b.

e. Escriba sus conclusiones y recomendaciones sobre los resultados obtenidos entre los dos polinomios.

Rúbrica: literal a (7 puntos), literal b (5 puntos), literal c (10 puntos), literal d (5 puntos), literal e (8 puntos)


xi = [    9,   10,   11,   12,   13,   14,
         15,   16,   17,   18,   19,   20,
         21,   22,   23,   24,   25,   26 ]
fi = [ 1435, 1645, 1503, 3728, 7154, 6344,
       4417, 3439, 2791, 2576, 2290, 2123,
       2023, 2067, 2163, 2120, 2125, 2224 ]

Referencia:
– Eluniverso.com. 2/07/2021. Casos de coronavirus en Ecuador al viernes 2 de julio: 461.157 confirmados, 21.623 fallecidos y 1′416.916 vacunados. https://www.eluniverso.com/noticias/ecuador/coronavirus-covid-19-ecuador-cifras-vacunados-casos-contagios-muertes-9-junio-2021-nota-18/ .

https://flo.uri.sh/visualisation/5585865/embed

– BBC News Mundo. La “doble curva” del coronavirus y el “falso dilema” entre salvar vidas o la economía. 8/mayo/2020. https://youtu.be/SlTSFkTsZL8

s1Eva_2021PAOI_T1 Función recursiva y raíces de ecuaciones

Ejercicio: 1Eva_2021PAOI_T1 Función recursiva y raíces de ecuaciones

Literal a

Evaluando las sucesión de la forma recursiva:

xi
[-0.45       -0.4383     -0.4458     -0.441      -0.4441 
 -0.4421     -0.4434     -0.4425     -0.4431     -0.4427
 -0.4429     -0.4428     -0.4429     -0.4428     -0.4429]
errores
[ 1.1745e-02 -7.5489e-03  4.8454e-03 -3.1127e-03  1.9986e-03
 -1.2837e-03  8.2430e-04 -5.2939e-04  3.3996e-04 -2.1833e-04
  1.4021e-04 -9.0044e-05  5.7826e-05 -3.7136e-05  0.0000e+00]

literal b

Se puede afirmar que converge, observe la diferencia entre cada dos valores consecutivos de la sucesión … (continuar de ser necesario)

literal c

Para el algoritmo se requiere la función f(x) y su derivada f'(x)

f(x) = x +ln(x+2) f'(x) = 1 + \frac{1}{x+2}

x0 = -0.45

itera = 1

x_{i+1} = x_i -\frac{f(x_i)}{f'(x_i)} x_{1} = x_0 -\frac{f(x_0)}{f'(x_0)} = -0.45 -\frac{-0.45+ln(-0.45+2)}{1 + \frac{1}{-0.45+2}}

x1 = -0.44286

error = |x1-x0| = |-0.44286 -(-0.45)| = 0.007139

itera = 2

x_{2} = -0.4428 -\frac{-0.4428 + ln(-0.45+2)}{1 + \frac{1}{-0.4428+2}}

x1 = -0.44286

error = |x1-x0| = |-0.44285 -(-4.4286)| = 6.4394e-06

con lo que se cumple el valor de tolerancia y no se requiere otra iteración

la raiz se encuentra en x = -0.44286

Solución con algoritmo

xi
[-0.45       -0.4383     -0.4458     -0.441      -0.4441 
 -0.4421     -0.4434     -0.4425     -0.4431     -0.4427
 -0.4429     -0.4428     -0.4429     -0.4428     -0.4429]
errores
[ 1.1745e-02 -7.5489e-03  4.8454e-03 -3.1127e-03  1.9986e-03
 -1.2837e-03  8.2430e-04 -5.2939e-04  3.3996e-04 -2.1833e-04
  1.4021e-04 -9.0044e-05  5.7826e-05 -3.7136e-05  0.0000e+00]
['xi', 'xnuevo', 'tramo']
[[-4.5000e-01 -4.4286e-01  7.1392e-03]
 [-4.4286e-01 -4.4285e-01  6.4394e-06]]
raiz en:  -0.44285440100759543
con error de:  6.439362322474551e-06
>>> 

Instrucciones en Python

import numpy as np
import matplotlib.pyplot as plt

# literal a sucesión en forma recursiva
def secuenciaL(n,x0):
    if n == 0:
        xn = x0
    if n>0:
        xn = np.log(1/(2+secuenciaL(n-1,x0)))
    return(xn)
x0 = -0.45
n = 15
xi = np.zeros(n,dtype=float)
xi[0] = x0
errado = np.zeros(n,dtype=float)
for i in range(1,n,1):
    xi[i] = secuenciaL(i,x0)
    errado[i-1] = xi[i] - xi[i-1]
   
np.set_printoptions(precision=4)
print('xi: ')
print(xi)
print('errado: ')
print(errado)

#Grafica literal a y b
plt.plot(xi)
plt.plot(xi,'o')
plt.xlabel('n')
plt.ylabel('xn')
plt.show()

# Método de Newton-Raphson
# Ejemplo 1 (Burden ejemplo 1 p.51/pdf.61)

import numpy as np

# INGRESO
fx  = lambda x: x+np.log(x+2)
dfx = lambda x: 1+ 1/(x+2)

x0 = -0.45
tolera = 0.0001

a = -0.5
b = -0.2
muestras = 21
# 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)

# para la gráfica
xj = np.linspace(a,b,muestras)
fj = fx(xj)

# SALIDA
print(['xi', 'xnuevo', 'tramo'])
np.set_printoptions(precision = 4)
print(tabla)
print('raiz en: ', xi)
print('con error de: ',tramo)

plt.plot(xj,fj)
plt.axhline(0, color='grey')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()

litera d: tarea

s1Eva_2021PAOI_T3 Interpolar, modelo de contagios 2020

Ejercicio: 1Eva_2021PAOI_T3 Interpolar, modelo de contagios 2020

literal a

Los datos de los pacientes casos graves entre las semanas 11 a la 20, que son el intervalo donde será válido el polinomio de interpolación son:

semana 11 12 13 14 15 16 17 18 19 20
casos graves 1503 3728 7154 6344 4417 3439 2791 2576 2290 2123

de los cuales solo se usarán los indicados en el literal a : 11,13,16,18,20.

xi0 = [    9,   10,   11,   12,   13,   14,
          15,   16,   17,   18,   19,   20,
          21,   22,   23,   24,   25,   26 ])
fi0 = [ 1435, 1645, 1503, 3728, 7154, 6344,
        4417, 3439, 2791, 2576, 2290, 2123,
        2023, 2067, 2163, 2120, 2125, 2224 ])
xi = [  11,   13,   16,   18,   20]
fi = [1503, 7154, 3439, 2576, 2123]

Se observa que los datos estan ordenados en forma ascendente respecto a la variable independiente, tambien se determina que no se encuentran equidistantes entre si (13-11=2, 16-13=3). Por lo que se descarta usar el método de diferencias finitas avanzadas.

Los métodos que se podrían usar con puntos no equidistantes en el eje semanas serían el método de diferencias divididas de Newton o el  método de Lagrange.

Seleccionando por ejemplo, Diferencias divididas de Newton, donde primero se realiza la tabla:

xi fi f[x1,x0] f[x2,x1,x0] f[x3,x2,x1,x0] f[x4,x3,x2,x1,x0]
11 1503 =(7154-1503) /(13-11) = 2825.5 =(-1238.33-2835.5) /(16-11) = -812.76 =(161.36-(-812.76)) /(18-11) = 139.16 =(-15.73-139.16) /(20-11) = -17.21
13 7154 (3439-7154) /(16-13) = -1238.33 (-431.5-(-1238.33)) /(18-13) = 161.36 (51.25-161.36) /(20-13)= -15.73 —-
16 3439 (2576-3439) /(18-16) = -431.5 (-226.5-(-431.5)) /(20-16) = 51.25 —-
18 2576 (2123-2576) /(20-18) = -226.5 —-
20 2123 —-

con lo que se puede contruir el polinomio usando las diferencias divididas para el intervalo dado:

[2825.5    -812.76  139.16  -17.21]
p_4(x) = 1503 + 2825.5(x-11) - 812.76(x - 13)(x - 11) + 139.16(x - 16)(x - 13)(x - 11) - 17.21(x - 18)(x - 16) (x - 13) (x - 11)

Simplificando el algoritmo se tiene:

p_4(x) = - 1172995.28 + 298304.50 x - 27840.50x^2 + 1137.36x^3 - 17.21 x^4


literal b

El cálculo de los errores se puede realizar usando el polinomio de grado 4 encontrado, notando que los errores deberían ser cero para los puntos usados para el modelo del polinomio.

xi fi p4(x) |error|
11 1503 1503 0
12 3728 6110.96 2382.96
13 7154 7154 0
14 6344 6293.18 50.81
15 4417 4776.52 359.52
16 3439 3439 0
17 2791 2702.53 88.46
18 2576 2576 0
19 2290 2655.22 365.22
20 2123 2123 0

literal c

Podría aplicarse uno de varios criterios, lo importante por lo limitado del tiempo en la evaluación son las conclusiones y recomendaciones expresadas en el literal e, basadas en lo realizado en los literales c y d. Teniendo como opciones:

– cambiar uno de los puntos selecionados, mateniendo así el grado del polinomio
– aumentar el número de puntos usados para armar el polinomio con grado mayor
– dividir el intervalo en uno o mas segmentos, con el correspondiente número de polinomios.

Se desarrolla la opción de cambiar uno de los puntos seleccionados, usando para esta ocasión como repaso la interpolación de Lagrange. Para los puntos se usa el punto con mayor error de la tabla del literal anterior y se elimina el punto penúltimo, es decir se usa la semana 12 en lugar de la semana 18 de la siguiente forma:

xi = [  11,   12,   13,   16,   20]
fi = [1503, 3728, 7154, 3439, 2123]
p_4(x) = 1503 \frac{(x-12)(x-13)(x-16)(x-20)}{(11-12)(11-13)(11-16)(11-20)} + 3728\frac{(x-11)(x-13)(x-16)(x-20)}{(12-11)(12-13)(12-16)(12-20)} + 7154\frac{(x-11)(x-12)(x-16)(x-20)}{(13-11)(13-12)(13-16)(13-20)} + 3439\frac{(x-11)(x-12)(x-13)(x-20)}{(16-11)(16-12)(16-13)(16-20)} + 2123\frac{(x-11)(x-12)(x-13)(x-16)}{(20-11)(20-12)(20-13)(20-16)}

Simplificando el polinomio:

p_4(x) = \frac{46927445}{21} - \frac{1655552687}{2520} x + \frac{715457663}{10080}x^2 - \frac{8393347}{2520} x^3 + \frac{577153}{10080} x^4

literal d

El cálculo de los errores se puede realizar usando el polinomio de grado 4 encontrado, notando que los errores deberían ser cero para los puntos usados para el modelo del polinomio.

xi fi p4(x) error
11 1503 1503 0
12 3728 3728 0
13 7154 7154 0
14 6344 8974.01 2630.01
15 4417 7755.22 3338.22
16 3439 3439 0
17 2791 -2659.13 -5450.13
18 2576 -7849.45 -10425.45
19 2290 -8068.1 -10358.1
20 2123 2123 0

literal e

El cambio aplicado a los puntos usados en el modelo del polinomio disminuyó el error entre las semanas 11 a 13. Sin embargo la magnitud del error aumentó  para las semanas posteriores a la 13, es decir aumentó la distorsión de la estimación y se recomienda realizar otras pruebas para mejorar el modelo aplicando los otros criterios para determinar el que tenga mejor desempeño respecto a la medida de error.



Intrucciones en Python

Literal a y b. Desarrollado a partir del algoritmo desarrollado en clases:

# Polinomio interpolación
# Diferencias Divididas de Newton
# Tarea: Verificar tamaño de vectores,
#        verificar puntos equidistantes en x
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt

# INGRESO , Datos de prueba
xi0 = np.array([    9,   10,   11,   12,   13,   14,
                   15,   16,   17,   18,   19,   20,
                   21,   22,   23,   24,   25,   26 ])
fi0 = np.array([ 1435, 1645, 1503, 3728, 7154, 6344,
                 4417, 3439, 2791, 2576, 2290, 2123,
                 2023, 2067, 2163, 2120, 2125, 2224 ])

xi1 = np.array([   11,   12,   13,   14,   15,   16,
                   17,   18,   19,   20 ])
fi1 = np.array([ 1503, 3728, 7154, 6344, 4417, 3439,
                 2791, 2576, 2290, 2123 ])

xi = np.array([  11,   13,   16,   18,   20])
fi = np.array([1503, 7154, 3439, 2576, 2123])

# PROCEDIMIENTO

# Tabla de Diferencias Divididas Avanzadas
titulo = ['i   ','xi  ','fi  ']
n = len(xi)
ki = np.arange(0,n,1)
tabla = np.concatenate(([ki],[xi],[fi]),axis=0)
tabla = np.transpose(tabla)

# diferencias divididas vacia
dfinita = np.zeros(shape=(n,n),dtype=float)
tabla = np.concatenate((tabla,dfinita), axis=1)

# Calcula tabla, inicia en columna 3
[n,m] = np.shape(tabla)
diagonal = n-1
j = 3
while (j < m):
    # Añade título para cada columna
    titulo.append('F['+str(j-2)+']')

    # cada fila de columna
    i = 0
    paso = j-2 # inicia en 1
    while (i < diagonal):
        denominador = (xi[i+paso]-xi[i])
        numerador = tabla[i+1,j-1]-tabla[i,j-1]
        tabla[i,j] = numerador/denominador
        i = i+1
    diagonal = diagonal - 1
    j = j+1

# POLINOMIO con diferencias Divididas
# caso: puntos equidistantes en eje x
dDividida = tabla[0,3:]
n = len(dfinita)

# expresión del polinomio con Sympy
x = sym.Symbol('x')
polinomio = fi[0]
for j in range(1,n,1):
    factor = dDividida[j-1]
    termino = 1
    for k in range(0,j,1):
        termino = termino*(x-xi[k])
    polinomio = polinomio + termino*factor

# simplifica multiplicando entre (x-xi)
polisimple = polinomio.expand()

# polinomio para evaluacion numérica
px = sym.lambdify(x,polisimple)

# calcula errores en intervalo usado
pfi1 = px(xi1)
errado1 = np.abs(fi1-pfi1)

# Puntos para la gráfica
muestras = 101
a = np.min(xi)
b = np.max(xi)
pxi = np.linspace(a,b,muestras)
pfi = px(pxi)

# SALIDA
np.set_printoptions(precision = 4)
print('Tabla Diferencia Dividida')
print([titulo])
print(tabla)
print('dDividida: ')
print(dDividida)
print('polinomio: ')
print(polinomio)
print('polinomio simplificado: ' )
print(polisimple)
print('errores en intervalo:')
print(xi1)
print(errado1)

# Gráfica
plt.plot(xi0,fi0,'o', label = 'Puntos')
plt.plot(xi,fi,'ro', label = 'Puntos')
for i in range(0,n,1):
    etiqueta = '('+str(xi[i])+','+str(fi[i])+')'
    plt.annotate(etiqueta,(xi[i],fi[i]))
plt.plot(pxi,pfi, label = 'Polinomio')
plt.legend()
plt.xlabel('xi')
plt.ylabel('fi')
plt.title('Diferencias Divididas - Newton')
plt.grid()
plt.show()

Literal c y d. Se puede continuar con el algoritmo anterior. Como repaso se adjunta un método diferente al anterior.

# Interpolacion de Lagrange
# divisores L solo para mostrar valores
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt

# INGRESO , Datos de prueba
xi0 = np.array([    9,   10,   11,   12,   13,   14,
                   15,   16,   17,   18,   19,   20,
                   21,   22,   23,   24,   25,   26 ])
fi0 = np.array([ 1435, 1645, 1503, 3728, 7154, 6344,
                 4417, 3439, 2791, 2576, 2290, 2123,
                 2023, 2067, 2163, 2120, 2125, 2224 ])

xi2 = np.array([   11,   12,   13,   14,   15,   16,
                   17,   18,   19,   20 ])
fi2 = np.array([ 1503, 3728, 7154, 6344, 4417, 3439,
                 2791, 2576, 2290, 2123 ])

xi = np.array([  11,   12,   13,   16,   20])
fi = np.array([1503, 3728, 7154, 3439, 2123])

# PROCEDIMIENTO
# Polinomio de Lagrange
n = len(xi)
x = sym.Symbol('x')
polinomio = 0
divisorL = np.zeros(n, dtype = float)
for i in range(0,n,1):
    
    # Termino de Lagrange
    numerador = 1
    denominador = 1
    for j  in range(0,n,1):
        if (j!=i):
            numerador = numerador*(x-xi[j])
            denominador = denominador*(xi[i]-xi[j])
    terminoLi = numerador/denominador

    polinomio = polinomio + terminoLi*fi[i]
    divisorL[i] = denominador

# simplifica el polinomio
polisimple = polinomio.expand()

# para evaluación numérica
px = sym.lambdify(x,polisimple)

# calcula errores en intervalo usado
pfi2 = px(xi2)
errado2 = np.abs(fi2-pfi2)

# Puntos para la gráfica
muestras = 101
a = np.min(xi)
b = np.max(xi)
pxi = np.linspace(a,b,muestras)
pfi = px(pxi)

# SALIDA
print('    valores de fi: ',fi)
print('divisores en L(i): ',divisorL)
print()
print('Polinomio de Lagrange, expresiones')
print(polinomio)
print()
print('Polinomio de Lagrange: ')
print(polisimple)
print('errores en intervalo:')
print(xi2)
print(errado2)

# Gráfica
plt.plot(xi0,fi0,'o', label = 'Puntos')
plt.plot(pxi,pfi, label = 'Polinomio')
plt.legend()
plt.xlabel('xi')
plt.ylabel('fi')
plt.title('Interpolación Lagrange')
plt.show()

1Eva_2021PAOI_T2 Atención hospitalaria con medicamentos limitados

1ra Evaluación 2021-2022 PAO I. 6/Julio/2021

Tema 2 (35 puntos) Durante el año 2020, ante el aumento de atención hospitalaria estatal en la región y el limitado acceso a medicamentos, como una primera estrategia de manejo de recursos se derivan el exceso de pacientes hacia la atención en hospitales privados.

En la tabla  se muestra la cantidad de los tres medicamentos (mg, ml) que se administran al atender a cada paciente clasificado por grupo etario: niños, adolescentes, adultos y adultos mayores.

También se dispone del total de medicamentos existente en bodegas en cada semana.

Niños Adolescentes Adultos Adultos Mayores Medicamentos /semana
Medicamento_A 0.3 0.4 1.1 4.7 3500
Medicamento_B 1 3.9 0.15 0.25 3450
Medicamento_C 0 2.1 5.6 1.0 6500

Es de interés conocer la cantidad de pacientes de cada grupo que se podría atender con los recursos disponibles.

a.  Realice el planteamiento de un sistema de ecuaciones que permita determinar la cantidad máxima de pacientes de cada grupo etario que podrían ser atendidos usando todos los medicamentos disponibles.

Una vez planteadas las ecuaciones, se le indica que la capacidad K para pacientes niños sea una variable libre, por consumir menos recursos y se podrían derivar al sistema privado.

b.  Escriba el conjunto de soluciones posibles en función de la variable libre, considerando la cantidad de niños a atender como máximo de K=100.

c. Determine la capacidad de atención usando un método Iterativo con una tolerancia de 10-2. Realice tres iteraciones completas y revise la convergencia del método. Se estima atender al inicio de semana al menos 100 pacientes de cada grupo.

d. Suponga que la cantidad de pacientes en cada grupo para una semana dada es: [350, 1400, 1500, 1040]. ¿Hay suficiente cantidad de medicamentos para atender el promedio actual de pacientes? Analice y describa los resultados encontrados.

e. Si se decide vacunar primero a todos los niños, entonces ya no requieren atención hospitalaria (K=0) ¿Cuál es el número máximo de pacientes de cada grupo que podría incrementarse dadas las condiciones actuales? Resuelva usando un método directo.

Rúbrica: literal a (3 puntos), literal b (2 puntos), pivoteo por filas(5 puntos), iteraciones (10 puntos), análisis de convergencia (4 puntos), literal d (5 puntos) literal e (6 puntos)

Referencias:
– BBC News Mundo. El país que está vacunando contra el covid-19 primero a los jóvenes y no a los ancianos. 16/enero/2021. https://youtu.be/oo2itoBBwyY

– Manejo clínico de la COVID-19, orientaciones provisionales 27/mayo/2020. https://apps.who.int/iris/bitstream/handle/10665/332638/WHO-2019-nCoV-clinical-2020.5-spa.pdf

3Eva_2020PAOII_T3 Deflexiones de una placa

3ra Evaluación 2020-2021 PAO II. 9/Febrero/2021

Tema 3. (40 puntos) Una placa cuadrada, apoyada simplemente en sus extremos está sujeta a un carga por unidad de área q.


La deflexión en la dimensión z de determina resolviendo la EDP elíptica siguiente:

\frac{\partial^4 z}{\partial x^4} + 2\frac{\partial^4 z}{\partial x^2 \partial y^2} +\frac{\partial^4 z}{\partial y^4} =\frac{q}{D}

sujeta a condiciones de frontera en los extremos, donde la deflexión y la pendiente normal a la frontera son cero.

D = \frac{E \Delta x^3}{12(1-\sigma ^2)}

El parámetro D es la rigidez de flexión, donde E=módulo de elasticidad, Δz=espesor de la placa, σ=razón de Poisson.

Para simplificar, se define la variable u como sigue:


u = \frac{\partial^2 z}{\partial x^2} + \frac{\partial^2 z}{\partial y^2}

Permitiendo volver a expresar la ecuación primera como:

\frac{\partial^2 z}{\partial x^2} + \frac{\partial^2 z}{\partial y^2} = \frac{q}{D}

Con lo que el problema se reduce a resolver de manera sucesiva las dos ecuaciones de Poisson.


Primero la ecuación respecto a u sujeta a la condición de frontera u = 0 en los extremos, después los resultados se emplean junto con la ecuación respecto a z sujeta a la condición de que z = 0 en los extremos.
Considere una placa de 2 metros de longitud en sus extremos, q= 33.6 k N/m2, σ =0.3, Δz = 0.01 m, E = 2×1011 Pa.

a) Plantee y desarrolle el ejercicio en papel para u(x,y) para al menos 3 puntos en la malla.
Utilice Δx = Δy = 0.5 para las iteraciones.

b) Desarrolle un algoritmo para determinar las deflexiones de una placa cuadrada sujeta a una carga constante por unidad de área resolviendo de manera sucesiva las dos ecuaciones.

Rúbrica: gráfica de malla (5 puntos), desarrollo de expresiones, agrupar constantes, y simplificación (10 puntos), iteraciones para 3 puntos (10 puntos), Revisión de errores (5 puntos). literal b (10 puntos)

Referencia: Deflexiones de una placa. Chapra 32.2 p938, pdf962

3Eva_2020PAOII_T2 EDO – Concentración de solución en tres tanques

3ra Evaluación 2020-2021 PAO II. 9/Febrero/2021

Tema 2. (30 puntos) Tres tanques perfectamente aislados, completamente llenos con una solución cuya concentración es Ci (0) g/L.

Los tanques están interconectados en serie de tal forma que de añadir solución al primero, se transfiere la misma cantidad por la conexión al segundo y al tercero del cual rebosa hacia afuera del sistema.

El tercer tanque tiene una salida por rebose que mantiene constante el volumen V en cada tanque.

Desde un tiempo t0 = 0, al primer tanque se le añade una solución que tiene una concentración 50 g/L, a razón de 300 L/min.

Considere Ci (0) = 30 g/L y el volumen de cada tanque de 1000 L.
En cada tanque entre lo que recibe y se transfiere al siguiente tanque se obtienen las siguientes ecuaciones:

\frac{dC_1}{dt} = \frac{300}{1000}(50) - 0.3 C_1 \frac{dC_2}{dt} = 0.3C_1- 0.3 C_2 \frac{dC_3}{dt} = 0.3C_2- 0.3 C_3

Determine la concentración en cada tanque durante los 3 primeros minutos de iniciar el experimento usando un método de Runge-Kutta de 2do Orden. (tres iteraciones, estime cota del error)

Rúbrica: Planteo del sistema de ecuaciones en el método (10 puntos), iteraciones (15 puntos), estimar errores (5 puntos).

Referencia: GIE -FRSN-UTN. https://www.frsn.utn.edu.ar/gie/an/mnedo/ejercicios%20propuestos.pdf


3Eva_2020PAOII_T1 Área de sección transversal en buque

3ra Evaluación 2020-2021 PAO II. 9/Febrero/2021

Tema 1. (30 puntos) Al reiniciar las actividades de construcción de un buque
luego de la cuarentena del año 2020, se requiere determinar el área transversal de la sección a ser cerrada completamente y que se muestra en la figura.

Para estimar el área transversal del compartimento se tomaron las siguientes medidas cada 2 metros hacia arriba desde la línea central vertical (mostrada en la gráfica):

en metros Longitud desde Centro
Altura Izquierda Derecha
12 -17.00 17.00
10 -16.00 16.00
8 -15.65 15.65
6 -15.60 15.60
4 -15.50 15.50
2 -15.00 15.00
0   -6.00  6.00

Usando un método numérico compuesto estime el área transversal de la sección del barco y la cota de error del ejercicio. Desarrolle el ejercicio mostrando el método seleccionado, las expresiones en la ecuación con los valores usados y el error total.

Rúbrica: Selección del métodos compuestos (5 puntos), expresiones de áreas (10 puntos), cota de errores (10 puntos), área total (5 puntos)

tabla = [[0.0,  2.0,  4.00,  6.00,  8.00, 10.0, 12.0],
         [6.0, 15.0, 15.50, 15.60, 15.65, 16.0, 17.0]]

Referencias: Órdenes de construcción de transporte marítimo disminuyo en abril. 2020-05-10. https://www.worldenergytrade.com/logistica/transporte/ordenes-de-construccion-de-transporte-maritimo-disminuyo-abril


 

3Eva_2020PAOI_T2 Modelo epidemiológico no letal

3ra Evaluación 2020-2021 PAO I. 22/Septiembre/2020

Tema 2. (35 puntos) En 1927, Kermack y McKendrick propusieron un modelo epidemiológico no letal simplificado que divide a la población total en estados de S=Susceptible, I=Infectado, R= Recuperado.

Las personas cambian de estado en un solo sentido S-I-R siguiendo la tasa de infección β y el periodo infeccioso promedio 1/γ; los recuperados adquieren inmunidad. Este modelo permite observar que pequeños aumentos de la tasa de contagio pueden dar lugar a grandes epidemias.

Susceptible Infectado Recuperado
Relación \frac{dS}{dt} = -\beta SI \frac{dI}{dt} = \beta SI - \gamma I \frac{dR}{dt} = \gamma I
Población (t0=0) S(t0)= 1 I(t0) = 0,001 R(t0) = 0

Los valores de población se encuentran en miles, β = 1.4, γ = 1/4.
Suponga que el tiempo se mide en días, h = 1.

a. Plantear la solución del sistema de EDO usando Runge-Kutta de 2do Orden
b. Desarrolle el ejercicio con al menos 3 iteraciones en el tiempo
c. Estimar el error del método aplicado

Rúbrica: conoce la fórmula de RK2 (5 puntos), plantea la fórmula de RK2 al sistema (5 puntos) literal b (20 puntos), literal c (5 puntos).

Referencia: Modelo SIR https://es.wikipedia.org/wiki/Modelo_SIR. Modelaje matemático de epidemias https://es.wikipedia.org/wiki/Modelaje_matem%C3%A1tico_de_epidemias