BDF vs temps implicite Runge Kutta

16

Y a-t-il des raisons pour lesquelles on devrait choisir Runge Kutta implicite d'ordre élevé (IMRK) plutôt que le pas de temps BDF? BDF me semble beaucoup plus facile car étape IMRK a besoin de q résolutions linéaires par pas de temps. La stabilité pour BDF et IMRK semble être un point discutable. Je ne trouve aucune ressource comparant / contrastant les pas de temps implicites.qq

Si cela peut aider, l'objectif final est pour moi de sélectionner un stepper temporel implicite d'ordre élevé pour l'EDP d'advection-diffusion.

user107904
la source

Réponses:

34

Oui, il n'y a pas trop de ressources à ce sujet pour une raison quelconque. Pendant très longtemps, le goto standard était "il suffit d'utiliser les méthodes BDF". Ce mantra a été gravé dans le marbre pour quelques raisons historiques: pour un code de Gear était le premier solveur rigide largement disponible, et pour un autre la suite MATLAB n'a pas / n'inclut pas une méthode RK implicite. Cependant, cette heuristique n'est pas toujours correcte, et je dirais qu'en testant, c'est généralement faux. Permettez-moi de vous expliquer en détail.

Les méthodes BDF ont un coût fixe élevé

L'horodatage adaptatif et l'ordre adaptatif dans les méthodes BDF ont un coût très élevé. Les coefficients doivent être recalculés ou les valeurs doivent être interpolées à différents moments. Il y a eu beaucoup de travail pour améliorer les codes BDF actuels (il existe deux «formulaires» bien connus pour la mise en œuvre qui essaient de gérer ce problème différemment), mais ce n'est en fait qu'un problème d'ingénierie logicielle très difficile. Pour cette raison, la plupart des codes BDF sont tous des descendants du code original de Gear: Gear's, vode, lsoda, Sundial's CVODE, même les solveurs DAE DASKR et DASSL sont des descendants du même code.

Cela signifie que si votre problème est "trop ​​petit", le coût fixe élevé est vraiment important et les méthodes implicites de RK feront mieux.

Les méthodes BDF d'ordre élevé sont très instables pour les valeurs propres complexes

Les méthodes BDF vous permettent de contrôler l'ordre maximal et de le rendre plus conservateur pour une raison: les méthodes BDF d'ordre supérieur ne peuvent pas très bien gérer les valeurs propres complexes "de taille moyenne". Donc, dans ces cas, pour être stables, ils doivent abandonner leur commande. C'est la raison pour laquelle la méthode BDF du 6e ordre, bien que techniquement stable, est souvent ignorée car même le 5e ordre a déjà des problèmes ici (et le 6e ordre est encore moins stable). Seul le 2e ordre est stable en A, il peut donc toujours y revenir, mais le pas est alors dominé par les erreurs.

Ainsi, lorsque vous utilisez des codes BDF sur des problèmes non triviaux, vous n'obtenez pas tout le temps le 5ème ordre. Les oscillations font chuter son ordre.

Les méthodes BDF ont un coût de démarrage élevé

Les méthodes BDF qui démarrent automatiquement ont un coût de démarrage élevé. Ils commencent par un petit pas d'Euler, puis un petit pas BDF-2, etc. Pour des intégrations plus courtes, cela a un effet très non négligeable. Si vous vous arrêtez souvent, par exemple pour la gestion d'événements, cela nuira fortement à l'efficacité des codes. C'est une des raisons pour lesquelles vous voyez rarement, voire jamais, des méthodes à plusieurs étapes utilisées dans la gestion d'événements lourds ou des situations d'équation de retard (les équations de retard redémarrent à chaque discontinuité d'ordre suffisamment élevé, qui se propage à chaque pour chaque temps de retard τ )jeττ

Les méthodes BDF, étant des méthodes à plusieurs étapes, ont la meilleure mise à l'échelle

Fradau

Quels repères sont disponibles?

Le livre de Hairer et DiffEqBenchmarks (expliqués ci-dessous) sont probablement les meilleurs en termes de diagrammes de précision de travail facilement disponibles. La résolution des équations différentielles ordinaires de Hairer II contient un tas de diagrammes de précision de travail aux pages 154 et 155. Les résultats sur les problèmes qu'il a choisis correspondent à ce que j'ai dit ci-dessus pour les raisons que j'ai mentionnées ci-dessus: RK implicite sera plus efficace si le problème n'est pas "suffisamment grand". Une autre chose intéressante à noter est que les méthodes de Rosenbrock d'ordre élevé apparaissent comme les plus efficaces dans beaucoup de ses tests (comme Rodas) dans le régime où l'erreur est plus élevée, et le RK implicite radau5est le plus efficace à des erreurs plus faibles. Mais ses problèmes de tests ne sont généralement pas des discrétisations de grands PDE, alors tenez compte des points ci-dessus.

Comment testez-vous / comparez-vous?

J'aime tester cela avec DifferentialEquations.jl dans Julia (avertissement: je suis l'un des développeurs). C'est en Julia. Le langage de programmation devrait vraiment recevoir une note ici. N'oubliez pas qu'à mesure que le coût de l'appel de fonction augmente, les méthodes BDF sont de mieux en mieux. Dans R / MATLAB / Python, la fonction de l'utilisateur est le seul code R / MATLAB / Python que les solveurs optimisés doivent réellement utiliser: si vous utilisez des wrappers SciPy ou Sundials, c'est tout le code C / Fortran à l'exception de la fonction que vous passez . Cela signifie que, dans les langages dynamiques (qui ne sont pas Julia), les méthodes BDF font mieux qu'elles ne le feraient normalement car les appels de fonction sont très peu optimisés (c'est probablement la raison pour laquelle Shampine a été inclus ode15sdans la suite MATLAB, mais pas de méthode RK implicite) .

FODEProblem

@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())

où le premier utilise des cadrans solaires CVODE(méthode BDF), et le second utilise Hairer's radau(RK implicite).

Pour tous ODEProblem, vous pouvez utiliser les outils d'analyse comparative pour voir comment les différents algorithmes évoluent pour différentes tolérances adaptatives. Certains résultats sont publiés sur DiffEqBenchmarks.jl . Par exemple, sur le problème ROBER (système de 3 ODE rigides), vous pouvez voir que les cadrans solaires sont en fait instables et divergent avec une tolérance suffisamment élevée (alors que les autres méthodes convergent très bien), montrant la note ci-dessus sur les problèmes de stabilité. Sur le problème de Van Der Pol , vous pouvez voir que c'est plus un lavage. J'ai beaucoup plus que je n'ai pas posté, mais je n'y arriverai probablement pas avant d'avoir terminé certaines méthodes Rosenbrock d'ordre supérieur (Rodas est la version Fortran de celles-ci).

(Remarque: ces repères rigides doivent être mis à jour. D'une part, le texte doit être mis à jour car pour une raison quelconque, les méthodes d'ODE.jl divergent ...)

Méthodes d'extrpolation et RKC

Il existe également des méthodes d'extrapolation comme celles seulexqui sont conçues pour les problèmes raides. Ce sont des "ordres adaptatifs infinis", mais cela signifie seulement qu'ils sont asymétriquement bons lorsque vous recherchez une erreur très faible (c.-à-d. Que vous cherchez à résoudre des problèmes rigides à une valeur inférieure à 1e-10environ, auquel cas vous pouvez probablement utiliser une méthode explicite cependant) . Cependant, dans la plupart des cas, ils ne sont pas aussi efficaces et doivent être évités.

Runge-Kutta Chebyschev est une méthode explicite qui fonctionne également sur des problèmes complexes que vous devriez considérer. Je ne l'ai pas encore emballé dans DifferentialEquations.jl, donc je n'ai aucune preuve tangible de la façon dont cela va.

Autres méthodes à considérer: méthodes spécialisées pour les PDE rigides

Je devrais probablement noter que les méthodes de Rosenbrock d'ordre élevé fonctionnent très bien, plusieurs fois encore mieux, pour les problèmes de raideur de petite à moyenne taille lorsque vous pouvez facilement calculer le jacobien. Cependant, pour certains PDE, je crois que les problèmes d'advection-diffusion entrent dans cette catégorie, Rosenbrock peut perdre quelques ordres de précision. De plus, ils ont besoin de Jacobiens très précis afin de conserver leur exactitude. Dans Julia, c'est facile car les solveurs sont livrés avec une différenciation symbolique et automatique qui peut être correcte pour usiner epsilon. Cependant, des choses comme MATLABode23speut avoir des problèmes car ces implémentations utilisent une différenciation finie. Pour les méthodes BDF et RK implicites, les erreurs dans le jacobien conduisent à une convergence plus lente, tandis que pour Rosenbrock, puisque ce ne sont pas des équations implicites et sont plutôt des méthodes RK avec des inversions jacobiennes, celles-ci perdent juste l'ordre de précision.

Les autres méthodes à examiner sont les méthodes RK exponentielles, la différenciation temporelle exponentielle (ETD), le facteur d'intégration implicite (IIF) et les méthodes exponentielles de Rosenbrock. Les trois premiers utilisent le fait que, dans de nombreuses discrétisations PDE,

ut=UNEu+F(u)

UNEUNEueUNEUNE

UNEJu+g(u)JF=Ju+g

Encore d'autres méthodes: les dernières créations

Les méthodes qui sont entièrement implicites conviennent bien évidemment aux équations rigides. Si le PDE n'est pas suffisamment grand, vous ne pouvez pas suffisamment "paralléliser dans l'espace" pour utiliser les HPC. Au lieu de cela, vous pouvez créer des discrétisations parallèles dans le temps qui sont entièrement implicites et donc bonnes pour les équations rigides, mais parallèles pour utiliser pleinement le matériel. XBraid est un solveur qui utilise une technique comme celle-ci, et les principales méthodes sont PFFAST et les méthodes pararéales. DifferentialEquations.jl développe une méthode de réseau neuronal qui fonctionne de manière similaire.

Encore une fois, cela est optimal lorsque vous n'avez pas une discrétisation spatiale suffisamment grande pour paralléliser efficacement, mais que vous disposez des ressources pour le calcul parallèle.

Conclusion: prenez des considérations asymptotiques avec un grain de sel

Δt

Les méthodes BDF sont asymptotiquement les meilleures, mais dans la plupart des cas, vous ne travaillez probablement pas dans ce régime. Mais si la discrétisation spatiale a suffisamment de points, les méthodes BDF peuvent paralléliser efficacement dans l'espace (en parallélisant la résolution linéaire) et auront le moins d'appels de fonction, et feront donc le mieux. Mais si votre discrétisation PDE n'est pas assez importante, jetez un œil aux méthodes RK implicites, Rosenbrock, RK exponentielles, etc. L'utilisation d'une suite logicielle comme DifferentialEquations.jl qui facilite l'échange entre les différentes méthodes peut être très utile pour vous de comprendre quelle méthode convient le mieux à votre domaine problématique, car dans de nombreux cas, elle ne peut pas être connue à l'avance.

[Si vous avez des exemples de problèmes que vous souhaitez ajouter à la suite de tests, n'hésitez pas à aider quelque chose. Je veux garder une ressource très complète à ce sujet. J'espère avoir bientôt toutes les références de Hairer sous forme de cahier exécutable, et je souhaiterais d'autres problèmes représentatifs des domaines scientifiques. Toute aide est appréciée!]

Chris Rackauckas
la source
3
Ceci est une réponse très détaillée, j'ai de nouvelles directions à explorer! J'apprécie beaucoup votre temps.
user107904
3
La meilleure réponse à toute question dans ce forum dans un bon moment!
Wolfgang Bangerth