Inicio · Parte 11 — Métodos numéricos y computación científica
error total ≈ C₁·hᵖ + C₂·ε/h
diferencia adelantada: O(h); central: O(h²)
h óptimo de la central ≈ ε^(1/3) ≈ 6·10⁻⁶
Todo método numérico arrastra dos errores de naturaleza opuesta. El error de truncamiento proviene de la aproximación matemática —cortar una serie de Taylor, sustituir una curva por una recta— y se reduce al hacer el paso más pequeño. El error de redondeo proviene de la aritmética de precisión finita y crece al reducir el paso, porque restar dos números casi iguales y dividir por algo diminuto amplifica el ruido.
La suma de ambos tiene un mínimo. Existe un h óptimo, y por debajo de él afinar más empeora el resultado. Esto contradice la intuición de que «más pequeño es más preciso», y es la razón de que una derivada numérica con h = 10⁻¹⁵ sea basura mientras que con h = 10⁻⁶ sea buena.
El orden de un método es la potencia de h en el término de truncamiento, y es la cifra que permite predecir el comportamiento sin ejecutar nada. Un método de orden 1 divide el error por 2 al duplicar el trabajo; uno de orden 2 lo divide por 4; uno de orden 4, por 16. Esa diferencia es lo que decide entre segundos y horas de cómputo.
La consecuencia metodológica es que hay que medir el orden empíricamente. Ejecutar con h y con h/2, calcular el cociente de errores y comprobar que sale lo que la teoría predice, es la prueba más eficaz de que una implementación es correcta: un método de orden 4 cuyo error solo se divide por 2 tiene un error de programación.
Derivada numérica de sen en x = 1, con distintos pasos.
valor exacto: cos(1) = 0,5403023058681398
h error adelantada error central
1e-01 4,294e-02 9,00e-04
1e-03 4,207e-04 9,00e-08
1e-05 4,207e-06 9,04e-12
1e-07 4,361e-08 6,07e-10 ← empeora
1e-09 2,721e-08 2,72e-08 ← ruido
1e-11 6,004e-06 6,00e-06 ← basura
La central es O(h²): h × 0,01 → error × 0,0001 ✓
hasta que el redondeo domina cerca de h ≈ 1e-6.
h óptimo aproximado para la central: ε^(1/3) ≈ 6e-6
Error de truncamiento frente a error de redondeo.
python classes/part-11-metodos-numericos-y-computacion-cientifica/221-errores-numericos-y-convergencia/lab.py
compmath run 221
derivada_exactainformeh_optimo_aproxpor_que_hay_un_optimoorden_adelanteorden_central{
"derivada_exacta": 0.5403023058681398,
"informe": [
{
"h": 0.1,
"error_adelante": 0.04293855333275065,
"error_central": 0.0009000536983797547
},
{
"h": 0.001,
"error_adelante": 0.0004208255078128609,
"error_central": 9.005045020771263e-08
},
{
"h": 1e-05,
"error_adelante": 4.207362275021609e-06,
"error_central": 1.1140866007508521e-11
},
{
"h": 1e-08,
"error_adelante": 2.9698852266335507e-09,
"error_central": 2.581229896492232e-09
},
{
"h": 1e-12,
"error_adelante": 4.3240216923923214e-05,
"error_central": 1.2270934307334613e-05
}
],
"h_optimo_aprox": 1.4832396974191326e-08,
"por_que_hay_un_optimo": "truncamiento baja con h, redondeo sube con 1/h",
"orden_adelante": "O(h)",
"orden_central": "O(h²)"
}
Comprobación de gradientes numéricos frente a autodiferenciación, validación de integradores y elección de pasos en simulación.
Los Neural ODE, los samplers de difusión y los optimizadores de segundo orden son métodos numéricos con parámetros aprendidos.
9781611975581, pendiente de resolver.9780898718027, pendiente de resolver.