Sí, este problema de valor inicial está hecho para hacer esas cosas. A petición de Robert Lewis, aquí hay una imagen: la curva roja es la solución analítica, la curva azul es la implementación de libro de texto de RK4 con los parámetros de su puesto.
![enter image description here]()
(La curva azul es bastante vertical a partir de ahí.) No creo que esta ecuación pueda calificarse como rígido (término que nunca he entendido bien), es simplemente hipersensible a la condición inicial. De hecho, la solución exacta con la condición inicial $y(0)=1+\delta$ es $$y(t) = t\sin t + \cos t + \delta\, e^{t^2/2} \tag{1}$$ donde el último término significa problemas. En cuanto nos salimos de la trayectoria exacta lo más mínimo, el $e^{t^2/2}$ y condena la solución, incluso si los cálculos posteriores no tienen ningún error.
Esto no es realmente un fallo del método. Digamos que el valor inicial $y(0)$ se conoce hasta $2^{-53}$ (en doble precisión). Entonces, ¿qué ordenador sabe realmente $\delta$ en (1) es que $|\delta|\le 2^{-53}$ . Pero $2^{-53} e^{t^2/2} > 500,000$ cuando $t=10$ . Esto es para el analítica solución con valor inicial de precisión de máquina. Así que el problema no está (sólo) en el método RK4, no tenemos suficiente precisión al principio para obtener un resultado decente al final. Realizar los cálculos en precisión cuádruple debería ayudar.
En cierto modo, lo de la trigonometría aquí es más que nada un adorno. La ecuación más simple $y'=ty$ ya tiene la misma característica. Con el valor inicial $0$ la solución es $y\equiv 0$ . Pero con un valor inicial no nulo $C$ es $y= C \exp (t^2/2)$ que es enorme.
Por cierto, he probado con solucionadores de ODE rígidos como ode15s
en Matlab; eso no ayudó en absoluto.
A modo de apunte: considere lo que ocurre si invertimos el orden de los ejes temporales. Es decir, dejemos que $t = 10-s$ por lo que la función desconocida es $z(s) = y(10-t)$ . Entonces resuelve $$z' = - (10-s) (z-(10-s)\sin(10-s))$$ con alguna condición inicial $z(0)=C$ . Entonces el método numérico funciona bien; no se necesitan pasos muy pequeños. Por ejemplo, a continuación he resuelto con $C = -6.1$ utilizando sólo $40$ pasos de RK4 y trazamos la solución a la inversa:
![shooting]()
En cierto modo, esto es una trampa: ¿cómo sabía yo que $C=-6.1$ ¿es el valor correcto a utilizar? (Lo tomé del valor del punto final de la solución exacta).
1 votos
¿Podría publicar un gráfico de la "explosión"?