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.
29.3 Error absoluto y relativo
El error absoluto mide la distancia entre el resultado aproximado y el valor de 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.
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) | Pasos | Posición Euler (m) | Exacta (m) | Error (m) |
|---|---|---|---|---|
| 1 | 4 | 20 | 16 | 4 |
| 0,5 | 8 | 18 | 16 | 2 |
| 0,25 | 16 | 17 | 16 | 1 |
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.
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.