Я збираюся розпочати роботу над бібліотекою програмних чисельних вирішувачів ODE , і я борюся з тим, як формувати тести для реалізацій solver. Моя мета в тому , що бібліотека, в кінцевому рахунку, буде включати в себе вирішувачі для обох nonstiff і жорстких задач, і , щонайменше , один неявний вирішувач (більш-менш на одному рівні з можливостями в ode
підпрограма в Matlab ), тому потреби методології випробувань , щоб відобразити різні типи задач та критерії для різних розв’язувачів.
Моя проблема зараз полягає в тому, що я не знаю, з чого почати це тестування. Я можу придумати кілька різних способів перевірити вихід алгоритму:
Перевірте проблему, яка має аналітичне рішення, і перевірте, чи числове рішення знаходиться в межах рівнів допуску для всіх повернених точок даних. Для цього потрібні знання низки аналітичних проблем, які виявляють усі властивості, з якими я хочу працювати з різними вирішувачами (жорсткість, неявні проблеми тощо), яких у мене немає, принаймні не з верху голови.
Цей метод перевіряє результати розв'язувального методу. Таким чином, немає гарантії того, що розв’язувач насправді працює, просто він працює для заданої тестової проблеми . Тому я підозрюю, що велика кількість тестових проблем потрібна, щоб впевнено перевірити, чи працює розв’язувач.
Вручну обчисліть рішення за кілька етапів часу, використовуючи алгоритми, які я маю намір реалізувати, а потім зробіть те саме з розв’язувачами та перевірте, чи результати однакові. Це не вимагає знання справжнього рішення проблеми, але, в свою чергу, вимагає досить багато практичної роботи.
Цей метод, з іншого боку, перевіряє лише алгоритм , який мені добре, - якщо хтось інший довів, що Runge-Kutta працює 4- го порядку, я не відчуваю відчайдушної потреби. Однак я переживаю, що формувати тестові справи буде дуже громіздко, оскільки я не знаю гарного методу для отримання даних тесту (крім, можливо, вручну, що буде багато роботи ...).
Обидва вищевказані методи мають серйозні обмеження для мене з моїх нинішніх знань - я не знаю гарного набору тестових проблем для першого, і я не знаю хорошого методу формування тестових даних для другого.
Чи є інші способи перевірити числові вирішувачі ODE? Чи є інші критерії в реалізації, які слід перевірити? Чи є якісь хороші (безкоштовні) ресурси для тестування вирішувачів ODE там 1 ?
EDIT:
Оскільки це питання дуже широке, я хочу трохи уточнити. Тестовий набір, який я хочу створити, заповнить дві основні цілі:
Перевірка того, що вирішувачі працюють, як очікувалося, для проблем, які вони мають намір вирішити. Іншими словами, вирішення проблем, що не мають жорстких зусиль, дозволяється переходити на банани із жорсткою проблемою, але має справлятись із непосильними проблемами. Крім того, якщо в бібліотеці є інші вирішувачі, які пропонують більш високу точність, можливо, не доведеться застосовувати дуже точні результати - просто "досить точні". Таким чином, частина мого питання полягає в тому, які тести потрібно використовувати для вирішення; або, принаймні, як слід міркувати про це.
Тест на обґрунтованість після встановлення бібліотеки. Ці тести не повинні (не повинні) бути детальними або забирати багато часу; лише ті основи, які можна запустити за 5 секунд, але це буде сповіщати користувача, якщо щось не в графіці дивно. Таким чином, мені також потрібен спосіб побудувати тести, які є дуже простими, але все одно розповідають про стан бібліотеки.
1 Так, я гуляв очима, але більшість того, що я знаходжу, - конспекти лекцій із дуже тривіальними прикладами, за винятком виключення тестового набору CWI ODE від Барі, якого я не знаю, чи ні, як я я можу використовувати для моїх цілей, оскільки він обробляє набагато складніші рішення, ніж ті, які я хочу перевірити ...