28.1 El problema no está completo sin condiciones
Una ecuación diferencial describe cómo cambia un sistema, pero no determina una trayectoria única sin condiciones iniciales. Posición y velocidad al comienzo seleccionan una solución concreta.
Dos objetos con la misma aceleración pueden evolucionar de forma diferente si parten de posiciones o velocidades distintas. Por eso los datos iniciales deben formar parte explícita del experimento.
Los límites y criterios de parada responden otras preguntas: qué estados acepta el modelo y hasta cuándo tiene sentido calcularlo.
28.2 Condiciones iniciales
Para movimiento en una dimensión suelen ser x0, v0 y t0. Otros sistemas pueden requerir ángulo, velocidad angular, energía o estado de contacto.
Conviene crear el estado mediante una función. Reiniciar debe producir siempre una copia limpia, sin conservar tiempo, fuerzas o indicadores de una ejecución anterior.
28.3 Parámetros y condiciones no son lo mismo
La masa, la gravedad y el coeficiente de fricción configuran las reglas del sistema. La posición y velocidad inicial indican desde qué estado se aplican esas reglas.
Separar ambos grupos permite ejecutar muchos experimentos con el mismo modelo. También facilita guardar configuraciones y comparar resultados de manera reproducible.
Una semilla aleatoria forma parte de las condiciones cuando el sistema usa azar y queremos repetir exactamente una ejecución.
28.4 Límites físicos y límites numéricos
Un límite físico representa algo del sistema: suelo, pared, longitud máxima o temperatura permitida. Un límite numérico protege el cálculo: dt máximo, cantidad máxima de iteraciones o magnitud finita.
No debemos confundirlos. Limitar una velocidad porque el juego lo necesita es una regla de diseño; limitarla para ocultar una inestabilidad no corrige el integrador.
28.5 Detectar el cruce de un límite
Un paso puede comenzar antes de una pared y terminar después. Comprobar solo igualdad casi nunca funciona con números decimales. Debemos detectar el cambio de lado: x anterior < límite y x nueva ≥ límite.
Después se corrige el estado y se decide la respuesta: detener, rebotar, deslizar o activar otro modo. En modelos exigentes se calcula el instante exacto del contacto dentro de dt.
28.6 Criterios de parada
Una simulación puede detenerse por tiempo máximo, llegada a una meta, reposo aproximado, colisión terminal, convergencia o petición del usuario.
El criterio debe ser comprobable y estar documentado. “Hasta que deje de moverse” requiere tolerancias concretas, por ejemplo rapidez menor que 0,01 m/s durante varios pasos.
Siempre conviene incluir un máximo de iteraciones como protección contra bucles que nunca alcanzan la condición esperada.
28.7 Validar las condiciones iniciales
function validar(config) {
if (!Number.isFinite(config.posicion)) throw new Error('Posición inválida');
if (!Number.isFinite(config.velocidad)) throw new Error('Velocidad inválida');
if (config.limite <= config.posicion) throw new Error('El límite debe estar adelante');
if (config.dt <= 0) throw new Error('dt debe ser positivo');
return true;
}
console.log(validar({ posicion: 0, velocidad: 3, limite: 10, dt: 0.1 }));Validar al principio produce errores claros y evita propagar NaN, infinitos o estados imposibles.
28.8 Laboratorio: alcanzar un límite
Un móvil avanza con velocidad constante. Elegí condiciones iniciales, límite y criterio de parada. El estado se corrige al alcanzar la pared.
Simulación preparada.
28.9 Tolerancias y reposo
Con coma flotante no conviene exigir velocidad === 0. Una tolerancia considera detenido un cuerpo cuando |v| < ε. El valor ε depende de la escala y precisión necesarias.
function estaEnReposo(velocidad, tolerancia = 0.01) {
return Math.abs(velocidad) < tolerancia;
}
console.log(estaEnReposo(0.005));
console.log(estaEnReposo(0.02));Los resultados son verdadero y falso. Exigir varios pasos consecutivos bajo la tolerancia evita detener un sistema durante un cruce momentáneo.
28.10 Bucles seguros y resultados reproducibles
Un bucle sin máximo puede bloquear el programa si el criterio es inalcanzable. Debe terminar al cumplirse el evento o agotarse el presupuesto de pasos.
Registrar condiciones iniciales, parámetros, dt y motivo de parada permite repetir y diagnosticar. El renderizado no debe decidir la física: la condición se evalúa sobre el estado numérico.
Al comparar experimentos, cambiá una variable por vez y restaurá el mismo estado inicial.
28.11 Ejercicio integrador
Un móvil parte en x = 2 m con v = 4 m/s. Hay una pared en x = 11 m y un tiempo máximo de 3 s. Determiná qué criterio se cumple primero y cuándo.
Ver solución y código
Llega a la pared después de (11−2)/4 = 2,25 s, antes del máximo de 3 s. La posición final se fija en 11 m.
const x0 = 2, velocidad = 4, limite = 11, tiempoMaximo = 3;
const tiempoAlLimite = (limite - x0) / velocidad;
const motivo = tiempoAlLimite <= tiempoMaximo ? 'límite' : 'tiempo';
const tiempoFinal = Math.min(tiempoAlLimite, tiempoMaximo);
console.log(tiempoFinal + ' s');
console.log(motivo);28.12 Ideas para recordar
- Las condiciones iniciales seleccionan una evolución concreta.
- Los parámetros configuran las reglas y deben separarse del estado.
- Los límites físicos y numéricos cumplen funciones diferentes.
- Los cruces se detectan mediante intervalos, no igualdad exacta.
- Las tolerancias permiten definir reposo y convergencia.
- Todo bucle debe tener una salida de seguridad.
- Registrar el motivo de parada mejora el diagnóstico.
En el próximo tema estudiaremos errores numéricos, estabilidad y depuración de simulaciones.