Я собираюсь начать работу над программной библиотекой числовых решателей ODE , и я борюсь с тем, как сформулировать тесты для реализаций решателя. Моя цель в том , что библиотека, в конечном счете, будет включать в себя решатели для обоих nonstiff и жестких задач, и , по меньшей мере , один неявный решатель (более или менее на одном уровне с возможностями в ode
подпрограммах в Matlab ), поэтому потребности методологии испытаний , чтобы отразить различные типы задач и критерии для разных решателей.
Моя проблема сейчас в том, что я не знаю, с чего начать это тестирование. Я могу придумать несколько разных способов проверить вывод алгоритма:
Проверьте наличие проблемы, которая имеет аналитическое решение, и убедитесь, что численное решение находится в пределах допустимых значений для всех возвращаемых точек данных. Это требует знания ряда аналитических задач, которые демонстрируют все свойства, с которыми я хочу, чтобы разные решатели работали (жесткость, неявные проблемы и т. Д.), Которых у меня нет, по крайней мере, не в моей голове.
Этот метод проверяет результаты решающего метода. Таким образом, нет никакой гарантии, что решатель действительно работает, просто он работает для данной тестовой задачи . Поэтому я подозреваю, что для уверенной проверки работоспособности решателя необходимо большое количество тестовых задач.
Вручную рассчитайте решение для нескольких временных шагов, используя алгоритмы, которые я намереваюсь реализовать, а затем проделайте то же самое с решателями и убедитесь, что результаты совпадают. Это не требует знания истинного решения проблемы, но, в свою очередь, требует довольно много практической работы.
Этот метод, с другой стороны, только проверяет алгоритм , который мне подходит - если кто-то еще доказал, что Рунге-Кутта 4- го порядка работает, я не испытываю острой необходимости. Тем не менее, я волнуюсь, что формулировать тестовые примеры будет очень громоздко, поскольку я не знаю хорошего метода для генерации тестовых данных (за исключением, может быть, вручную, что потребует много работы ...).
Оба вышеупомянутых метода имеют серьезные ограничения для меня с моими текущими знаниями - я не знаю хорошего набора тестовых задач для первого, и я не знаю хорошего метода генерации тестовых данных для второго.
Есть ли другие способы проверить числовые решатели ODE? Существуют ли другие критерии реализации, которые должны быть проверены? Есть ли хорошие (бесплатные) ресурсы для тестирования решателей ODE 1 ?
РЕДАКТИРОВАТЬ:
Поскольку этот вопрос очень широк, я хочу уточнить. Набор тестов, который я хочу создать, будет выполнять две основные задачи:
Проверка того, что решатели работают должным образом, для задач, которые они должны решить. Другими словами, решающему для не жестких задач разрешается использовать бананы в жестких задачах, но он должен хорошо выполнять свои задачи в нестандартных задачах. Кроме того, если в библиотеке есть другие решатели, которые предлагают более высокую точность, может не потребоваться применение очень точных результатов - просто «достаточно точных». Таким образом, часть моего вопроса - какие тесты следует использовать для каких решателей; или, по крайней мере, как следует обосновать, чтобы решить это.
Проверка работоспособности при установке библиотеки. Эти испытания не должны (не должны) быть сложными или трудоемкими; только те самые основы, которые могут быть запущены менее чем за 5 секунд, но которые предупредят пользователя, если что-то будет странным. Таким образом, мне также нужен способ создания очень простых тестов, но они все же говорят мне о состоянии библиотеки.
1 Да, я выгуливал глаза, но большую часть того, что я нахожу, - это лекционные заметки с очень тривиальными примерами, за заметным исключением из набора тестов CWI ODE от Bari, который я не знаю, или как, я мог бы использовать для моих целей, поскольку он рассматривает гораздо более сложные решатели, чем те, которые я хочу проверить ...
Ответы:
Это очень широкий вопрос, и я собираюсь дать вам несколько вещей для размышления (некоторые уже включены в ваш пост, но они приведены здесь для полноты).
Объем проблем
Проблема Рекомендации
Это не уникально. Если вы посмотрите книгу Денниса и Шнабеля «Численные методы для неограниченной оптимизации и нелинейных уравнений», Приложение B, «Тестовые задачи», вы увидите, как они это сделали. После разработки одного из самых красивых наборов описаний алгоритмов, которые я когда-либо видел, они столкнулись с целым рядом проблем, которые возникали, если сходить с ума. Вы должны были настроить здесь и там! Они включали пять очень разных и патологических проблем, которые напрягли возможности решателей. Это научило меня, что мы можем продолжать создавать проблемы в алгоритмах, которые они не могут обработать по целому ряду причин. Обратите внимание, что они даже позаимствовали этот набор проблем у Мора, Гарбоу и Хиллстрома (вы также можете посмотреть эту ссылку и, возможно, есть другие, которые вы можете использовать в качестве руководства).
Другими словами, это не тривиальная задача. Вам нужны контрольные примеры с известным ответом, которые всегда позволяют вам проверять достоверность обновлений и не ломать их. То есть повторяющийся и обширный набор проблем от низкого до высокого, от простого к сложному, от возможного к невозможному ... Вам также необходим набор проблем, с которыми ваши решатели не могут справиться, чтобы по-настоящему понять его ограничения.
источник
Одна проверка работоспособности, которую я выполняю с моими решателями ODE, состоит в том, чтобы просто проверить это на меньших линейных системах посредством точного вычисления экспоненты матрицы системы. т.е. дано
проверьте ошибку в
Только не рассчитывайте экспоненту с одним из ваших стимуляторов времени (то есть сомнительный метод номер 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )
источник
Вы можете попробовать исследовать «Метод изготовленных решений», который является общей методологией, используемой для тестирования реализации кодов, которые решают PDE (его можно использовать для поиска как математических ошибок, так и ошибок кодирования). Я полагаю, что он может быть адаптирован для работы с ODE, если методология вашего решения достаточно общая.
http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf
источник