@ La réponse de DavidKetcheson frappe les gros points: vous pouvez toujours construire des méthodes d'un ordre suffisamment élevé en utilisant l'extrapolation, c'est une limite très pessimiste et vous pouvez toujours faire beaucoup mieux, toutes les bonnes sont dérivées à la main (à l'aide d'un ordinateur) outils d'algèbre), aucune limite inférieure n'est connue, et les méthodes d'ordre le plus élevé sont dues à Feagin. Compte tenu de certains commentaires, je voulais compléter la réponse par une discussion sur les tableaux de l'état actuel de la technique dans le domaine.
Si vous voulez un recueil de tableaux RK, vous pouvez en trouver un dans ce code Julia . Les citations pour le papier dont ils sont issus sont dans les docstrings pour les constructeurs de tableaux. La documentation du développeur pour DifferentialEquations.jl répertorie tous ces tableaux comme disponibles pour utilisation , et vous pouvez voir ici qu'ils sont tous testés à l'aide des suites d'intégration continue Travis et AppVeyor pour vous assurer que non seulement les conditions de commande sont remplies, mais elles atteindre la convergence demandée (test de vérification). De ceux-ci, vous pouvez voir qu'il y a:
- 5 méthodes de commande 9
- 6 méthodes de commande 10
- 2 méthodes de commande 12
- 1 méthode d'ordre 14
(que j'ai pu trouver qui ont été publiés). Encore une fois, tous dérivés à la main.
Les tests de convergence montrent que certaines des dérivations n'ont pas été effectuées avec une précision suffisamment élevée pour fonctionner avec des nombres supérieurs à 64 bits (elles sont commentées comme ceci ). C'est donc une bizarrerie intéressante à prendre en compte: à ces ordres élevés, vous n'obtenez généralement que des coefficients qui "à une erreur x
" remplissent les conditions de l'ordre, mais lorsque vous utilisez l'arithmétique de précision arbitraire, vous pouvez réellement détecter ces limites. La précision avec laquelle vous effectuez les coefficients importe donc, et vous devez la choisir pour couvrir la précision que vous souhaitez tester (/ utiliser, bien sûr).
Si vous voulez un tas de graphiques de stabilité, vous pouvez simplement plot(tableau)
utiliser la recette Plots.jl. Un bon ensemble de notes qui contient une grande partie de cela peut être trouvé sur le site Web de Peter Stone (allez ci-dessous et cliquez sur dire les 10 ordres de commande et vous obtiendrez un tas de PDF). Lors du développement de DifferentialEquations.jl, j'ai créé cet ensemble de tableaux pour les passer systématiquement en revue les problèmes de test / regarder les indicateurs analytiques pour voir ceux qui devraient être inclus dans la bibliothèque principale. J'ai pris quelques notes rapides ici . Comme vous pouvez le voir sur les algorithmes inclus dans la bibliothèque principale, celles que j'ai trouvées intéressantes étaient les méthodes Verner et Feagin. La méthode Verner du 9ème ordre est la méthode d'ordre le plus élevé avec un interpolant correspondant également à l'ordre. C'est quelque chose à reconnaître: les méthodes Feagin n'ont pas d'interpolant correspondant (bien que vous puissiez amorcer Hermite, mais c'est vraiment inefficace).
Puisqu'ils sont tous implémentés avec des implémentations très efficaces, vous pouvez jouer avec eux-mêmes et voir à quel point les différentes fonctionnalités comptent réellement. Voici un cahier Jupyter qui montre les méthodes Feagin utilisées . Notez que le tracé de convergence va vraiment être une 1e-48
erreur. Les méthodes d'ordre élevé ne sont plus efficaces que les méthodes d'ordre inférieur lorsque vous avez vraiment besoin d'une tolérance très très faible. Vous pouvez trouver des benchmarks qui en utilisent certains sur DiffEqBenchmarks.jl , bien que lorsqu'ils sont utilisés, il s'agit généralement de la méthode Verner du 9ème ordre, et montrant généralement que le benchmark n'est pas dans le régime où ce haut niveau d'ordre est efficace.
Donc, si vous voulez jouer et travailler avec des méthodes de haut niveau, RK-Opt est ce que j'ai trouvé est un bon outil pour en dériver certaines (comme @DavidKetcheson l'a mentionné), et DifferentialEquations.jl a toutes les méthodes publiées (je pense? ) mis en œuvre afin que vous puissiez facilement les tester / les comparer. Cependant, à moins que vous ne trouviez une hypothèse qui puisse être abandonnée, à partir de mes tests, je n'ai pas pu trouver quelque chose qui bat les méthodes Verner (commandes 6-9) et Feagin (commandes 10+). YMMV cependant, et j'aimerais voir plus de recherche à ce sujet.