Я собираюсь начать работу над программной библиотекой числовых решателей ODE , и я борюсь с тем, как сформулировать тесты для реализаций решателя. Моя цель в том , что библиотека, в конечном счете, будет включать в себя решатели для обоих nonstiff и жестких задач, и , по меньшей мере , один неявный решатель (более или менее на одном уровне с возможностями в ode
подпрограммах в Matlab ), поэтому потребности методологии испытаний , чтобы отразить различные типы задач и критерии для разных решателей.
Моя проблема сейчас в том, что я не знаю, с чего начать это тестирование. Я могу придумать несколько разных способов проверить вывод алгоритма:
Проверьте наличие проблемы, которая имеет аналитическое решение, и убедитесь, что численное решение находится в пределах допустимых значений для всех возвращаемых точек данных. Это требует знания ряда аналитических задач, которые демонстрируют все свойства, с которыми я хочу, чтобы разные решатели работали (жесткость, неявные проблемы и т. Д.), Которых у меня нет, по крайней мере, не в моей голове.
Этот метод проверяет результаты решающего метода. Таким образом, нет никакой гарантии, что решатель действительно работает, просто он работает для данной тестовой задачи . Поэтому я подозреваю, что для уверенной проверки работоспособности решателя необходимо большое количество тестовых задач.
Вручную рассчитайте решение для нескольких временных шагов, используя алгоритмы, которые я намереваюсь реализовать, а затем проделайте то же самое с решателями и убедитесь, что результаты совпадают. Это не требует знания истинного решения проблемы, но, в свою очередь, требует довольно много практической работы.
Этот метод, с другой стороны, только проверяет алгоритм , который мне подходит - если кто-то еще доказал, что Рунге-Кутта 4- го порядка работает, я не испытываю острой необходимости. Тем не менее, я волнуюсь, что формулировать тестовые примеры будет очень громоздко, поскольку я не знаю хорошего метода для генерации тестовых данных (за исключением, может быть, вручную, что потребует много работы ...).
Оба вышеупомянутых метода имеют серьезные ограничения для меня с моими текущими знаниями - я не знаю хорошего набора тестовых задач для первого, и я не знаю хорошего метода генерации тестовых данных для второго.
Есть ли другие способы проверить числовые решатели ODE? Существуют ли другие критерии реализации, которые должны быть проверены? Есть ли хорошие (бесплатные) ресурсы для тестирования решателей ODE 1 ?
РЕДАКТИРОВАТЬ:
Поскольку этот вопрос очень широк, я хочу уточнить. Набор тестов, который я хочу создать, будет выполнять две основные задачи:
Проверка того, что решатели работают должным образом, для задач, которые они должны решить. Другими словами, решающему для не жестких задач разрешается использовать бананы в жестких задачах, но он должен хорошо выполнять свои задачи в нестандартных задачах. Кроме того, если в библиотеке есть другие решатели, которые предлагают более высокую точность, может не потребоваться применение очень точных результатов - просто «достаточно точных». Таким образом, часть моего вопроса - какие тесты следует использовать для каких решателей; или, по крайней мере, как следует обосновать, чтобы решить это.
Проверка работоспособности при установке библиотеки. Эти испытания не должны (не должны) быть сложными или трудоемкими; только те самые основы, которые могут быть запущены менее чем за 5 секунд, но которые предупредят пользователя, если что-то будет странным. Таким образом, мне также нужен способ создания очень простых тестов, но они все же говорят мне о состоянии библиотеки.
1 Да, я выгуливал глаза, но большую часть того, что я нахожу, - это лекционные заметки с очень тривиальными примерами, за заметным исключением из набора тестов CWI ODE от Bari, который я не знаю, или как, я мог бы использовать для моих целей, поскольку он рассматривает гораздо более сложные решатели, чем те, которые я хочу проверить ...