Diferenciación numérica

Cómo aproximar derivadas usando valores discretos

La diferenciación numérica es una técnica para estimar derivadas usando valores finitos de una función, en lugar de calcularlas analíticamente.

👉 Es útil cuando la función es desconocida, compleja o solo disponible como “caja negra”.

Definición corta

La diferenciación numérica aproxima derivadas mediante diferencias finitas.

Definición detallada

La derivada se aproxima como:f(x)f(x+h)f(x)hf'(x) \approx \frac{f(x + h) – f(x)}{h}

Donde:

  • hh = pequeño incremento

👉 Es una aproximación, no exacta.

Intuición

La diferenciación numérica responde:

👉 “Si avanzo un poco, ¿cuánto cambia la función?”

Punto x  

Pequeño cambio h

Cambio en f

Estimación de pendiente

Tipos de diferencias finitas

🔹 Diferencia hacia adelante

f(x)f(x+h)f(x)hf'(x) \approx \frac{f(x+h) – f(x)}{h}

🔹 Diferencia hacia atrás

f(x)f(x)f(xh)hf'(x) \approx \frac{f(x) – f(x-h)}{h}

🔹 Diferencia central

f(x)f(x+h)f(xh)2hf'(x) \approx \frac{f(x+h) – f(x-h)}{2h}

👉 Más precisa.

Comparación de precisión

MétodoPrecisión
Forwardbaja
Backwardbaja
Centralalta

🔄 Relación con otros conceptos

  • Derivada
  • Diferenciación automática
  • Diferenciación simbólica
  • Gradiente

Diferenciación numérica en machine learning

🔹 1. Gradient checking

Verifica gradientes:

👉 comparando con AD

🔹 2. Modelos caja negra

Cuando no hay fórmula explícita.

🔹 3. Simulaciones

Modelos físicos o experimentales.

🔹 4. Debugging

Validar implementaciones.


📊 Ejemplo paso a paso

f(x)=x2f(x) = x^2

f(2)f(2.001)f(2)0.001f'(2) \approx \frac{f(2.001) – f(2)}{0.001}

👉 Aproximación cercana a 4.

Ejemplo conceptual

Función desconocida  

Evaluaciones en puntos cercanos

Estimación de derivada

⚠️ Elección de hhh

  • muy grande → error de aproximación
  • muy pequeño → error numérico

👉 equilibrio necesario.

Error numérico

  • error de truncamiento
  • error de redondeo

👉 ambos afectan precisión.

Ejemplo en Python

Python
import numpy as np
def f(x):
return x**2
def forward_diff(x, h=1e-5):
return (f(x + h) - f(x)) / h
def central_diff(x, h=1e-5):
return (f(x + h) - f(x - h)) / (2*h)
print("Forward:", forward_diff(2))
print("Central:", central_diff(2))

Ejemplo multivariable

Python
import numpy as np
def f(x):
return x[0]**2 + x[1]**2
def grad(x, h=1e-5):
g = np.zeros_like(x)
for i in range(len(x)):
x_h = x.copy()
x_h[i] += h
g[i] = (f(x_h) - f(x)) / h
return g
print(grad(np.array([2.0, 3.0])))

Ejemplo en PyTorch (comparación)

Python
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x**2
y.backward()
grad_autodiff = x.grad.item()
h = 1e-5
grad_numeric = ((2.0 + h)**2 - 2.0**2) / h
print("AutoDiff:", grad_autodiff)
print("Numérico:", grad_numeric)

Qué muestra este ejemplo

  • Aproximación de derivadas
  • Comparación con AD
  • Validación de gradientes

Errores comunes

Elegir mal hhh

Impacta precisión.

Usarlo en modelos grandes

Muy lento

Asumir exactitud

Siempre hay error.

Ejemplo conceptual en ML

Modelo  

Gradiente (AD)

Verificación (numérico)

Interpretación profunda

La diferenciación numérica permite:

  • estimar derivadas sin fórmulas
  • validar modelos
  • trabajar con sistemas complejos

👉 Es una herramienta práctica, pero no escalable.

Conclusión

La diferenciación numérica aproxima derivadas mediante diferencias finitas. Es útil para verificación y casos donde no hay acceso a derivadas exactas.

👉 Es simple, pero menos precisa y eficiente que la diferenciación automática.

Related Concepts

  • Derivada
  • Diferenciación automática
  • Diferenciación simbólica
  • Gradiente
  • Optimización