Repaso (Módulo 2)

El tema principal en este módulo fueron simulaciones Montecarlo. Al finalizar este módulo, se espera que ustedes tengan las siguientes competencias

  • Evaluar integrales (o encontrar áreas) numéricamente mendiante métodos Montecarlo.
  • Poder replicar fractales aleatorios símples (como los de Barnsley), dadas las características del mismo.
  • Realizar evaluaciones de probabilidad precio-umbral.

Ejemplo 1. Evaluación numérica de integrales utilizando Montecarlo

  • En la clase de evaluación de integrales numéricas por montecarlo vimos dos tipos de evaluación de integrales.
  • El tipo 1 se basaba en la definición de valor promedio de una función.
  • El tipo 2 se basaba en probabilidades y una variable aleatoria de bernoulli (para encontrar áreas).

En clase desarrollamos funciones para la evaluación de integrales con ambos métodos (explicar porqué la segunda se puede ver como una integral). Las funciones son las siguientes:


In [17]:
def int_montecarlo1(f, a, b, N):
    # Evaluación numérica de integrales por Montecarlo tipo 1
    # f=f(x) es la función a integrar (debe ser declarada previamente) que devuelve para cada x su valor imagen,
    # a y b son los límites inferior y superior del intervalo donde se integrará la función, y N es el número
    # de puntos con que se aproximará.
    return (b-a)/N*np.sum(f(np.random.uniform(a, b, N)))

In [18]:
def int_montecarlo2(region, a1, b1, a2, b2, N):
    # Evaluación numérica de integrales por Montecarlo tipo 2
    # region=region(x,y) retorna True si la coordenada (x,y) pertenece a la región a integrar y False de lo 
    # contrario , a1, b1, a2, b2 son los límites del rectángulo que contiene la región, y N es el número de 
    # puntos con que se aproximará.
    return (b-a)/N*np.sum(f(np.random.uniform(a, b, N)))
    A_R = (b1-a1)*(b2-a2)
    x = np.random.uniform(a1, b1, N.astype(int))
    y = np.random.uniform(a2, b2, N.astype(int))
    return A_R*np.sum(region(x,y))/N

Considere las funciones $f_1(x)=\sqrt{1+x^{4}}$, $f_2(x)=\ln(\ln x)$, $f_3(x)=\frac {1}{\ln x}$, $f_4(x)=e^{e^{x}}$, $f_5(x)=e^{-{\frac {x^{2}}{2}}}$ y $f_6(x)=\sin(x^{2})$.

Utilizar las funciones anteriores para realizar la evaluación numérica de las integrales de las funciones anteriores en el intervalo $(4,5)$. Poner los resultados en una tabla cuyas filas correspondan a la cantidad de términos utilizados en la aproximación (usar 10, 100, 1000, 10000 y 100000 términos) y cuyas columnas correspondan a las funciones.

Hacer una tabla por cada método.

¿Se pueden ver diferencias notables en la velocidad de convergencia de los métodos?


In [1]:
# Importamos librerías
import numpy as np
import pandas as pd
import random

In [ ]:


In [ ]:


In [ ]:


In [ ]:

Ejemplo 2. Fractal aleatorio tipo Barnsley

  • En la clase de fractales aleatorios vimos que el fractal helecho de Barnsley se generaba a través de cuatro transformaciones afines que se elegían con cierta probabilidad.
  • Vimos que este helecho representaba de manera muy aproximada helechos reales.
  • Vimos que modificando parámetros de la tabla, se podían generar mutaciones de el helecho.

Pues bien, usando la misma idea de transformaciones afines que se escogen con cierta probabilidad, se pueden generar una infinidad inimaginable de fractales. Incluso, se pueden generar fractales aleatorios que poseen un atractor determinístico (¿Qué es esto?).

Como en la clase de fractales, repliquemos el fractal tipo Barnsley descrito por la siguiente tabla...

Referencia:

  • Barnsley, Michael F. Fractals Everywhere: New Edition, ISBN: 9780486320342.

In [11]:
import pandas as pd
import numpy as np

In [13]:
i = np.arange(4)

df = pd.DataFrame(index=i,columns=['$a_i$', '$b_i$', '$c_i$', '$d_i$', '$e_i$', '$f_i$', '$p_i$'], dtype='float')
df.index.name = "$i$"

df['$a_i$'] = [0.5, 0.5, 0.5, 0.5]
df['$b_i$'] = [0.0, 0.0, 0.0, 0.0]
df['$c_i$'] = [0.0, 0.0, 0.0, 0.0]
df['$d_i$'] = [0.5, 0.5, 0.5, 0.5]
df['$e_i$'] = [1.0, 50.0, 1.0, 50.0]
df['$f_i$'] = [1.0, 1.0, 50.0, 50.0]
df['$p_i$'] = [0.1, 0.2, 0.3, 0.4]

df.round(2)


Out[13]:
$a_i$ $b_i$ $c_i$ $d_i$ $e_i$ $f_i$ $p_i$
$i$
0 0.5 0.0 0.0 0.5 1.0 1.0 0.1
1 0.5 0.0 0.0 0.5 50.0 1.0 0.2
2 0.5 0.0 0.0 0.5 1.0 50.0 0.3
3 0.5 0.0 0.0 0.5 50.0 50.0 0.4

Solución


In [ ]:


In [ ]:


In [ ]:


In [ ]:

Recordar que el viernes deben subir a moodle un notebook con el nombre, intro y objetivos del proyecto.

El viernes repasaremos la aplicación de probabilidad precio-umbral.

Created with Jupyter by Esteban Jiménez Rodríguez.