ComenzarEmpieza gratis

Integrar una función sencilla

Este es un ejercicio simple para introducir el concepto de integración de Monte Carlo.

Aquí vamos a evaluar una integral sencilla \( \int_0^1 x e^{x} dx\). Sabemos que la respuesta exacta es \(1\), pero la simulación nos dará una solución aproximada, así que podemos esperar un valor cercano a \(1\). Como vimos en el vídeo, es un proceso sencillo. Para una función de una sola variable \(f(x)\):

  1. Obtén los límites del eje x \((x_{min}, x_{max})\) y del eje y \((\max(f(x)), \min(\min(f(x)), 0))\).
  2. Genera un número de puntos distribuidos uniformemente dentro de este rectángulo.
  3. Multiplica el área del rectángulo (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) por la fracción de puntos que quedan por debajo de \(f(x)\).

Al terminar, tendrás un esquema para abordar integrales definidas usando integración de Monte Carlo.

Este ejercicio forma parte del curso

Simulación estadística en Python

Ver curso

Instrucciones del ejercicio

  • En la función sim_integrate(), genera números aleatorios uniformes entre xmin y xmax y asígnalos a x.
  • Genera números aleatorios uniformes entre \(\min(\min(f(x)), 0)\) y \(\max(f(x))\) y asígnalos a y.
  • Devuelve la fracción de puntos menores que \(f(x)\) multiplicada por el área (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
  • Por último, usa una función lambda para definir func como \(x e^{x}\).

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Define the sim_integrate function
def sim_integrate(func, xmin, xmax, sims):
    x = np.random.uniform(____, ____, sims)
    y = np.random.uniform(____, ____, sims)
    area = (max(y) - min(y))*(xmax-xmin)
    result = area * sum(____(____) < abs(func(x)))/sims
    return result
    
# Call the sim_integrate function and print results
result = sim_integrate(func = lambda x: ____, xmin = 0, xmax = 1, sims = 50)
print("Simulated answer = {}, Actual Answer = 1".format(result))
Editar y ejecutar código