Eleccion del paso temporal
El equilibrio entre precision, estabilidad y velocidad de computo
El dilema del paso temporal
Ya sabemos que RK4 es mucho mas preciso que Euler. Pero incluso con RK4, la eleccion del paso temporal \(dt\) es critica. Demasiado grande y la simulacion se vuelve inestable. Demasiado pequeno y desperdiciamos poder de computo sin ganar calidad visual perceptible.
Este dilema no es abstracto: tiene consecuencias directas en ChaosLab. Si la simulacion usa un \(dt\) muy pequeno, la animacion avanza lentamente y necesitamos mas pasos por frame. Si usamos un \(dt\) grande, ahorramos computo pero la trayectoria puede explotar o mostrar artefactos visibles.
Para cada sistema caotico, existe un rango de valores de \(dt\) que producen resultados aceptables. Encontrar ese rango es una mezcla de teoria, experiencia y experimentacion. Veamos los tres regimenes.
dt demasiado grande
Cuando \(dt\) es demasiado grande, los pasos de integracion "saltan" por encima de la curvatura de la solucion. En un sistema como Lorenz, donde la trayectoria hace giros cerrados alrededor de los dos puntos fijos, un paso grande puede lanzar el punto numerico fuera del atractor por completo.
El resultado es inestabilidad numerica: los valores de \(x, y, z\) crecen sin limite y la simulacion "explota". Para Lorenz con parametros clasicos (\(\sigma=10, \rho=28, \beta=8/3\)), incluso RK4 se vuelve inestable alrededor de \(dt \approx 0.03\).
La inestabilidad no es gradual: hay un umbral bastante definido. Por debajo, la trayectoria se ve normal. Por encima, en pocas iteraciones los valores se van a infinito. En el LAB puedes observar este fenomeno moviendo el slider de \(dt\) hacia la derecha.
dt demasiado pequeno
En el otro extremo, un \(dt\) muy pequeno produce resultados correctos pero desperdicia recursos. Si usamos \(dt = 0.0001\) en lugar de \(dt = 0.005\), necesitamos 50 veces mas pasos para cubrir el mismo intervalo de tiempo. Cada paso requiere 4 evaluaciones de la funcion (en RK4), asi que estamos haciendo 200 veces mas trabajo.
En una aplicacion de tiempo real como ChaosLab, esto tiene consecuencias directas: si el integrador es demasiado lento, la animacion no puede mantenerse a 60 fps. El presupuesto de computo por frame es de aproximadamente 16 milisegundos (1000ms / 60fps). Todo lo que exceda ese presupuesto causa caidas de framerate visibles.
Ademas, despues de cierto punto, reducir \(dt\) no produce mejoras visibles. La precision del punto flotante de 64 bits (IEEE 754) limita la precision util a unos \(10^{-15}\). Si el error de RK4 ya esta cerca de ese limite, reducir \(dt\) no ayuda y solo desperdicia ciclos de CPU.
El punto dulce
Para la mayoria de los atractores caoticos 3D, el "punto dulce" de \(dt\) con RK4 esta en el rango:
$$dt \in [0.001, \; 0.01]$$Una estimacion rapida viene de considerar las escalas temporales del sistema. El atractor de Lorenz tiene un periodo orbital caracteristico de aproximadamente \(T \approx 1.5\) unidades de tiempo. Para que RK4 resuelva bien la curvatura de cada orbita, necesitamos al menos ~100-300 pasos por periodo:
$$dt \approx \frac{T}{200} \approx \frac{1.5}{200} = 0.0075$$ChaosLab usa \(dt = 0.005\) como valor predeterminado para Lorenz. Con 20 pasos por frame a 60 fps, esto avanza el tiempo simulado a una tasa de \(20 \times 0.005 \times 60 = 6\) unidades de tiempo por segundo. Suficientemente rapido para ver la dinamica, suficientemente preciso para mantener la fidelidad.
La eleccion del dt es un compromiso entre precision y velocidad. Para simulaciones en tiempo real, el valor optimo es aquel que mantiene la estabilidad con el minimo de pasos por frame.
Paso adaptativo (preview)
En vez de elegir un \(dt\) fijo para toda la simulacion, los metodos adaptativos cambian el paso automaticamente segun la dificultad de cada tramo. La idea: en regiones donde la solucion es suave, usar pasos grandes; en regiones donde cambia rapido, usar pasos pequenos.
El algoritmo mas popular es Dormand-Prince (RK45), que calcula simultaneamente soluciones de orden 4 y orden 5. La diferencia entre ambas da una estimacion del error local. Si el error es demasiado grande, se reduce \(dt\); si es pequeno, se aumenta.
Una condicion tipo CFL (Courant-Friedrichs-Lewy) para la estabilidad aproximada es:
$$dt \leq \frac{C}{\max|\lambda_i|}$$donde \(\lambda_i\) son los valores propios del Jacobiano del sistema y \(C\) es una constante que depende del metodo (~2.8 para RK4). Para Lorenz, el valor propio mas grande en magnitud es aproximadamente 13.9, dando \(dt \leq 2.8/13.9 \approx 0.2\). En la practica se usa un factor de seguridad, resultando en \(dt \approx 0.01\), consistente con nuestra eleccion empirica.
| dt | Lorenz (RK4) | Pasos/seg (60fps) | Calidad |
|---|---|---|---|
| 0.001 | Excelente precision | 1200 | Perfecta (innecesaria) |
| 0.005 | Estable, preciso | 1200 | Optima |
| 0.01 | Estable | 1200 | Buena |
| 0.02 | Marginal | 1200 | Artefactos visibles |
| 0.03 | Limite de estabilidad | 1200 | Deformacion del atractor |
| 0.05+ | Explosion numerica | 1200 | Inestable |
Ejercicios
- Usando el LAB, encuentra experimentalmente el mayor valor de \(dt\) para el que el atractor de Lorenz sigue viendose estable con RK4. Anota el valor.
- Que ocurre visualmente cuando pones \(dt = 0.05\)? Describe lo que ves en la pantalla y explica por que sucede.
- Si necesitas simular 100 unidades de tiempo de Lorenz con \(dt = 0.005\), cuantos pasos de RK4 necesitas? Cuantas evaluaciones de la funcion en total?
LAB: Estabilidad del paso temporal
Atractor de Lorenz integrado con RK4 en tiempo real. Mueve el slider de dt y observa: estable a la izquierda, artefactos en el centro, explosion a la derecha. El contador muestra los pasos por segundo.