Construindo métodos explícitos do Runge Kutta da ordem 9 e superior

9

Alguns livros antigos que eu vi dizem que o número mínimo de estágios de um método Runge-Kutta explícito de uma ordem especificada é desconhecido para ordens . Isso ainda é verdade?9

Quais bibliotecas existem para trabalhar automaticamente com os métodos Runge-Kutta de alta ordem?

Kirill
fonte
O que você quer dizer com "trabalhar automaticamente"?
David Ketcheson
@DavidKetcheson Gerando os coeficientes e examinando suas propriedades. Não consigo imaginar que alguém derivaria um método de alta ordem exclusivamente à mão, considerando quantas condições e variáveis ​​existem.
Kirill
Não conheço nenhum software para gerar tais coeficientes. Eu já vi métodos RK de alta ordem online, como os desenvolvidos por Terry Feagin. O artigo que descreve o processo de obtenção dos coeficientes para a ordem 10 está aqui . Não parece que o método automatizado seria facilmente implementado, e duvido que eles existam. (Como uma nota lateral, eu nunca vi uma RK de ordem 9, sempre (7) 8 ou (8) 10 Não tenho certeza RK9 existe também.!)
Etienne Pellegrini
(7) 8, (8) 9, (8) 10, (10) 12 e (12) 14 têm implementações em DifferrntialEquations.jl . Você pode tentar vários problemas. Vou dar uma avaliação detalhada daqui a pouco.
Chris Rackauckas
Observe que acima da 8ª ordem geralmente não é útil dentro da precisão do ponto flutuante. Os métodos Verner são realmente bons, mas apenas até 6 é fácil para o FSAL. Feagin não tem interpolações.
Chris Rackauckas

Respostas:

14

Limites

Isso ainda é verdade. No livro de Butcher , página 196, diz o seguinte: Em um artigo de 1985, Butcher mostrou que você precisa de 11 estágios para obter o pedido 8 , e isso é nítido. Para a ordem 10, Hairer derivou uma família de métodos de 17 estágios , mas não se sabe se alguém pode fazer melhor. A mesma informação é dada na Seção II.5 de Hairer, Norsett, & Wanner vol. I . A última referência também passa por algumas das técnicas para o desenvolvimento de pares de alta ordem (até a ordem 8).

Há um limite superior no número mínimo de estágios necessários para qualquer ordem, pois você pode construí-los por extrapolação. Isso é conhecido há muito tempo; veja este artigo recente para uma explicação. No entanto, esse limite é quadrático na ordem e certamente é bastante pessimista. O software nodepy discutido abaixo pode gerar coeficientes exatos para esses métodos e também para métodos de correção adiada (que são métodos de Runge-Kutta) de qualquer ordem.

Acredito que @ Etienne está correto ao dizer que os métodos de ordem mais alta construídos à mão são devidos a Terry Feagin. Em relação ao seu outro comentário, este artigo contém cerca de 9 (8) pares:

JH Verner, Pares explícitos de alta ordem Runge-Kutta com ordem de baixo estágio, Matemática Numérica Aplicada, Volume 22, Edições 1–3, novembro de 1996, páginas 345-357

Np

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

Programas

Para métodos de pedidos muito altos, é impossível lidar com o número e a complexidade das condições do pedido manualmente. Alguns pacotes simbólicos (Mathematica, pelo menos) possuem recursos para gerar condições de pedidos Runge-Kutta. Provavelmente existem outros pacotes por aí, mas estou ciente do seguinte (ambos os quais escrevi):

  • nodepy : um pacote Python que pode gerar expressões e códigos simbólicos para as condições da ordem em ordem arbitrária. Também inclui código Python para verificar essas condições, coeficientes de erro de computação etc.
  • RK-Opt : um pacote MATLAB que, entre muitas outras coisas, pode encontrar métodos Runge-Kutta de alta ordem com coeficientes otimizados para alguns propósitos diferentes. No momento, ele não podia lidar com a RK explícita de 9ª ordem (sobe para a 8ª ordem para métodos de ordem de estágio um, décima ordem para métodos com ordem de estágio mais alta). Se você está interessado, é possível adicionar as condições de 9ª ordem (e superiores) com bastante facilidade.

Outra observação interessante sobre as condições de pedidos, que se torna significativa em pedidos tão altos, é que existem duas maneiras de derivá-las e elas oferecem condições diferentes (mas coletivamente equivalentes): uma é devida a Butcher e a outra à Albrecht .

David Ketcheson
fonte
5

@ A resposta de DavidKetcheson atinge os grandes pontos: você sempre pode construir métodos de ordem suficientemente alta usando extrapolação, isso é um limite muito pessimista e você sempre pode fazer muito melhor, todos os bons são derivados à mão (com a ajuda de algum computador ferramentas de álgebra), nenhum limite inferior é conhecido e os métodos de ordem mais alta são devidos ao Feagin. Dados alguns comentários, eu queria concluir a resposta com uma discussão dos atuais quadros de ponta no campo.

Se você deseja um compêndio de tablados RK, pode encontrar um neste código Julia . As citações para o artigo de onde vieram estão nas docstrings para os construtores de quadro. A documentação do desenvolvedor para DifferentialEquations.jl lista todos esses quadros como disponíveis para uso , e você pode ver aqui que todos foram testados usando os conjuntos de integração contínua Travis e AppVeyor para garantir que não apenas as condições do pedido sejam atendidas, mas eles realmente alcançar a convergência solicitada (teste de verificação). A partir destes, você pode ver que existem:

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

(que eu pude achar que foram publicadas). Mais uma vez, todos derivados à mão.

Os testes de convergência mostram que algumas das derivações não foram executadas com precisão suficientemente alta para trabalhar com números superiores a 64 bits (eles são comentados assim ). Portanto, é uma peculiaridade interessante a ser observada: nessas ordens altas, você normalmente obtém apenas coeficientes que "com erro x" satisfazem as condições da ordem, mas, ao usar aritmética de precisão arbitrária, é possível detectar esses limites. Portanto, a precisão com que você executa os coeficientes é importante, e você deve escolhê-la para cobrir a precisão que deseja testar (/ use, é claro).

Se você quiser um monte de gráficos de estabilidade, basta plot(tableau)usar a receita Plots.jl. Um bom conjunto de notas que contém grande parte disso pode ser encontrado no site de Peter Stone (vá abaixo e clique em digamos os esquemas de ordem 10 e você obterá um monte de PDFs). Ao desenvolver o DifferentialEquations.jl, criei esse conjunto de tabelas para analisá-las sistematicamente em problemas de teste / observe os indicadores analíticos para ver quais devem ser incluídos na biblioteca principal. Fiz algumas anotações rápidas aqui . Como você pode ver nos algoritmos incluídos na biblioteca principal, os que achei valiosos foram os métodos Verner e Feagin. O método de ordem 9 da Verner é o método de ordem mais alta, com um interpolante correspondente à ordem também. É algo a reconhecer: os métodos Feagin não têm um interpolante correspondente (embora você possa inicializar Hermite, mas isso é realmente ineficiente).

Como todos eles são implementados com implementações muito eficientes, você pode brincar com eles e ver o quanto os diferentes recursos realmente importam. Aqui está um caderno Jupyter que mostra os métodos Feagin em uso . Observe que o gráfico de convergência realmente está 1e-48errado. Os métodos de ordem alta são apenas mais eficientes do que os métodos de ordem inferior quando você realmente precisa de uma tolerância muito baixa. Você pode encontrar alguns benchmarks que usam alguns deles em DiffEqBenchmarks.jl , embora, quando usados, geralmente sejam o método Verner de 9ª ordem e geralmente mostrem que o benchmark não está no regime em que essa alta ordem é eficiente.

Portanto, se você quiser brincar e trabalhar com alguns métodos de alta ordem, o RK-Opt é o que eu achei ser uma boa ferramenta para derivar alguns (como o @DavidKetcheson mencionou) e o DifferentialEquations.jl tem todos os métodos publicados (eu acho? ) implementado para que você possa facilmente testar / comparar com eles. No entanto, a menos que você encontre uma suposição que possa ser descartada, nos meus testes não consegui encontrar algo que superasse os métodos Verner (pedidos de 6 a 9) e Feagin (pedidos de 10 ou mais). YMMV, porém, e eu adoraria ver mais pesquisas sobre isso.

Chris Rackauckas
fonte