Jak można przetestować numeryczną implementację solvera ODE?

26

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 odeprocedur 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:

  1. 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ć.

  2. 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ć ...

Tomas Aschan
źródło
2
@ user75064: Oczywiście! Nie wiedziałem, że ta strona w ogóle istniała =) Wszelkie mody, możesz mnie tam przenieść.
Tomas Aschan
W tej odpowiedzi na Math Stack Exchange znajdują się łącza do innych zestawów testowych .
Geoff Oxberry
@GeoffOxberry: Znalazłem kilka takich wcześniej. Większość z nich jest zaimplementowana w FORTRAN i zakłada, że ​​czytelnik chce przetestować solwery w tym samym języku, co dodaje kolejne źródło błędów ... Jednak kilka (artykuły na temat pakietu DETEST) okazało się bardzo przydatne. Wielkie dzięki!
Tomas Aschan,

Odpowiedzi:

12

To jest bardzo szerokie pytanie i dam ci kilka rzeczy do przemyślenia (niektóre są już zawarte w twoim poście, ale są tutaj powtórzone dla kompletności).

Zakres problemów

  • Musisz zdefiniować interfejs określania problemów.
  • Czy pozwolisz na parametry, które można naprawić lub mogą się różnić w zależności od rozwiązania?
  • ϵ
  • Czy pozwolisz na nieskończoną precyzję?
  • Czy zamierzasz przetestować szybkość i wrażliwość na precyzję numeryczną?
  • Czy wybrałeś dwie (może więcej) biblioteki, które już istnieją, aby porównać wyniki?
  • Jak wybierzesz kryteria zatrzymania, czy użyjesz różnych metod i pozwolisz użytkownikowi wybrać lub zdefiniować własne?
  • Czy zamierzasz mierzyć błąd za pomocą różnych środków i pozwolić użytkownikowi włączać i wyłączać te?
  • Czy spojrzałeś na profesjonalne pakiety takie jak Computer-Algebra-Systems (CAS) i rozumiesz wszystkie opcje, na które pozwalają?
  • Czy pozwolisz na wyświetlanie wyników i / lub porównań i / lub wykresów?

Zalecenia dotyczące problemów

  • Musisz napisać specyfikację testu określającą źródło problemów, zakres, w jaki problemy były testowane, przechwytując wyniki i metryki uruchamiania procedur.
  • Z pewnością szukałbym już innych bibliotek pod kątem problemów, których używają (może plików testowych).
  • Chodziłam do bibliotek uniwersyteckich, przeglądałam książki na temat ODE i wyciągałam problemy wszelkiego rodzaju, te o znanej zamkniętej formie lub rozwiązania wyłącznie numeryczne.
  • Przypadek 1: Chcemy uzyskać tyle wariantów problemów z rozwiązaniem w formie zamkniętej, ile możemy, aby porównać wyniki dokładne z wynikami liczbowymi.
  • Przypadek 2: Chciałbym przejść do każdej książki do analizy numerycznej, w której mogę znaleźć i uchwycić wypracowane przykłady i powielić je. Dodatkowo uchwyciłbym zestawy problemów, szczególnie te, które mają pewną patologię, która istnieje w większości książek (wrażliwość na ten lub inny typ).
  • Przypadek 3: Chodziłbym do różnych gałęzi matematyki stosowanej, takich jak fizyka, ekologia, biologia, ekonomia i in. i przechwytuj problemy z każdej z tych domen, aby sprawdzić, czy język specyfikacji problemów pozwala na takie przykłady.
  • Przypadek 4: Badałbym artykuły / czasopisma, które zawierają najbardziej przydatne przykłady, w których konkretny autor musiał zmodyfikować określone podejście, aby uwzględnić pewną patologię, dziwność lub twardość.
  • Przypadek 5: Wyszukaj w Internecie dodatkowe przykłady. Dla sztywności , zobacz odniesienia tutaj i przejrzyj je WSZYSTKO, aby znaleźć problemy z testem. Oto kilka przykładów MATLAB-a do przejrzenia.

To nie jest wyjątkowe. Jeśli spojrzysz na książkę „Metody numeryczne dla nieograniczonej optymalizacji i równań nieliniowych” Dennisa i Schnabla, dodatek B, „Problemy z testami”, możesz zobaczyć, jak to zrobili. Po opracowaniu jednego z najpiękniejszych zestawów algorytmów, jakie kiedykolwiek widziałem, rzucili na niego zbiór problemów, które sprawiły, że oszalałem. Trzeba było poprawiać tu i tam! Obejmowały one pięć bardzo różnych i patologicznych problemów, które nadwyrężały możliwości solverów. Nauczyło mnie to, że możemy nadal rzucać problemy w algorytmy, których nie są w stanie obsłużyć z wielu powodów. Zauważ, że nawet pożyczyli ten zestaw problemów od More ', Garbow i Hillstrom (możesz także sprawdzić to odniesienie i być może są inne, których możesz użyć jako przewodnika).

Innymi słowy, nie jest to trywialne zadanie. Potrzebujesz skrzynek testowych Znana odpowiedź, które zawsze pozwalają przetestować ważność aktualizacji i nie psują rzeczy. Oznacza to powtarzalny i obszerny zestaw problemów od niskiego do wysokiego, od łatwego do trudnego, od możliwego do niemożliwego ... Potrzebujesz także zestawu problemów, z którymi nie mogą sobie poradzić solwery, aby naprawdę zrozumieć jego ograniczenia.

Amzoti
źródło
2

Jednym z testów poczytalności, które przeprowadzam na moich solverach ODE, jest po prostu sprawdzenie na mniejszych systemach liniowych poprzez dokładne obliczenie wykładniczej macierzy systemu. tzn. dane

dudt=Au

sprawdź błąd w

exp(tA)u0u^(t)

u^(t)

Po prostu nie obliczaj wykładniczego za pomocą jednego ze swoich stepperów czasowych (tj. Wątpliwa metoda numer 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )

Reid.Atcheson
źródło
Tylko uwaga: integratory DE zostały uznane za „wątpliwe”, ponieważ były dość nieefektywne w porównaniu ze skalowaniem + kwadratem, nie z powodu niedokładności.
JM
1

Możesz spróbować zbadać „metodę wytworzonych rozwiązań”, która jest ogólną metodologią stosowaną do testowania implementacji kodów, które rozwiązują PDE (można jej użyć do znalezienia błędów matematycznych i kodowych). Wyobrażam sobie, że można by go dostosować do rozwiązywania ODE, jeśli metodologia rozwiązania jest wystarczająco ogólna.

http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf

Kris Kuhlman
źródło