Je suis sur le point de commencer à travailler sur une bibliothèque de logiciels de solveurs numériques ODE , et je n'arrive pas à formuler des tests pour les implémentations du solveur. Mon ambition est que la bibliothèque, à terme, comprendra solveurs pour les problèmes de non raides et rigides, et au moins un solveur implicite (plus ou moins à égalité avec les capacités de la ode
routine en Matlab ), de sorte que les besoins de la méthodologie de test pour refléter les différents types de problèmes et critères pour différents solveurs.
Mon problème est que je ne sais pas par où commencer avec ce test. Je peux penser à différentes façons de tester la sortie d'un algorithme:
Testez un problème qui a une solution analytique et vérifiez que la solution numérique est dans les niveaux de tolérance pour tous les points de données renvoyés. Cela nécessite la connaissance d'un certain nombre de problèmes analytiques qui présentent toutes les propriétés avec lesquelles je veux travailler avec les différents solveurs (rigidité, problèmes implicites, etc.), que je n'ai pas, du moins pas du haut de ma tête.
Cette méthode teste les résultats d'une méthode de solveur. Ainsi, il n'y a aucune garantie que le solveur fonctionne réellement, juste qu'il fonctionne pour le problème de test donné . Par conséquent, je soupçonne qu'un grand nombre de problèmes de test sont nécessaires pour vérifier en toute confiance que le solveur fonctionne.
Calculez manuellement la solution pour quelques pas de temps en utilisant les algorithmes que j'ai l'intention d'implémenter, puis faites de même avec les solveurs et vérifiez que les résultats sont les mêmes. Cela ne nécessite aucune connaissance de la vraie solution au problème, mais nécessite à son tour beaucoup de travail pratique.
Cette méthode, d'autre part, ne teste que l' algorithme , ce qui est bien pour moi - si quelqu'un d' autre a prouvé que 4 ème ordre fonctionne Runge-Kutta, je ne me sens pas un besoin désespéré de. Cependant, je crains qu'il ne soit très difficile de formuler des cas de test, car je ne connais pas de bonne méthode pour générer les données de test (sauf peut-être à la main, ce qui demandera beaucoup de travail ...).
Les deux méthodes ci-dessus ont de sérieuses limites pour moi avec mes connaissances actuelles - je ne connais pas un bon ensemble de problèmes de test pour le premier, et je ne connais pas une bonne méthode pour générer des données de test pour le second.
Existe-t-il d'autres moyens de vérifier les solveurs numériques ODE? Y a-t-il d'autres critères sur les implémentations qui devraient être vérifiés? Existe-t-il de bonnes ressources (gratuites) pour tester les solveurs ODE 1 ?
EDIT:
Étant donné que cette question est très large, je tiens à clarifier un peu. La suite de tests que je veux créer remplira deux objectifs principaux:
Vérifier que les solveurs fonctionnent comme prévu, pour les problèmes qu'ils sont censés résoudre. En d'autres termes, un solveur pour les problèmes non rigides est autorisé à utiliser des bananes sur un problème rigide, mais devrait bien fonctionner sur les problèmes non rigides. De plus, s'il existe d'autres solveurs dans la bibliothèque qui offrent une précision plus élevée, il peut ne pas être nécessaire d'appliquer des résultats très précis - juste "assez précis". Ainsi, une partie de ma question est de savoir quels tests doivent être utilisés pour quels solveurs; ou, du moins, comment raisonner pour en décider.
Test de santé mentale lors de l'installation de la bibliothèque. Ces tests ne doivent pas (ne doivent pas) être élaborés ou prendre du temps; juste les bases qui peuvent être exécutées en moins de 5 secondes, mais qui alerteront l'utilisateur si quelque chose est bizarre hors des cartes. Ainsi, j'ai également besoin d'un moyen de construire des tests qui sont très simples, mais qui me disent encore quelque chose sur l'état de la bibliothèque.
1 Oui, j'ai recherché mes yeux sur Google, mais la plupart de ce que je trouve sont des notes de cours avec des exemples très triviaux, à l'exception notable de l'ensemble de test CWI ODE de Bari que je ne sais pas si, ou comment, je pourrait utiliser à mes fins, car il traite des solveurs beaucoup plus sophistiqués que ceux que je veux tester ...