En numérique, il est très important de pouvoir identifier des schémas instables et d'améliorer leur stabilité. Comment identifier les calculs en virgule flottante instables?
Je travaille sur une simulation très complexe où de nombreux schémas numériques fonctionnent ensemble et je recherche une méthodologie pour identifier ses points faibles. Je travaille sur un modèle physique impliquant des équations différentielles. Une vue d'ensemble du processus global est:
(Étape préliminaire) Recueillir les observations physiques P .
Déterminez les paramètres initiaux de la simulation. Cela utilise un algorithme d'optimisation, où nous marchons dans un espace de paramètres et recherchons des paramètres C tels que certaines fonctions d'erreur E (F (C), P) soient minimisées, où F est une quantité dérivée des paramètres.
Branchez C dans le moteur de simulation. Il s'agit d'un schéma d'Euler de l'EDP, de sorte qu'à chaque pas de temps, nous calculons les termes entraînant la dynamique (chacun d'eux est une fonction complexe, potentiellement sujette à l'instabilité) et alimentons le schéma d'Euler avec ces termes dynamiques pour calculer le prochain Etat. Cela continue pendant des milliers de points dans le temps.
À la fin de la simulation, nous calculons une fonction Proof (S) de l'état final S et la comparons à certaines quantités Require (P) déduites des quantités observées. Ce n'est pas une preuve formelle du résultat, mais plutôt un contrôle de plausibilité.
Aussi, je vois une tour d'opérations complexes (calcul de termes dynamiques, dans le schéma d'Euler, dans le Proof ). Et je voudrais reconnaître les «mauvaises pièces» et les corriger.
Je suppose que l'utilisation d'une implémentation logicielle de nombres à virgule flottante avec une précision réduite amplifierait l'instabilité des schémas numériques, facilitant ainsi la comparaison entre les différentes implémentations. Est-ce une technique courante pour enquêter sur cette question? Est-il possible d'utiliser une machine virtuelle, comme Bochs, pour y parvenir sans altérer le programme?
Pour traiter correctement la question de stabilité, il est parfois acceptable de cibler l'entrée typique de la procédure numérique, afin qu'elle puisse être réglée pour bien fonctionner sur cette entrée et peut-être moins bien sur d'autres entrées valides, mais peu probables. Étant donné un échantillon d'entrées typiques, il est possible de fouiner certains résultats intermédiaires et de préparer un profil statistique pour eux. Encore une fois, est-ce une technique courante pour étudier les problèmes de stabilité? Une machine virtuelle est-elle utile pour cela?