s1Eva_IT2010_T1_MN Demanda y producción sin,log

Ejercicio: 1Eva_IT2010_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.2162

cambio de signo a la derecha

a =c = 2 , b = 3 tramo = |3-2| =1

itera =  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.3178

cambio de signo a la izquierda

a= 2 , b = c = 2.5 tramo = |2.5-2| = 0.5

itera =  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.3178

cambio de signo a la izquierda

a= 2 , b = c = 2.25 tramo = |2.25-2| = 0.25

El 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()