La configuración de referencia
En el software Julia DifferentialEquations.jl implementamos muchos métodos de orden superior, incluidos los métodos Feagin. Puede verlo en nuestra lista de métodos , y luego hay toneladas de otros que puede usar como cuadros suministrados . Debido a que todos estos métodos se combinan, puede compararlos fácilmente. Puede ver los puntos de referencia que tengo en línea aquí , y ver que es muy simple comparar muchos algoritmos diferentes. Entonces, si desea tomarse unos minutos para ejecutar los puntos de referencia, hágalo. Aquí hay un resumen de lo que sale.
En primer lugar, es importante tener en cuenta que, si observa cada uno de los puntos de referencia, verá que nuestra DP5
(Orden 5 de Dormand-Prince) y los DP8
métodos son más rápidos que los códigos Hairer Fortran ( dopri5
y dop853
), por lo que estas implementaciones están muy bien optimizadas . Estos muestran que, como se señaló en otro hilo, el uso excesivo de los métodos de Dormand-Prince se debe a que los métodos ya están escritos, no porque sigan siendo los mejores. Entonces, la comparación real entre las implementaciones más optimizadas es entre los métodos Tsitorous, los métodos Verner y los métodos Feagin de DifferentialEquations.jl.
Los resultados
En general, los métodos de un orden superior a 7 tienen un costo computacional adicional que generalmente no se ve superado por el orden, dadas las tolerancias elegidas. Una razón para esto es que las opciones de coeficientes para los métodos de orden inferior están más optimizadas (tienen pequeños "coeficientes de error de truncamiento principales", que son más importantes cuando no es asimétricamente pequeño). Puede ver que en muchos problemas como aquí, los métodos Verner Efficient 6 y 7 funcionan extremadamente bien, pero métodos como el Verner Efficient 8 pueden tener una pendiente más baja. Esto se debe a que las "ganancias" de orden superior se combinan con tolerancias más bajas, por lo que siempre hay una tolerancia donde los métodos de orden superior serán más eficientes.
Sin embargo, la pregunta es entonces, ¿qué tan bajo? En una implementación bien optimizada, eso se vuelve bastante bajo por dos razones. La primera razón es porque los métodos de orden inferior implementan algo llamado FSAL (primero igual que el último). Esta propiedad significa que los métodos de orden inferior reutilizan una evaluación de función del paso anterior en el siguiente paso y, por lo tanto, tienen efectivamente una evaluación de función menos. Si esto se usa correctamente, entonces algo como un método de quinto orden (Tsitorous o Dormand-Prince) en realidad está tomando 5 evaluaciones de funciones en lugar de las 6 que sugieren los cuadros. Esto también es cierto para el método Verner 6.
La otra razón se debe a las interpolaciones. Una razón para usar un método de orden muy alto es tomar menos pasos y simplemente interpolar valores intermedios. Sin embargo, para obtener los valores intermedios, la función de interpolación puede necesitar más evaluaciones de funciones de las que se usaron para dar el paso.Si nos fijamos en los métodos de Verner, se necesitan 8 evaluaciones de funciones adicionales para el método de Orden 8 para obtener un interpolante de Orden 8. Muchas veces, los métodos de bajo orden proporcionan un interpolante "libre", por ejemplo, la mayoría de los métodos de quinto orden tienen una interpolación libre de cuarto orden (sin evaluaciones de funciones adicionales). Esto significa que si necesita valores intermedios (que necesitará para una buena gráfica si está utilizando un método de orden superior), hay algunos costos adicionales ocultos. Tenga en cuenta el hecho de que estos valores interpolados son realmente importantes para el manejo de eventos y la resolución de ecuaciones diferenciales de retardo y verá por qué el costo adicional de interpolación tiene en cuenta.
Entonces, ¿qué pasa con los métodos de Feagin?
Entonces verá que los métodos Feagin faltan sospechosamente en los puntos de referencia. Están bien, las pruebas de convergencia funcionan con números de precisión arbitrarios, etc., pero para que realmente funcionen bien, debes pedir algunas tolerancias bastante absurdamente bajas. Por ejemplo, encontré en puntos de referencia inéditos que el Feagin14
rendimiento superior Vern9
(el método eficiente Verner de noveno orden) en tolerancias como 1e-30
. Para aplicaciones con dinámica caótica (como en los problemas de Astrofísica de 3 cuerpos o Pleides), es posible que desee esta cantidad de precisión debido a la dependencia sensible (los errores en los sistemas caóticos se componen rápidamente). Sin embargo, la mayoría de las personas probablemente están calculando con números de coma flotante de doble precisión, y no he encontrado un punto de referencia donde superen en este dominio de tolerancia.
Además, no hay interpolante para acompañar los métodos de Feagin. Entonces, lo que hago es simplemente ponerles una interpolación de Hermite de tercer orden para que exista uno (y funciona sorprendentemente bien). Sin embargo, si no hay una función de interpolación estándar, puede hacer el método recursivo de Hermite (use esta interpolación para obtener el punto medio, luego haga una interpolación de quinto orden, etc.) para obtener una interpolación de alto orden, pero esto es muy costoso y el resultado es la interpolación no necesariamente tiene un término de error de truncamiento de principio bajo (por lo que solo es bueno cuando dt
es realmente pequeño, ¡exactamente lo opuesto al caso que queremos!). Entonces, si alguna vez necesita una interpolación realmente buena para que coincida con su precisión, necesita al menos volver a algo así Vern9
.
Nota sobre extrapolación
Tenga en cuenta que los métodos de extrapolación son simplemente algoritmos para generar métodos arbitrarios de Runge-Kutta. Sin embargo, para su orden toman más pasos de los necesarios y tienen altos coeficientes de error de truncamiento de principio, por lo que no son tan eficientes como un método RK bien optimizado en un orden dado. Pero dado el análisis anterior, esto significa que existe un dominio de tolerancia extremadamente baja en el que estos métodos funcionarán mejor que los métodos RK "conocidos". Pero en cada punto de referencia que he ejecutado, parece que no he llegado tan bajo.
Nota sobre estabilidad
La elección realmente no tiene nada que ver con problemas de estabilidad. De hecho, si pasa por los cuadros DifferentialEquations.jl (puede hacerlo solo plot(tab)
para las regiones de estabilidad) verá que la mayoría de los métodos tienen regiones de estabilidad sospechosamente similares. Esto es realmente una elección. Por lo general, al derivar los métodos, el autor generalmente hace lo siguiente:
- Encuentre los coeficientes de error de truncamiento del principio más bajo (es decir, los coeficientes para los siguientes términos de orden)
- Sujeto a las restricciones de orden
- Y acerque la región de estabilidad a la del método Dormand-Prince Order 5.
¿Por qué la última condición? Bueno, debido a que ese método tiende a ser siempre estable con la forma en que se realizan las elecciones de tamaño de paso adaptativo controlado por PI, por lo que es una buena barra para regiones de estabilidad "suficientemente buenas". Por lo tanto, no es casualidad que todas las regiones de estabilidad sean similares.
Conclusión
Hay compensaciones en cada elección de método. Los métodos de RK de orden superior simplemente no son tan eficientes con tolerancias más bajas, ya que es más difícil optimizar la elección de los coeficientes y porque el número de compuestos de evaluación de funciones (y crece aún más rápido cuando intervienen las interpolaciones). Sin embargo, si la tolerancia es lo suficientemente baja, ganan, pero las tolerancias que se requieren pueden estar muy por debajo de las aplicaciones "estándar" (es decir, solo se aplican a sistemas caóticos).