Método de Monte Carlo · Tema 21

Integración en dominios multidimensionales

Donde Monte Carlo gana: el error sigue 1/√N en 1D o en 10D.

01 · Punto de partida

La maldición que Monte Carlo rompe

Integrar en 5 dimensiones con cuadrícula de 10 puntos por eje pide 10⁵ = 100 000 evaluaciones. En 10 dimensiones, 10¹⁰: imposible. Monte Carlo pide lo mismo en cualquier dimensión: N puntos al azar, un promedio, por el volumen.

El precio es el mismo 1/√N de siempre; la recompensa es que la dimensión deja de importar.

  • ¿Cuál es el volumen de mi dominio?
  • ¿Cómo sorteo uniforme en ese dominio?
  • ¿Qué promedio calculo?
  • ¿Por qué la cuadrícula pierde y el azar gana?

02 · Definición

Volumen por promedio

📦

Volumen

Área en 2D, volumen en 3D: en [0,1]ᵈ vale 1. Escala el promedio a integral.

🎲

Punto uniforme

Un U por coordenada: (U₁, U₂) en el cuadrado, (U₁,…,U_d) en el hipercubo.

📊

Promedio

f(Xᵢ) por punto: la «altura media» del dominio. Por el volumen es la integral.

Cuadrícula frente a Monte Carlo en dimensión d.
MétodoCosto para eEn d = 8
Cuadrícula (orden 2)~e^(−d/2)Imposible: pide miles de millones
Monte Carlo~1/√N siempreN = 10 000 da ±1% igual que en 1D

03 · Algoritmo

Integrar en d dimensiones en 3 pasos

Punto en D→f(punto)→×Vol
  1. 1
    Sortear el punto.

    Una uniforme por coordenada. En [0,1]²: (random(), random()).

  2. 2
    Evaluar y promediar.

    m = Σf(Xᵢ)/N, s = desvío de las alturas.

  3. 3
    Multiplicar por Vol.

    En el cubo unitario Vol = 1: el promedio YA es la integral.

Hipercubo [0,1]ᵈ
El caso base: Vol = 1, sorteo trivial. Todo rectángulo se estira desde aquí.
Dominio raro
Se encierra en caja y se multiplica por dentro/fuera, o se parametriza. El test decide.
Dimensión alta
Finanzas (decenas de activos) y física (cientos de partículas): solo Monte Carlo llega.

04 · Ejemplos

Tres integrales 2D exactas

  1. 1
    x·y en [0,1]² → 1/4.

    Separable: 1/2 × 1/2. Test de tu código.

  2. 2
    x²+y² → 2/3.

    Suma de marginales: 1/3 + 1/3.

  3. 3
    e^(−x−y) → (1−1/e)² ≈ 0,40.

    Sin primitiva mixta a mano: Monte Carlo igual.

05 · Representación en Python

El mismo bucle, un U más por dimensión

Python en tu navegador. Agregar dimensión es agregar un random().

import random

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

N = 30000
print("x*y:", integrar2(lambda x, y: x*y, N), "(1/4)")
print("x2+y2:", integrar2(lambda x, y: x**2 + y**2, N), "(2/3)")
import random

def integrar_d(f, d, N):
    tot = 0
    for _ in range(N):
        xs = [random.random() for _ in range(d)]
        tot += f(xs)
    return tot / N

print(integrar_d(lambda xs: sum(x**2 for x in xs), 5, 20000), "(5/3)")

06 · Exploración

Laboratorio: pintar el cuadrado por altura

Cada punto (x,y) se pinta según f: claro = alto. El promedio de esos tonos es la integral. Cambiá f y N.

EXPERIMENTO 21

El volumen se promedia

Î = promedio(f) en [0,1]²

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

Tocá «Integrar» para promediar el cuadrado.

x·y crece hacia arriba-derecha; x²+y² hacia los bordes. El color muestra dónde aporta cada punto.

Preguntas para explorar

  1. ¿Qué función tiembla más a igual N? ¿Por qué?
  2. ¿El error en 2D cae más lento que en 1D?
  3. ¿Qué pasaría con 10 puntos por eje en 6D?
Ver respuestas sugeridas
  1. x²+y² (σ ≈ 0,42 vs 0,22): más dispersión de alturas, más error.
  2. No: 1/√N en ambas. Esa es la victoria de Monte Carlo.
  3. 10⁶ puntos para una malla gruesa. Monte Carlo con 10 000 ya da ±1%.

07 · Comprensión

Confusiones frecuentes

«En 2D hay que multiplicar por algo»

En [0,1]² el volumen es 1: el promedio ya es la integral. En [a,b]×[c,d] se multiplica por el área.

«Más dimensión pide exponencialmente más N»

Eso vale para cuadrículas. Monte Carlo pide igual N para igual σ: la dimensión no entra.

«Sortear (x,y) es sortear dos veces lo mismo»

Son dos U independientes. Reutilizar una ata x = y y sesga.

«Visualizar en 5D es igual»

Integrar sí; visualizar no. En alta dimensión se confía en números, no en dibujos.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: x·y con N = 20 000

Verificá 1/4.

import random

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

~0,25 ± 0,002. Cada producto es una altura; el promedio, la integral.

Ejercicio 2: volumen de la esfera

Fracción de puntos en x²+y²+z² ≤ 1 dentro de [−1,1]³ (Vol = 8) → 4,19.

import random

N = 30000
d = sum(1 for _ in range(N)
        if (2*random.random()-1)**2 + (2*random.random()-1)**2 + (2*random.random()-1)**2 <= 1)
print(8*d/N)
Ver solución

~4,19 ± 0,03. Integración 3D por conteo: el mismo patrón de áreas.

Ejercicio 3: 5D de juguete

∫ Σxᵢ² en [0,1]⁵ = 5/3 ≈ 1,667 con un integrador genérico.

Ver una posible respuesta
import random

def f(xs):
    return sum(x*x for x in xs)

N, d = 20000, 5
print(sum(f([random.random() for _ in range(d)]) for _ in range(N)) / N)

~1,667. Cinco dimensiones con el mismo bucle de 1D.

09 · Síntesis

Ideas para recordar

  • ∫_D f = Vol·promedio: un U por coordenada, una f por punto.
  • Error Vol·s/√N: la dimensión no aparece.
  • Cuadrícula colapsa en alta dimensión; Monte Carlo no.
  • En [0,1]ᵈ el promedio YA es la integral.
  • En Python: agregar dimensión = agregar un random().

En el próximo tema domaremos lo infinito: integración en intervalos infinitos.