s1Eva_IT2016_T3_MN Tasa interés anual

Ejercicio: 1Eva_IT2016_T3_MN Tasa interés anual

Propuesta de Solución  empieza con el planteamiento del problema, luego se desarrolla con el método de Bisección y método del Punto Fijo solo con el objetivo de comparar resultados.


Planteamiento del problema

La fórmula del enunciado para el problema es:

A = P \frac{i(1+i)^{n}}{(1+i)^{n} -1}

que con los datos dados se convierte a:

5800 = 35000 \frac{i(1+i)^8}{(1+i)^8 -1} 35000 \frac{i(1+i)^8}{(1+i)^8 -1}-5800 =0

que es la forma de f(x) = 0

f(i)=35000 \frac{i(1+i)^8}{(1+i)^8 -1}-5800

Intervalo de búsqueda

Como el problema plantea la búsqueda de una tasa de interés, consideramos que:

  • Las tasas de interés no son negativas. ⌉(i<0)
  • Las tasas de interés no son cero en las instituciones bancarias (i≠0)
  • Las tasas muy grandes 1 = 100/100 = 100% tampoco tienen mucho sentido

permite acotar la búsqueda a un intervalo (0,1].
Sin embargo tasas demasiado altas tampoco se consideran en el problema pues el asunto es regulado (superintendencia de bancos), por lo que se podría intentar entre un 1% = 0.01l y la mitad del intervalo 50%= 0.5 quedando

[0.01,0.5]

Tolerancia

si la tolerancia es de tan solo menor a un orden de magnitud que el valor buscado, se tiene que las tasas de interés se representan por dos dígitos después del punto decimal, por lo que la tolerancia debe ser menor a eso.

Por ejemplo: tolerancia < 0.001 o aumentando la precisión

tolera = 0.0001


Método de la Bisección

itera = 1

a = 0.01, b = 0.5

c = \frac{a+b}{2} = \frac{0.01+0.5}{2} = 0.255 f(0.01) = 35000 \frac{0.01(1+0.01)^8}{(1+0.01)^8-1}-5800 = -1225.83 f(0.5) = 35000 \frac{0.5(1+0.5i)^8}{(1+0.5)^8-1}-5800 = 12410.54

con lo que se verifica que existe cambio de signo al evaluar f(x) en el intervalo y puede existir una raíz.

f(0.255) = 35000 \frac{0.255(1+0.255)^8}{(1+0.255)^8-1}-5800 = 4856.70

lo que muestra que f(x) tiene signos en a,c,b de (-) (+) (+), seleccionamos el intervalo izquierdo para continuar la búsqueda [0.01, 0.255]

El tramo permite estimar el error, reduce el intervalo a:

tramo = b-a = 0.255-0.01 = 0.245

valor que todavía es más grande que la tolerancia de 10-4, por lo que hay que continuar las iteraciones.

itera = 2

a = 0.01, b = 0.255

c = \frac{0.01+0.255}{2} = 0.1325 f(0.01) = -1225.83 f(0.255) = 4856.70 f(0.1325 ) = 35000 \frac{0.1325(1+0.1325)^8}{(1+0.1325)^8-1}-5800 = 1556.06

lo que muestra que f(x) tiene signos en a,c,b de (-) (+) (+), seleccionamos el intervalo izquierdo para continuar la búsqueda [0.01, 0.1325]

El tramo permite estimar el error, reduce el intervalo a:

tramo = b-a = 0.1325-0.01 = 0.1225

valor que todavía es más grande que la tolerancia de 10-4, por lo que hay que continuar las iteraciones.

itera = 3

a = 0.01, b = 0.1325

c = \frac{0.01+0.1225}{2} = 0.071 f(0.01) = -1225.83 f(0.1325) = 1556.06 f(0.071 ) = 35000 \frac{0.071(1+0.071)^8}{(1+0.071)^8-1}-5800 = 89.79

lo que muestra que f(x) tiene signos en a,c,b de (-) (+) (+), seleccionamos el intervalo izquierdo para continuar la búsqueda [0.01, 0.071]

El tramo permite estimar el error, reduce el intervalo a:

tramo = b-a = 0.071-0.01 = 0.061

valor que todavía es más grande que la tolerancia de 10-4, por lo que hay que continuar las iteraciones.

Para una evaluación del tema en forma escrita es suficiente para mostrar el objetivo de aprendizaje, el valor final se lo encuentra usando el algoritmo.

       raiz en:  0.06724243164062502
error en tramo:  5.981445312500111e-05
iteraciones:  13
>>>

Algoritmo en Python

# 1Eva_IT2016_T3_MN Tasa interés anual
import numpy as np
import matplotlib.pyplot as plt

# INGRESO
fx = lambda x: 35000*(x*(1+x)**8)/((1+x)**8 -1) -5800
a = 0.01
b = 0.5
tolera = 0.0001

# PROCEDIMIENTO
cuenta = 0
np.set_printoptions(precision=3)
tramo = b-a
while not(tramo<tolera):
    c = (a+b)/2
    fa = fx(a)
    fb = fx(b)
    fc = fx(c)
    cambia = np.sign(fa)*np.sign(fc)
    if cambia < 0: a = a b = c if cambia > 0:
        a = c
        b = b
    tramo = b-a
    cuenta = cuenta+1

# SALIDA
print('       raiz en: ', c)
print('error en tramo: ', tramo)
print('iteraciones: ',cuenta)


Método del Punto Fijo

El planteamiendo del punto fijo se realiza con x= g(x), por lo que se reordena la ecuación a:

35000 \frac{i(1+i)^8}{(1+i)^8 -1}-5800 =0 35000 \frac{i(1+i)^8}{(1+i)^8 -1}=5800 \frac{i(1+i)^8}{(1+i)^8 -1}=\frac{5800}{35000} i=\frac{58}{350} \frac{(1+i)^8 -1} {i(1+i)^8}

con lo que g(x) es:

g(i)=\frac{58}{350} \frac{(1+i)^8 -1} {(1+i)^8}

valor inicial de búsqueda

Para el punto inicial i0 se puede usar uno de los extremos del intervalo propuesto en la sección de planteamiento. Para reducir aun más la búsqueda se pude seleccionar el punto intermedio

 i0 = 0.255

Itera = 1

 i0 = 0.255

g(0.255i)=\frac{58}{350} \frac{(1+0.255)^8 -1} {(1+0.255)^8} = 0.1387

el error se estrima como el tramo recorrido entre el valor nuevo y el valor inicial

tramo = | nuevo-antes| = |0.1387 - 0.255| = 0.1163

como el tramo o error es aún mayor que el valor de tolera, se continúa con la siguiente iteración.

Itera = 2

i1 = g(i0 ) = 0.1387

g(0.1387)=\frac{58}{350} \frac{(1+0.1387)^8 -1} {(1+0.1387)^8} = 0.1071

el error se estrima como el tramo recorrido entre el valor nuevo y el valor inicial

tramo = | nuevo-antes| = |0.1071 - 0.1387| = 0,0316

como el tramo o error es aún mayor que el valor de tolera, se continúa con la siguiente iteración.

Itera = 3

i2 = g(i1 ) = 0.1071

g(0.1071)=\frac{58}{350} \frac{(1+0.1071)^8 -1} {(1+0.1071)^8} = 0.0922

el error se estrima como el tramo recorrido entre el valor nuevo y el valor inicial

tramo = | nuevo-antes| = |0.0922 - 0.1071| = 0,0149

como el tramo o error es aún mayor que el valor de tolera, se continúa con la siguiente iteración.

Observación: Como el error disminuye entre cada iteración, se considera que el método converge, si se realizan suficientes iteraciones se cumplierá con el valor de tolerancia y se habrá llegado a la precisión requerida.

Usando el algoritmo se tiene:

iteraciones: 17
    raiz en: 0.06754389199556779
>>>

Algoritmo en Python

# Algoritmo de Punto Fijo
# x0 valor inicial de búsqueda
# error = tolera

import numpy as np
def puntofijo(gx,antes,tolera, iteramax=50):
    itera = 1 # iteración
    nuevo = gx(antes)
    tramo = abs(nuevo-antes)
    while(tramo>=tolera and itera<=iteramax ):
        antes = nuevo
        nuevo = gx(antes)
        tramo = abs(nuevo-antes)
        itera = itera+1
    respuesta = nuevo
    # Validar respuesta
    if (itera>=iteramax ):
        respuesta = np.nan
    print('iteraciones:',itera)
    return(respuesta)

# PROGRAMA ---------

# INGRESO
gx = lambda i: (58/350)*((1+i)**8-1)/((1+i)**8)

a = 0       # intervalo
b = 0.5

x0 = 0.255
tolera = 0.0001
iteramax  = 50      # itera máximo

# PROCEDIMIENTO
respuesta = puntofijo(gx,0.255,tolera,iteramax)

# SALIDA
print('    raiz en:',respuesta)

3Eva_2020PAOI_T2 Modelo epidemiológico no letal

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, γ = 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

3Eva_2020PAOI_T1 Distancia mínima en trayectoria

Tema 1. (30 puntos) Calcule el punto de la curva en el plano x-y definida por la función

y = e^{-x} , x ∈ R

que se encuentra más cercano al punto(1, 1).

a. Encuentre un intervalo apropiado para aproximar este valor mediante el método de Newton.

b. Usando este método, elabore una tabla que contenga las columnas de la tabla mostrada:

i xi f(xi) Ei
0
1
2
3

donde f(x) = 0 define el problema a resolver y

Ei = |xi+1 − xi|, i≥0.

Use como criterio de parada Ei ≤ 10−7.
Para los cálculos utilice todos los decimales que muestra la calculadora.

Rúbrica: literal a (5 puntos), planteamiento del método (5 puntos). iteraciones (15 puntos), cálculo de errores (5 puntos)

Referencia: NASA: Cinco asteroides se aproximan a la Tierra; los dos primeros este fin de semana. 11 de Julio, 2020. https://www.eluniverso.com/noticias/2020/07/11/nota/7901811/nasa-asteroides-planeta-tierra

Un asteroide recién descubierto pasará este jueves muy cerca de la Tierra. 23 de septiembre, 2020. https://www.eluniverso.com/noticias/2020/09/23/nota/7987777/asteroide-recien-descubierto-pasara-este-jueves-muy-cerca-tierra

3Eva_2020PAOI_T3 EDP Parabólica

Tema 3. (35 puntos) Desarrolle con el método implícito para aproximar la solución de la EDP Parabólica

\frac{du}{dt} - c^2 \frac{d^2 u}{dx^2} = g(x)
u(x,0) = f(x) u(0,t) = 0 u(1,t) = 0
f(x) = \begin{cases} 5x , & 0 \le x \le 0.5 \\ 5(1-x) , & 0.5 \lt x \le 1\end{cases} g(x) = 2 , 0 \le x \le 1

Considere para h=0.25, k=0.05, c=1

a. Grafique la malla
b. Escriba las ecuaciones para las derivadas
c. Plantee las ecuaciones
d. Resuelva para tres pasos
e. Estime el error (solo plantear)

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

s3Eva_2020PAOI_T2 Modelo epidemiológico no letal

El ejercicio representa un sistema de ecuaciones diferenciales ordinarias, que serán resueltas usando Runge-Kutta de 2do Orden.

De compararse con la curva de contagios de Covid-19 se tienen diferencias en la población recuperada, pues el modelo se considera no letal por lo que no se contabiliza el número de fallecidos.

El módelo es el más básico y permite cambiar por ejemplo la tasa de infección, y se ve los cambios en la curva de infectados. Se puede observar lo que se indicaba como objetivo de «aplanar la curva» al disminuir la población expuesta mediante cambiar la tasa de infección al exponer más o menos población al contagio por iteacción entre «suceptibles» e «infectados.


Desarrollo analítico

Las fórmulas para el algoritmo se identifican como:

binfecta = 1.4
grecupera = 1/4
# Ecuaciones
fS = lambda t,S,I,R : -binfecta*S*I
gI = lambda t,S,I,R : binfecta*S*I - grecupera*I
qR = lambda t,S,I,R : grecupera*I

que luego se usan en cada iteración que se registra en la tabla empezando con las condiciones iniciales

itera Si Ii Ri
0 1 0.001 0
1 0.997797107 0.002809143 0.00039375
2 0.9916392093856501 0.007862023500353846 0.0014987671139961277
3 Tarea

itera= 1

K1S = h * fS(ti,Si,Ii,Ri) 
    = 1(-1.4*1*0.001) = -0.0014
K1I = h * gI(ti,Si,Ii,Ri) 
    = 1(1.4*1*0.001 - (1/4)*0.001) = 0.00115
K1R = h * qR(ti,Si,Ii,Ri) 
    = 1((1/4)*0.001)  = 0.00025

K2x = h * fS(ti+h, Si + K1S, Ii+K1I, Ri +K1R) 
    = 1(-1.4*(1-0.0014)(0.001+0.00115)) = -0.003005786
K2y = h * gI(ti+h, Si + K1S, Ii+K1I, Ri +K1R) 
    = 1(1.4*(1-0.0014)*(0.001+0.00115)
        -(1/4)*(0.001+0.00115)) 
    = 0.002468286
K2z = h * qR(ti+h, Si + K1S, Ii+K1I, Ri +K1R) 
    = 1( (1/4)*(0.001+0.00115)) = 0.0005375

Si = Si + (1/2)*(K1S+K2S) 
   = 1 + (-0.0014 -0.003005786)/2 = 0.997797107
Ii = Ii + (1/2)*(K1I+K2I) 
   = 0.001 + (0.00115+0.002468286)/2 = 0.002809143
Ri = Ri + (1/2)*(K1R+K2R) 
   = 0 + (0.00025 + 0.0005375)/2 = 0.00039375
ti = ti + h = 1 + 1 = 2

itera = 2

K1S = 1(-1.4*0.997797107* 0.002809143)
    = -0.003924136661969021
K1I = 1(1.4*0.997797107* 0.002809143 
        - (1/4)*0.002809143)
    = 0.003221850911969021
K1R = 1((1/4)*0.002809143)
    = 0.00070228575

K2S = 1(-1.4*(0.997797107-0.003924136661969021)*
        *(0.002809143+0.003221850911969021))
    = -0.008391658566730926
K2I = 1(1.4*(0.997797107-0.003924136661969021)*
        *(0.002809143+0.003221850911969021) 
- (1/4)*(0.002809143+0.003221850911969021))
    = 0.006883910088738671
K2R = 1( (1/4)*(0.002809143+0.003221850911969021))
    = 0.0015077484779922553

Si = 0.997797107 + 
     + (-0.003924136661969021 -0.008391658566730926)/2
   = 0.9916392093856501
Ii =  0.002809143 + 
      + (0.003221850911969021+0.006883910088738671)/2
   = 0.007862023500353846
Ri = 0.00039375 + 
     + (0.00070228575 + 0.0015077484779922553)/2
   = 0.0014987671139961277
ti = ti + h = 2 + 1 = 3

itera 3 – TAREA


Instrucciones en Python

# 3Eva_2020PAOI_T2 Modelo epidemiológico no letal
# Sistemas EDO con Runge Kutta de 2do Orden
import numpy as np

def rungekutta2_fgq(f,g,q,t0,x0,y0,z0,h,muestras):
    tamano = muestras +1
    tabla = np.zeros(shape=(tamano,4),dtype=float)
    tabla[0] = [t0,x0,y0,z0]
    ti = t0
    xi = x0
    yi = y0
    zi = z0
    for i in range(1,tamano,1):
        K1x = h * f(ti,xi,yi,zi)
        K1y = h * g(ti,xi,yi,zi)
        K1z = h * q(ti,xi,yi,zi)
        
        K2x = h * f(ti+h, xi + K1x, yi+K1y, zi +K1z)
        K2y = h * g(ti+h, xi + K1x, yi+K1y, zi +K1z)
        K2z = h * q(ti+h, xi + K1x, yi+K1y, zi +K1z)

        xi = xi + (1/2)*(K1x+K2x)
        yi = yi + (1/2)*(K1y+K2y)
        zi = zi + (1/2)*(K1z+K2z)
        ti = ti + h
        
        tabla[i] = [ti,xi,yi,zi]
    tabla = np.array(tabla)
    return(tabla)

# Programa
# Parámetros de las ecuaciones

binfecta = 1.4
grecupera = 1/4
# Ecuaciones
fS = lambda t,S,I,R : -binfecta*S*I
gI = lambda t,S,I,R : binfecta*S*I - grecupera*I
qR = lambda t,S,I,R : grecupera*I
# Condiciones iniciales
t0 = 0
S0 = 1.0
I0 = 0.001
R0 = 0.0

# parámetros del algoritmo
h = 1.0
muestras = 51

# PROCEDIMIENTO
tabla = rungekutta2_fgq(fS,gI,qR,t0,S0,I0,R0,h,muestras)
ti = tabla[:,0]
Si = tabla[:,1]
Ii = tabla[:,2]
Ri = tabla[:,3]
# SALIDA
np.set_printoptions(precision=6)
print(' [ ti, Si, Ii, Ri]')
print(tabla)

# Grafica tiempos vs población
import matplotlib.pyplot as plt
plt.plot(ti,Si, label='S')
plt.plot(ti,Ii, label='I')
plt.plot(ti,Ri, label='R')
plt.title('Modelo SIR')
plt.xlabel('t tiempo')
plt.ylabel('población')
plt.legend()
plt.grid()
plt.show()