Construcción de métodos explícitos de Runge Kutta de orden 9 y superior

9

Algunos libros antiguos que he visto dicen que el número mínimo de etapas de un método Runge-Kutta explícito de un orden específico es desconocido para los pedidos . ¿Sigue siendo cierto?9 9

¿Qué bibliotecas hay para trabajar automáticamente con métodos Runge-Kutta de alto orden?

Kirill
fuente
¿Qué quieres decir con "trabajar automáticamente con"?
David Ketcheson
@DavidKetcheson Generando los coeficientes y examinando sus propiedades. No puedo imaginar que alguien obtenga un método de alto orden simplemente a mano, dada la cantidad de condiciones y variables que existen.
Kirill
No conozco ningún software para generar tales coeficientes. He visto métodos RK de alto orden en línea, como los desarrollados por Terry Feagin. El documento que describe el proceso de obtención de los coeficientes para el orden 10 está aquí . No parece que el método automatizado se implemente fácilmente, y dudo que existan. (Como nota al margen, nunca he visto un RK de orden 9, siempre (7) 8 u (8) 10. ¡Tampoco estoy seguro de que RK9 exista!)
Etienne Pellegrini
(7) 8, (8) 9, (8) 10, (10) 12 y (12) 14 tienen implementaciones en DifferrntialEquations.jl . Entonces puedes probar un montón de problemas. Daré una evaluación detallada en un momento.
Chris Rackauckas
Tenga en cuenta que el octavo orden anterior generalmente no es útil dentro de la precisión de coma flotante. Los métodos de Verner son realmente buenos, pero solo hasta 6 es fácil de FSAL. Feagin no tiene interpolaciones.
Chris Rackauckas

Respuestas:

14

Límites

Eso sigue siendo cierto. En el libro de Butcher , página 196, dice lo siguiente: en un artículo de 1985, Butcher demostró que necesita 11 etapas para obtener el pedido 8 , y esto es nítido. Para el pedido 10, Hairer obtuvo una familia de métodos de 17 etapas , pero no se sabe si uno puede hacerlo mejor. La misma información se proporciona en la Sección II.5 de Hairer, Norsett y Wanner vol. I . La última referencia también pasa por algunas de las técnicas para desarrollar pares de alto orden (hasta el orden 8).

Hay un límite superior en el número mínimo de etapas requeridas para cualquier orden, ya que puede construirlas por extrapolación. Esto se conoce desde hace mucho tiempo; vea este reciente artículo mío para una explicación. Sin embargo, este límite es cuadrático en el orden y ciertamente es bastante pesimista. El software de nodo que se describe a continuación puede generar coeficientes exactos para estos métodos, y también para los métodos de corrección diferida (que son métodos Runge-Kutta) de cualquier orden.

Creo que @Etienne tiene razón al decir que los métodos de mayor orden que se han construido a mano se deben a Terry Feagin. Con respecto a su otro comentario, este documento contiene unos 9 (8) pares:

JH Verner, pares de Runge-Kutta explícitos de orden superior con orden de etapas bajas, Matemática numérica aplicada, Volumen 22, Problemas 1–3, noviembre de 1996, páginas 345-357

Aquí hay una tabla del número (acumulativo) de condiciones de pedido requeridas para cada pedido ; esta tabla va más allá de las proporcionadas en la literatura y se produjo utilizando nodepy:nortepags

p | N
-----
1 | 1
2 | 2
3 | 4
4 | 8
5 | 17
6 | 37
7 | 85
8 | 200
9 | 486
10| 1205
11| 3047
12| 7813
13| 20300
14| 53264

Software

Para métodos de orden muy alto, el número y la complejidad de las condiciones de la orden se vuelven imposibles de manejar a mano. Algunos paquetes simbólicos (Mathematica, al menos) tienen capacidades para generar condiciones de orden Runge-Kutta. Probablemente hay algunos otros paquetes por ahí, pero soy consciente de lo siguiente (que escribí):

  • nodepy : un paquete de Python que puede generar expresiones simbólicas y código para las condiciones de orden en orden arbitrario. También incluye código Python para verificar esas condiciones, calcular coeficientes de error, etc.
  • RK-Opt : un paquete de MATLAB que, entre muchas otras cosas, puede encontrar métodos Runge-Kutta de alto orden con coeficientes optimizados para diferentes propósitos. Actualmente no puede manejar el RK explícito de noveno orden (sube al octavo orden para los métodos de orden de etapa uno, décimo orden para los métodos con orden de etapa más alto). Si eso es algo que le interesa, podría agregar las condiciones de noveno orden (y superiores) con bastante facilidad.

Otra nota interesante sobre las condiciones del pedido, que se vuelve significativa en pedidos tan altos, es que hay dos formas de derivarlas, y le dan condiciones diferentes (pero colectivamente equivalentes): una se debe a Butcher, la otra a Albrecht .

David Ketcheson
fuente
5

La respuesta de @DavidKetcheson llega a los puntos importantes: siempre se pueden construir métodos de orden suficientemente alto mediante extrapolación, es un límite muy pesimista y siempre se puede hacer mucho mejor, todos los buenos se obtienen a mano (con la ayuda de alguna computadora herramientas de álgebra), no se conoce un límite inferior, y los métodos de mayor orden se deben a Feagin. Teniendo en cuenta algunos de los comentarios, quise completar la respuesta con una discusión de los cuadros actuales en el campo.

Si desea un compendio de cuadros RK, puede encontrar uno en este código de Julia . Las citas del papel del que provienen se encuentran en las cadenas de documentos para los constructores de cuadros. La documentación del desarrollador para DifferentialEquations.jl enumera todos estos cuadros como disponibles para su uso , y puede ver aquí que todos estos se prueban usando Travis y AppVeyor suites de integración continua para asegurarse de que no solo se cumplan las condiciones del pedido, sino que realmente lograr la convergencia solicitada (prueba de verificación). De estos, puede ver que hay:

  • 5 orden 9 métodos
  • 6 orden 10 métodos
  • 2 orden 12 métodos
  • 1 orden 14 método

(que pude encontrar que fueron publicados). De nuevo, todo derivado a mano.

Las pruebas de convergencia muestran que algunas de las derivaciones no se llevaron a cabo con la precisión suficiente para trabajar con números de más de 64 bits (se comentan así ). Entonces, es una peculiaridad interesante a tener en cuenta: en estos pedidos altos, generalmente solo se obtienen coeficientes que "ante un error x" satisfacen las condiciones del pedido, pero cuando se usa la aritmética de precisión arbitraria, en realidad se pueden detectar estos límites. Por lo tanto, la precisión con la que lleva a cabo los coeficientes es importante, y debe elegirla para cubrir la precisión que desea probar (/ usar, por supuesto).

Si quieres un montón de gráficos de estabilidad, puedes plot(tableau)usar la receta Plots.jl. Un conjunto bien de notas que tiene una gran cantidad de este escrito se puede encontrar en la página web de Peter Stone (ir a continuación y haga clic en especificar el orden de 10 esquemas y obtendrá un montón de archivos PDF). Al desarrollar DifferentialEquations.jl, creé ese conjunto de cuadros para analizarlos sistemáticamente en los problemas de prueba / mirar los indicadores analíticos para ver cuáles deberían incluirse en la biblioteca principal. Tomé algunas notas rápidas aquí . Como puede ver en los algoritmos incluidos en la biblioteca principal, los que encontré valiosos fueron los métodos de Verner y Feagin. El método de noveno orden de Verner es el método de orden más alto con un interpolante que también coincide con el orden. Eso es algo que hay que reconocer: los métodos Feagin no tienen un interpolante a juego (aunque puedes arrancar Hermite, pero eso es realmente ineficiente).

Dado que todos se implementan con implementaciones muy eficientes, puede jugar con ellos usted mismo y ver cuánto importan realmente las diferentes características. Aquí hay un cuaderno Jupyter que muestra los métodos Feagin en uso . Tenga en cuenta que la trama de convergencia realmente va a 1e-48error. Los métodos de orden superior son solo más eficientes que los de orden inferior cuando realmente se necesita una tolerancia muy muy baja. Puede encontrar algunos puntos de referencia que usan algunos de ellos en DiffEqBenchmarks.jl , aunque cuando se usan generalmente es el método Verner de noveno orden, y generalmente muestra que el punto de referencia no está en el régimen donde este alto orden es eficiente.

Entonces, si desea jugar y trabajar con algunos métodos de alto orden, RK-Opt es lo que encontré es una buena herramienta para obtener algunos (como mencionó @DavidKetcheson), y DifferentialEquations.jl tiene todos los métodos publicados (¿creo? ) implementado para que pueda probar / comparar fácilmente con ellos. Sin embargo, a menos que encuentre una suposición que pueda descartarse, de mis pruebas no he podido encontrar algo que supere los métodos de Verner (órdenes 6-9) y Feagin (órdenes 10+). Sin embargo, YMMV, y me encantaría ver más investigaciones sobre esto.

Chris Rackauckas
fuente