Zaraz zacznę pracować nad biblioteką oprogramowania numerycznych solverów ODE i mam problemy z opracowaniem testów dla implementacji solvera. Moją ambicją jest, że biblioteka ostatecznie obejmie rozwiązują zarówno nonstiff i sztywnych problemów, a co najmniej jeden niejawny solver (mniej więcej na równi z możliwościami tych ode
procedur w programie MATLAB ), więc potrzeby metodologii testowania, aby odzwierciedlić różne rodzaje problemów i kryteria dla różnych rozwiązań.
Mój problem polega na tym, że nie wiem od czego zacząć od tych testów. Mogę wymyślić kilka różnych sposobów testowania danych wyjściowych algorytmu:
Przetestuj problem mający rozwiązanie analityczne i sprawdź, czy rozwiązanie numeryczne mieści się w granicach poziomów tolerancji dla wszystkich zwróconych punktów danych. Wymaga to znajomości szeregu problemów analitycznych, które wykazują wszystkie właściwości, z którymi chcę, aby różne solwery pracowały (sztywność, ukryte problemy itp.), Których nie mam, a przynajmniej nie na czubku głowy.
Ta metoda sprawdza wyniki metody solvera. Dlatego nie ma gwarancji, że solver faktycznie działa, tylko że działa on dla danego problemu testowego . Dlatego podejrzewam, że potrzebna jest duża liczba problemów testowych, aby pewnie sprawdzić, czy solver działa.
Ręcznie oblicz rozwiązanie dla kilku kroków czasowych, używając algorytmów, które zamierzam wdrożyć, a następnie zrób to samo z solverami i sprawdź, czy wyniki są takie same. Nie wymaga to znajomości prawdziwego rozwiązania problemu, ale z kolei wymaga sporo praktycznej pracy.
Metoda ta, z drugiej strony, sprawdza tylko algorytm , który jest w porządku wg mnie - jeśli ktoś udowodnił, że 4 th zamówienie Runge-Kutty działa, nie czuję się rozpaczliwą potrzebę. Martwię się jednak, że formułowanie przypadków testowych będzie bardzo kłopotliwe, ponieważ nie znam dobrej metody generowania danych testowych (z wyjątkiem może ręcznie, co będzie bardzo pracochłonne ...).
Obie powyższe metody mają dla mnie poważne ograniczenia z obecną wiedzą - nie znam dobrego zestawu problemów testowych dla pierwszego i nie znam dobrej metody generowania danych testowych dla drugiego.
Czy istnieją inne sposoby weryfikacji numerycznych solverów ODE? Czy istnieją inne kryteria dotyczące wdrożeń, które należy zweryfikować? Czy są jakieś dobre (bezpłatne) zasoby na testowanie solverów ODE 1 ?
EDYCJA:
Ponieważ to pytanie jest bardzo ogólne, chcę trochę wyjaśnić. Pakiet testowy, który chcę utworzyć, wypełni dwa główne cele:
Sprawdzanie, czy solwery działają zgodnie z oczekiwaniami w przypadku problemów, które mają rozwiązać. Innymi słowy, solver dla problemów niesztywnych jest dozwolony do przenoszenia bananów na problemy sztywne, ale powinien działać dobrze w przypadku problemów niesztywnych. Ponadto, jeśli istnieją inne solwery w bibliotece, które oferują wyższą dokładność, egzekwowanie bardzo dokładnych wyników może nie być konieczne - wystarczy „wystarczająco dokładne”. Zatem częścią mojego pytania jest to, jakie testy należy zastosować dla jakich solverów; a przynajmniej jak należy tego dokonać.
Test poczytalności po instalacji biblioteki. Testy te nie muszą (nie powinny) być skomplikowane lub czasochłonne; tylko podstawowe informacje, które można uruchomić w mniej niż 5 sekund, ale to ostrzega użytkownika, jeśli coś jest nie tak z wykresów. Dlatego też potrzebuję sposobu, aby skonstruować testy, które są bardzo proste, ale wciąż mówią mi coś o stanie biblioteki.
1 Tak, wygooglowałem swoje oczy, ale większość tego, co znajduję, to notatki z wykładów z bardzo trywialnymi przykładami, z godnym uwagi wyjątkiem zestawu testów CWI ODE z Bari, których nie wiem, czy jak przydałoby się do moich celów, ponieważ traktuje o wiele bardziej wyrafinowane solwery niż te, które chcę przetestować ...