Puntos fijos

No todas las ecuaciones tienen puntos fijos que puedan encontrarse algebráicamente. Por ejemplo este sistema:

$$x_{t\text{+1}}=\cos(x_{t})$$

usa una función Trascendental y no puede resolverse con álgebra.

¿Qué tal graficando?


In [1]:
import numpy as np

# importamos bibliotecas para plotear
import matplotlib
import matplotlib.pyplot as plt

# para desplegar los plots en el notebook
%matplotlib inline

def cobweb(f, x, y):
    """
    Dibuja un diagrama de telaraña para una función.
    """
    plt.axhline(linewidth=1.0, color="black")
    plt.axvline(linewidth=1.0, color="black")
    plt.ylim((y.min(),y.max()))
    indep = np.linspace(x.min(), x.max(), len(x))
        
    # grafica la funcion 
    plt.plot(indep,f(indep),'blue')
        
    # grafica la diagonal
    def diag(x):
        return x
    plt.plot(indep, diag(indep), 'black')

    # grafica la telaraña
    y0 = f(x[0])
    x0 = x[0]
    for i in range(len(x)):
        plt.hlines(y0, x0, y0,'r')
        x0 = y0
        y0 = f(x0)
        plt.vlines(x0, x0, y0,'r')

In [2]:
def f(x):
    return np.cos(x)

In [3]:
# la serie de tiempo
x = np.linspace(0,10,100)
f_x = f(x)
fig = plt.plot(x, f_x)



In [9]:
# el diagrama de telaraña revela un punto fijo

cobweb(f, np.linspace(0,1,100), np.linspace(0,1,100))
plt.axis('equal')


Out[9]:
(0.0, 1.0, 0.0, 1.0)

In [5]:
x = [0.7,]

for t in range(30):
    x.append(f(x[t]))
zoom = plt.plot(x)
# cerca de 0.73908, profit
x[-5:]


Out[5]:
[0.73908380099399973,
 0.73908603061470435,
 0.73908452871573538,
 0.73908554041311014,
 0.73908485892166231]