Ejercicio: 1Eva2010TI_T1_MN Demanda y producción sin,log
Desarrollo Analítico
Para la demanda, el intervalo de existencia es [0,3]
demanda(t) = sin(t)Para la oferta, el intervalo de existencia inicia en 1, limitado por la demanda [1,3]
oferta(t) = ln(t)la oferta satisface la demanda cuando ambas son iguales
demanda(t) = oferta(t) sin(t) = ln(t)por lo que el tiempo t se encuentra con algún método para determinar la raíz de:
sin(t) - ln(t) = 0 f(t) = sin(t) - ln(t)
Observe que las curvas de oferta y demanda se interceptan en el mismo punto en el eje x que la función f(t).
Para encontrar el valor de intersección de f(t) se propone usar el método de la bisección, en el intervalo [1,3]
itera = 0
a = 1, b =3
c=\frac{1+3}{2} = 2 f(1) = sin(1) - ln(1) = 0.8415 f(3) = sin(3) - ln(3) =-0.9575 f(2) = sin(2) - ln(2) =0.2162cambio de signo a la derecha
a =c = 2 , b = 3 tramo = |3-2| =1itera = 1
a = 2, b =3
c=\frac{2+3}{2} = 2.5 f(2) = 0.2162 f(3) =-0.9575 f(2.5) = sin(2.5) - ln(2.5) = -0.3178cambio de signo a la izquierda
a= 2 , b = c = 2.5 tramo = |2.5-2| = 0.5itera = 2
a = 2, b =2.5
c=\frac{2+2.5}{2} = 2.25 f(2) = 0.2162 f(2.5) = -0.3178 f(2.25) = sin(2.25) - ln(2.25) = -0.3178cambio de signo a la izquierda
a= 2 , b = c = 2.25 tramo = |2.25-2| = 0.25El resto de las iteraciones se continúan con el algoritmo,
encontrando la raíz en 2.219 usando tolerancia de 0.001
Algoritmo en Python
Desarrollo con el método de la Bisección usando el algoritmo:
método de Bisección
i ['a', 'c', 'b'] ['f(a)', 'f(c)', 'f(b)']
tramo
0 [1, 2.0, 3] [ 0.8415 -0.9575 0.2162]
1.0
1 [2.0, 2.5, 3] [ 0.2162 -0.9575 -0.3178]
0.5
2 [2.0, 2.25, 2.5] [ 0.2162 -0.3178 -0.0329]
0.25
3 [2.0, 2.125, 2.25] [ 0.2162 -0.0329 0.0965]
0.125
4 [2.125, 2.1875, 2.25] [ 0.0965 -0.0329 0.033 ]
0.0625
5 [2.1875, 2.21875, 2.25] [ 0.033 -0.0329 0.0004]
0.03125
6 [2.21875, 2.234375, 2.25] [ 0.0004 -0.0329 -0.0162]
0.015625
7 [2.21875, 2.2265625, 2.234375] [ 0.0004 -0.0162 -0.0079]
0.0078125
8 [2.21875, 2.22265625, 2.2265625] [ 0.0004 -0.0079 -0.0037]
0.00390625
9 [2.21875, 2.220703125, 2.22265625] [ 0.0004 -0.0037 -0.0017]
0.001953125
10 [2.21875, 2.2197265625, 2.220703125] [ 0.0004 -0.0017 -0.0007]
0.0009765625
raíz en: 2.2197265625
Instrucciones en Python
# 1Eva_IT2010_T1_MN Demanda y producción sin,log
import numpy as np
import matplotlib.pyplot as plt
def biseccion(fx,a,b,tolera,iteramax = 20, vertabla=False, precision=4):
'''
Algoritmo de Bisección
Los valores de [a,b] son seleccionados
desde la gráfica de la función
error = tolera
'''
fa = fx(a)
fb = fx(b)
itera = 0
tramo = np.abs(b-a)
if vertabla==True:
print('método de Bisección')
print('i', ['a','c','b'],[ 'f(a)', 'f(c)','f(b)'])
print(' ','tramo')
np.set_printoptions(precision)
while (tramo>=tolera and itera<=iteramax):
c = (a+b)/2
fc = fx(c)
cambia = np.sign(fa)*np.sign(fc)
if vertabla==True:
print(itera,[a,c,b],np.array([fa,fb,fc]))
if (cambia<0):
b = c
fb = fc
else:
a = c
fa = fc
tramo = np.abs(b-a)
if vertabla==True:
print(' ',tramo)
itera = itera + 1
respuesta = c
# Valida respuesta
if (itera>=iteramax):
respuesta = np.nan
return(respuesta)
# INGRESO
fx = lambda t: np.sin(t) - np.log(t)
a = 1
b = 3
tolera = 0.001
# PROCEDIMIENTO
respuesta = biseccion(fx,a,b,tolera,vertabla=True)
# SALIDA
print('raíz en: ', respuesta)
# GRAFICA
ad = 0
bd = 3
# intervalo oferta
# considerando que no existe oferta negativa
ao = 1
bo = 3
muestras = 21
demanda = lambda t: np.sin(t)
oferta = lambda t: np.log(t)
f = lambda t: demanda(t)-oferta(t)
# PROCEDIMIENTO
tid = np.linspace(ad,bd,muestras)
demandai = demanda(tid)
tio = np.linspace(ao,bo,muestras)
ofertai = oferta(tio)
fi = f(tio)
# SALIDA
plt.plot(tid,demandai, label='demanda')
plt.plot(tio,ofertai, label ='oferta')
plt.plot(tio,fi,label='f(t)= demanda-oferta')
plt.axhline(0,color='black')
plt.axvline(2.2185, color = 'magenta')
plt.xlabel('tiempo')
plt.ylabel('unidades')
plt.legend()
plt.grid()
plt.show()