Método de Monte Carlo · Tema 19

Integración en el intervalo (0,1)

El caso base: en (0,1) la integral ES el promedio. Sin ×(b−a).

01 · Punto de partida

Ancho 1, todo simple

Si el intervalo es (0,1), el factor (b−a) vale 1 y desaparece: ∫₀¹ f = E[f(U)]. Sortear U, evaluar f y promediar. Es el ladrillo con el que se construyen todos los demás casos.

Todo intervalo (a,b) y todo dominio raro se reducen a este caso con un cambio de variable.

  • ¿Mi integral ya está en (0,1)?
  • ¿Qué f evalúo por réplica?
  • ¿Qué error tiene mi promedio?
  • ¿Cómo la llevo a (a,b) si hace falta?

02 · Definición

La fórmula más corta del curso

🎲

U

Uniforme(0,1) directo de random(). Sin transformar.

📊

f(U)

La altura por réplica. Su promedio es la integral.

±

s/√N

El error sin escalas: el desvío de f sobre √N.

Tres integrales base con valor exacto.
fIntegral 0–1σ aprox
x²1/3 ≈ 0,33330,30
√x2/3 ≈ 0,66670,24
e^(−x)1 − 1/e ≈ 0,63210,18

03 · Algoritmo

Tres líneas y listo

U→f(U)→Promedio
  1. 1
    Sortear U.

    u = random.random(). Nada más.

  2. 2
    Evaluar.

    y = f(u): x², √x, e^(−x).

  3. 3
    Promediar ±.

    m ± 1,96·s/√N. Ese es el informe.

Referencia
Todo (a,b) se mapea a (0,1) con x = a + (b−a)u. Entender (0,1) es entender todo.
Función suave
Si f es suave, s es chico y converge rápido. e^(−x) converge mejor que √x (pico en 0).
Test
Probar con x² = 1/3 antes de integrar lo desconocido: si falla ahí, falla en todo.

04 · Ejemplos

El trío de prueba

  1. 1
    x² → 1/3.

    El «hola mundo»: parábola suave, σ ≈ 0,30.

  2. 2
    √x → 2/3.

    Pendiente infinita en 0: un poco más ruidosa.

  3. 3
    e^(−x) → 0,6321.

    Plana y amable: la más fácil de las tres.

05 · Representación en Python

El integrador base

Python en tu navegador. Tres funciones, un patrón.

import random
import math

def integrar01(f, N):
    s = sum(f(random.random()) for _ in range(N))
    return s / N

N = 20000
print("x^2:", integrar01(lambda x: x**2, N), "(1/3)")
print("sqrt:", integrar01(math.sqrt, N), "(2/3)")
print("exp(-x):", integrar01(lambda x: math.exp(-x), N), "(0.6321)")

06 · Exploración

Laboratorio: tres curvas, un método

Elegí la función y las muestras. La curva es f; los puntos son (Uᵢ, f(Uᵢ)); la amarilla tu media y la gris el valor exacto.

EXPERIMENTO 19

El caso base a ojo

Î = promedio(f(U))

Los resultados numéricos aparecen debajo.
Estimada—
Exacta—
Error ±—
Lectura—

Tocá «Integrar» para promediar.

e^(−x) es plana y se calma rápido; √x tiene pico en 0 y tiembla más. La forma de f manda el error.

Preguntas para explorar

  1. Con N = 500, ¿qué función se acerca más a su exacta?
  2. ¿Por qué √x tiembla más que e^(−x)?
  3. ¿Qué N necesita cada una para ±0,005?
Ver respuestas sugeridas
  1. e^(−x): σ ≈ 0,18 contra 0,30 de x². Menos σ, menos temblor.
  2. Su pendiente en 0 es infinita: valores muy dispersos cerca de 0. Más varianza.
  3. N ≈ (1,96·σ/0,005)²: ~13 800 para x², ~8 800 para √x, ~5 000 para e^(−x).

07 · Comprensión

Confusiones frecuentes

«En (0,1) hay que multiplicar por algo»

No: el ancho es 1. Multiplicar por 1 es el error más común al copiar código de (a,b).

«Toda integral ya está en (0,1)»

Solo si la llevaste con cambio de variable. (a,b) e infinitos piden escala (temas 20–22).

«f debe estar entre 0 y 1»

No: f puede valer 100. Lo que está en (0,1) es x, no f(x). Promediar vale igual.

«Si f es rara no vale»

Vale si es integrable (área finita). √x tiene pico infinito y se integra perfecto.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: validar el trío

Estimá las tres con N = 20 000.

import random
import math

N = 20000
print(sum((random.random()**2) for _ in range(N)) / N)
print(sum((math.sqrt(random.random())) for _ in range(N)) / N)
print(sum((math.exp(-random.random())) for _ in range(N)) / N)
Ver solución razonada

~0,333 / ~0,667 / ~0,632. Si alguna se aleja más de 0,01, repetí: fue una mala semilla.

Ejercicio 2: error de cada una

Calculá s y SE para x² con N = 5 000.

import random
import statistics
import math

vals = [random.random()**2 for _ in range(5000)]
s = statistics.pstdev(vals)
print(round(s, 3), round(s / math.sqrt(5000), 4))
Ver solución

s ≈ 0,298, SE ≈ 0,0042. Informe: 0,333 ± 0,004.

Ejercicio 3: la más fácil

¿Cuál de las tres necesita menos N para ±0,005? Justificá con σ.

Ver una posible respuesta
for nombre, sigma in [("x2", 0.30), ("sqrt", 0.24), ("exp", 0.18)]:
    N = int((1.96 * sigma / 0.005) ** 2) + 1
    print(nombre, N)

e^(−x) con ~5 000. Menos σ = menos N: la forma manda.

09 · Síntesis

Ideas para recordar

  • En (0,1): integral = promedio de f(U), sin escalas.
  • Error s/√N: la forma de f (su σ) manda el costo.
  • x² = 1/3 es el test unitario de todo integrador.
  • Todo lo demás (a,b), múltiple, infinito se reduce a este caso.
  • En Python: sum(f(random()) for _)/N.

En el próximo tema escalaremos a intervalos (a,b): el mismo promedio por el ancho.