Método de Monte Carlo · Tema 20

Integración en intervalos (a,b)

El mismo promedio, por el ancho: estirar el uniforme de (0,1) a (a,b).

01 · Punto de partida

Todo (a,b) es un (0,1) estirado

Si sabés integrar en (0,1), sabés integrar en cualquier (a,b): transformás U en x = a + (b−a)·U y multiplicás el promedio por el ancho. Nada más cambia.

El error también se estira: intervalos anchos o funciones altas piden más N.

  • ¿Cuáles son mi a y b?
  • ¿Cómo genero xᵢ en (a,b)?
  • ¿Por qué ancho multiplico?
  • ¿Cómo verifico con un caso exacto?

02 · Definición

Estirar, evaluar, escalar

↔

Estirar

x = a + (b−a)·U: el uniforme base se muda al intervalo real.

📊

Evaluar

f(xᵢ) como siempre: la altura media en (a,b).

✖️

Escalar

×(b−a): la altura media se vuelve integral.

Tres (a,b) con su exacta para verificar.
IntegralExactaAncho
∫₁² x²7/3 ≈ 2,3331
∫₀^π sin2π ≈ 3,14
∫₀² e^(−x)1 − e^(−2) ≈ 0,8652

03 · Algoritmo

El mismo código, dos líneas más

U→x en (a,b)→×ancho
  1. 1
    Sortear en (a,b).

    x = a + (b-a)*random() o uniform(a, b).

  2. 2
    Promediar f(xᵢ).

    Igual que en (0,1): media y s de las alturas.

  3. 3
    Multiplicar.

    Î = (b−a)·media, SE = (b−a)·s/√N. No olvidar el ×.

Olvidar el ancho
El bug clásico: promediar en (a,b) sin ×(b−a) estima la altura media, no la integral.
Ancho grande
Duplicar el ancho duplica el error con igual N. Achicar el intervalo (si se puede) es gratis.
Verificación
Probar con x² en (1,2) = 7/3 antes de lo desconocido.

04 · Ejemplos

Estirar tres veces

  1. 1
    x² en (1,2).

    x = 1 + U, Î = promedio(xᵢ²) × 1 → 7/3.

  2. 2
    sin en (0,π).

    x = π·U, Î = π·promedio(sin) → 2.

  3. 3
    Normal en (−2,2).

    Ancho 4 por altura media: colas recortadas con error conocido.

05 · Representación en Python

Integrador (a,b) genérico

Python en tu navegador. Cambiá f, a, b y verificá con la exacta.

import random
import statistics
import math

def integrar_ab(f, a, b, N):
    vals = [f(random.uniform(a, b)) for _ in range(N)]
    m = sum(vals) / N
    s = statistics.pstdev(vals)
    return (b - a) * m, (b - a) * s / math.sqrt(N)

I, se = integrar_ab(lambda x: x**2, 1, 2, 20000)
print(f"{I:.4f} ± {se:.4f} (real 2.3333)")
I2, se2 = integrar_ab(math.sin, 0, math.pi, 20000)
print(f"{I2:.4f} ± {se2:.4f} (real 2.0000)")

06 · Exploración

Laboratorio: estirar la parábola

Integramos x² moviendo a y b. La zona verde es tu [a,b]; los puntos son (xᵢ, xᵢ²). La integral exacta (b³−a³)/3 verifica.

EXPERIMENTO 20

El ancho multiplica

Î = (b−a)·promedio

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

Tocá «Integrar» para estimar en [a,b].

Si b ≤ a, se intercambian: la integral cambia de signo. Intervalos anchos = bandas más anchas con igual N.

Preguntas para explorar

  1. Con [1,2], ¿la estimada ronda 2,333?
  2. Con [0,3], ¿el error es mayor que con [1,2] a igual N? ¿Por qué?
  3. ¿Qué pasa si ponés a > b?
Ver respuestas sugeridas
  1. Sí: ±0,02 con N = 5 000.
  2. Sí: ancho 3 vs 1 y f más alta (σ mayor). Doble castigo.
  3. Se integra al revés: signo negativo. El laboratorio lo corrige solo.

07 · Comprensión

Confusiones frecuentes

«Promedio en (a,b) ya es la integral»

Falta ×(b−a). Sin ancho estimás altura media, no área.

«Sortear U(0,1) y evaluar f directo»

Hay que estirar: x = a+(b−a)U. Evaluar f(U) integra en (0,1), no en (a,b).

«El error no depende del ancho»

Sí: SE = (b−a)·s/√N. Ancho doble, error doble.

«a > b da error»

Da integral negativa: es correcto si respetás el signo. Mejor ordenar a < b.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: x² en (1,2)

Estimá y compará con 7/3.

import random

N = 20000
m = sum((random.uniform(1, 2)**2) for _ in range(N)) / N
print(m, 7/3)
Ver solución razonada

Ancho 1: el promedio YA es la integral. ~2,333 ± 0,01.

Ejercicio 2: seno en (0,π)

Estimá ∫₀^π sin con el ×π explícito.

import random
import math

N = 20000
m = sum(math.sin(random.uniform(0, math.pi)) for _ in range(N)) / N
print(math.pi * m)
Ver solución

~2,00. Sin el ×π daría ~0,64: la altura media, no la integral.

Ejercicio 3: reutilizar (0,1)

Integrá x² en (2,4) vía g(u) = f(2+2u) por 2.

Ver una posible respuesta
import random

N = 20000
m = sum(((2 + 2*random.random())**2) for _ in range(N)) / N
print(2*m, (64-8)/3)

~18,667. Un solo motor (0,1) sirve para todo (a,b).

09 · Síntesis

Ideas para recordar

  • x = a + (b−a)U lleva (0,1) a (a,b).
  • Î = (b−a)·promedio: el ×ancho es obligatorio.
  • SE = (b−a)·s/√N: anchos grandes piden más N.
  • Verificar con x²: (b³−a³)/3 no falla.
  • En Python: uniform(a,b) + promedio + ×ancho.

En el próximo tema subiremos de dimensión: integración en dominios multidimensionales.