29. Verificación de resultados y efecto del tamaño del paso temporal

Una simulación que se ejecuta sin errores puede producir física incorrecta. Verificar significa comparar, medir el error y comprobar que el resultado mejora al reducir el paso temporal.

29.1 Ejecutar no equivale a verificar

Una animación fluida puede esconder unidades mezcladas, signos invertidos o un integrador inestable. La verificación pregunta si el programa resuelve correctamente el modelo matemático elegido.

Es distinta de la validación física. Verificar compara código y ecuaciones; validar pregunta si esas ecuaciones representan suficientemente el fenómeno real.

Primero comprobamos la implementación y luego contrastamos el modelo con mediciones o requisitos.

29.2 Casos con respuesta conocida

Las soluciones analíticas son referencias valiosas. Para velocidad constante conocemos x = x0 + vt. Para aceleración constante conocemos x = x0 + v0t + ½at².

También sirven casos límite: t = 0 debe devolver el estado inicial; a = 0 debe reducir el movimiento acelerado a uno uniforme; fuerza neta cero debe conservar la velocidad.

resultado numérico ↔ resultado de referencia

29.3 Error absoluto y relativo

El error absoluto mide la distancia entre el resultado aproximado y el valor de referencia:

error absoluto = |aproximado − referencia|

El error relativo divide esa diferencia por |referencia| y permite comparar escalas. No debe usarse directamente cuando la referencia es cero.

Una tolerancia define cuánto error acepta la aplicación. Debe elegirse según unidades, escala visual y objetivo, no como un número arbitrario que oculte fallas.

29.4 El tamaño del paso temporal

Un paso grande hace menos cálculos, pero representa peor las variaciones internas. Un paso pequeño suele reducir el error y aumenta el costo computacional.

Para Euler, reducir dt produce más rectángulos en la aproximación. En aceleración constante, la velocidad se calcula exactamente, pero la posición mantiene un error cuyo signo depende de la variante usada.

La relación entre costo y precisión forma parte del diseño de la simulación.

29.5 Estudio de convergencia

Un estudio sencillo ejecuta el mismo experimento con dt, dt/2 y dt/4. Si los resultados se acercan a una referencia o entre sí, observamos convergencia.

No basta con probar un único paso. Dos errores pueden compensarse accidentalmente. Mantener idénticas las condiciones iniciales permite atribuir la diferencia solo a dt.

al reducir dt, el error esperado debe disminuir de forma sistemática

29.6 Medir error con JavaScript

function medirError(aproximado, referencia) {
  const absoluto = Math.abs(aproximado - referencia);
  const relativo = referencia === 0 ? null : absoluto / Math.abs(referencia);
  return { absoluto, relativo };
}

const error = medirError(9.8, 10);
console.log(error.absoluto.toFixed(1));
console.log((error.relativo * 100).toFixed(1) + ' %');

El error absoluto es 0,2 y el relativo 2 %. La unidad del error absoluto coincide con la magnitud comparada; el relativo no tiene unidad.

29.7 Tabla de pruebas

Una verificación reproducible registra condiciones, método, dt, resultado, referencia y error. Así podemos detectar regresiones cuando se modifica el código.

dt (s)PasosPosición Euler (m)Exacta (m)Error (m)
1420164
0,5818162
0,251617161

El ejemplo usa Euler semiexplícito con v0 = 2 m/s, a = 1 m/s² y duración 4 s. Al dividir dt por dos, el error también se reduce aproximadamente a la mitad.

29.8 Laboratorio: convergencia al reducir dt

Elegí duración, velocidad y aceleración. El gráfico compara errores para cuatro pasos temporales.

Los resultados aparecen debajo.
Barras amarillas: error absoluto. Línea celeste: valor exacto de posición.
Posición exacta16,00 m
Error con dt mayor4,00 m
Error con dt menor0,50 m
Relación de errores8,00

Comparación calculada.

29.9 Evitar errores al llegar al tiempo final

Si duración/dt no es entero, repetir pasos completos puede superar el instante final. El último paso debe reducirse para cubrir solo el tiempo restante.

let tiempo = 0;
const final = 1, dt = 0.3;
const pasos = [];
while (tiempo < final) {
  const pasoActual = Math.min(dt, final - tiempo);
  pasos.push(pasoActual);
  tiempo += pasoActual;
}
console.log(pasos.length);
console.log(tiempo.toFixed(1) + ' s');

Se ejecutan cuatro pasos y se termina exactamente en 1 s. El último dura aproximadamente 0,1 s.

29.10 Fuentes de error y diagnóstico

No toda diferencia proviene de dt. También existen errores de fórmula, unidades, redondeo, condiciones iniciales, detección de eventos y datos de entrada.

Para aislar la causa, simplificá el caso, registrá estados intermedios y cambiá una sola variable. Si reducir dt no mejora el resultado, probablemente el problema no sea solo discretización.

Comparar invariantes como energía o cantidad de movimiento aporta otra señal, siempre que el modelo realmente deba conservarlos.

29.11 Ejercicio integrador

Una solución exacta vale 25 m. Dos simulaciones producen 27 m con dt = 0,5 s y 26 m con dt = 0,25 s. Calculá errores absolutos y decidí si hay evidencia de convergencia.

Ver solución y código

Los errores son 2 m y 1 m. Al reducir el paso a la mitad, el error también se reduce a la mitad; esto es evidencia de convergencia de primer orden en estos datos.

const exacta = 25;
const errorGrande = Math.abs(27 - exacta);
const errorPequeno = Math.abs(26 - exacta);
const razon = errorGrande / errorPequeno;
console.log(errorGrande + ' m');
console.log(errorPequeno + ' m');
console.log(razon);

29.12 Ideas para recordar

  • Verificación compara la implementación con el modelo.
  • Validación compara el modelo con el fenómeno o requisito.
  • Los casos exactos y límite revelan errores rápidamente.
  • El error absoluto conserva la unidad; el relativo no.
  • Un estudio de convergencia usa varios tamaños de paso.
  • El último paso puede ajustarse al tiempo restante.
  • Reducir dt no corrige fórmulas o unidades equivocadas.

En el próximo tema integraremos el curso mediante un proyecto de simulación sencillo.