28. Condiciones iniciales, límites y criterios de parada

Una simulación necesita saber desde dónde empieza, qué estados están permitidos y cuándo debe finalizar. Estas reglas forman parte del modelo tanto como las ecuaciones de movimiento.

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.

estado inicial = valores necesarios para comenzar una evolución única

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.

estado válido = restricciones físicas + invariantes del modelo

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.

Los resultados aparecen debajo.
Amarillo: móvil. Rosa: límite espacial. Turquesa: trayectoria.
Tiempo0,00 s
Posición0,00 m
EstadoEn marcha
Motivo de parada

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.