Puis-je utiliser un schéma de pas de temps explicite pour déterminer numériquement si un ODE est rigide?

10

J'ai une ODE:

u ( 0 ) = - 1u=1000u+sin(t)
u(0)=11000001

Je sais que cette ODE particulière est rigide, analytiquement. Je sais également que si nous utilisons une méthode de pas de temps explicite (vers l'avant) (Euler, Runge-Kutta, Adams, etc.), la méthode devrait renvoyer de très grandes erreurs si le pas de temps est trop grand. J'ai donc deux questions:

  1. Est-ce ainsi que les ODE rigides sont déterminés, en général, lorsqu'une expression analytique pour le terme d'erreur n'est pas disponible ou dérivable?

  2. En général, lorsque l'ODE est rigide, comment puis-je déterminer un pas de temps "suffisamment petit"?

Paul
la source
Il existe des méthodes standard pour détecter la rigidité à l'aide de méthodes explicites. Je place ce commentaire ici car il peut être difficile de trouver ma réponse plus détaillée ci-dessous.
David Ketcheson

Réponses:

6

Pour répondre à tes questions:

  1. Pour autant que je sache, dans la pratique, si les méthodes explicites nécessitent des pas de temps extraordinairement petits par rapport à votre échelle de temps d'intérêt (voir les réponses à cette question sur ce que signifie pour un ODE d'être rigide ) afin de produire des résultats précis, alors pour à toutes fins utiles, votre problème est rigide. Pour déterminer les exigences relatives à la taille des pas, comptez sur l'une des nombreuses bibliothèques écrites par des experts (la suite MATLAB en est un exemple, également SUNDIALS, VODE, DASPK, DASSL, LSODE, etc.), qui ont des heuristiques adaptatives de pas de temps. Le manuel SUNDIALS explique les règles de décision qu'ils utilisent pour déterminer la taille des pas de temps que prend le package, pour vous donner un exemple de règles qui sont utilisées dans la pratique.

  2. Encore une fois, j'utiliserais une bibliothèque avec un pas de temps adaptatif dans la pratique, car il est plus efficace de le faire. Cependant, si vous codiez vous-même une méthode, en utilisant des tailles de pas fixes, si vous remarquiez de grandes oscillations, ou que votre solution "explosait", alors vous soupçonneriez que votre pas de temps était trop grand et le réduiriez. Répétez jusqu'à ce que vous obteniez une solution numérique raisonnablement bien comportée. Des manuels comme Ascher et Petzold et Hairer et Wanner ont de bons exemples de ce phénomène.

Geoff Oxberry
la source
9

Une meilleure façon de voir les choses est que pour un problème rigide, tout calcul explicite stable conduit à une erreur beaucoup plus petite que la tolérance d'erreur requise .

Il existe de nombreuses bonnes méthodes pour détecter automatiquement la rigidité à l'aide de schémas explicites, en particulier les paires Runge-Kutta intégrées. Voir par exemple:

Dans le deuxième exemple de faleichik, à mesure que la taille du pas est réduite, on verrait une baisse soudaine et dramatique de l'erreur à des niveaux bien inférieurs à une tolérance typique souhaitée lorsque le seuil stable de pas de temps est franchi. Un bon estimateur d'erreur révélerait donc bien la rigidité du problème. Dans le premier problème, l'erreur obtenue avec une taille de pas stable se situerait dans la plage de la tolérance souhaitée typique, indiquant la non-rigidité.

Notez en conséquence que tout problème devient non rigide si une tolérance d'erreur suffisamment stricte est requise.

David Ketcheson
la source
2
Ce sont des documents auxquels j'allais faire un lien avant de voir votre réponse. +1, bien sûr. :) Permettez-moi également d'ajouter ceci , ceci et enfin ceci . C'est définitivement un problème bien étudié ...
JM
9

1. Peut-on détecter numériquement la rigidité simplement en appliquant des méthodes explicites?

  • [0,dix]τ=1 τ

    entrez la description de l'image ici

    τ=0,1entrez la description de l'image ici

    τ=0,1[0,dix]

    Alors, le problème est-il rigide? La réponse est NON ! Un petit pas ici est nécessaire pour reproduire correctement les oscillations de la solution .

    y(t)=-2cosπt,y(0)=1.

  • τ=1

    entrez la description de l'image ici

    τ=0,1

    entrez la description de l'image ici

    τ=0,1[0,dix]

    Ce problème est-il rigide? OUI ! Nous avons fait de très petites étapes pour reproduire la solution qui évolue très lentement. C'est irrationnel! L'amplitude du pas de temps ici est limitée par les propriétés de stabilité d'Euler explicite .

    Ce problème est

    y(t)=-2y(t)+péchét/2,y(0)=1.


Conclusion: les informations sur les pas de temps et les erreurs correspondantes ne sont pas suffisantes pour détecter la rigidité. Vous devriez également regarder la solution obtenue. Si elle varie lentement et que la taille des pas est très petite, le problème est très probablement raide. Si la solution oscille rapidement et que vous faites confiance à votre technique d'estimation d'erreur, ce problème n'est pas rigide.


2. Comment déterminer la taille de pas maximale qui permet d'intégrer un problème rigide avec une méthode explicite?

Si vous utilisez un solveur explicite de boîte noire avec contrôle automatique des étapes, vous n'avez rien à faire: le logiciel prendra la taille d'étape requise de manière adaptative.

[Λ,0]Λ=-1000

[-2,0]τΛτ

τ2|Λ|.

τ1|Λ|,
1/|Λ|<τ2/|Λ|

Bien entendu, une telle analyse est principalement applicable aux problèmes linéaires à spectre connu. Pour des problèmes plus pratiques, nous devons nous baser sur des méthodes numériques de détection de rigidité (voir références et commentaires dans d'autres réponses).

faleichik
la source
Comme mentionné dans certains articles liés à David, la méthode de puissance pour trouver des valeurs propres dominantes (convenablement modifiées) est un choix habituel pour les détecteurs de rigidité à base jacobienne.
JM