Как проверить реализацию числового решения ODE?


26

Я собираюсь начать работу над программной библиотекой числовых решателей ODE , и я борюсь с тем, как сформулировать тесты для реализаций решателя. Моя цель в том , что библиотека, в конечном счете, будет включать в себя решатели для обоих nonstiff и жестких задач, и , по меньшей мере , один неявный решатель (более или менее на одном уровне с возможностями в odeподпрограммах в Matlab ), поэтому потребности методологии испытаний , чтобы отразить различные типы задач и критерии для разных решателей.

Моя проблема сейчас в том, что я не знаю, с чего начать это тестирование. Я могу придумать несколько разных способов проверить вывод алгоритма:

  • Проверьте наличие проблемы, которая имеет аналитическое решение, и убедитесь, что численное решение находится в пределах допустимых значений для всех возвращаемых точек данных. Это требует знания ряда аналитических задач, которые демонстрируют все свойства, с которыми я хочу, чтобы разные решатели работали (жесткость, неявные проблемы и т. Д.), Которых у меня нет, по крайней мере, не в моей голове.

    Этот метод проверяет результаты решающего метода. Таким образом, нет никакой гарантии, что решатель действительно работает, просто он работает для данной тестовой задачи . Поэтому я подозреваю, что для уверенной проверки работоспособности решателя необходимо большое количество тестовых задач.

  • Вручную рассчитайте решение для нескольких временных шагов, используя алгоритмы, которые я намереваюсь реализовать, а затем проделайте то же самое с решателями и убедитесь, что результаты совпадают. Это не требует знания истинного решения проблемы, но, в свою очередь, требует довольно много практической работы.

    Этот метод, с другой стороны, только проверяет алгоритм , который мне подходит - если кто-то еще доказал, что Рунге-Кутта 4- го порядка работает, я не испытываю острой необходимости. Тем не менее, я волнуюсь, что формулировать тестовые примеры будет очень громоздко, поскольку я не знаю хорошего метода для генерации тестовых данных (за исключением, может быть, вручную, что потребует много работы ...).

Оба вышеупомянутых метода имеют серьезные ограничения для меня с моими текущими знаниями - я не знаю хорошего набора тестовых задач для первого, и я не знаю хорошего метода генерации тестовых данных для второго.

Есть ли другие способы проверить числовые решатели ODE? Существуют ли другие критерии реализации, которые должны быть проверены? Есть ли хорошие (бесплатные) ресурсы для тестирования решателей ODE 1 ?

РЕДАКТИРОВАТЬ:
Поскольку этот вопрос очень широк, я хочу уточнить. Набор тестов, который я хочу создать, будет выполнять две основные задачи:

  1. Проверка того, что решатели работают должным образом, для задач, которые они должны решить. Другими словами, решающему для не жестких задач разрешается использовать бананы в жестких задачах, но он должен хорошо выполнять свои задачи в нестандартных задачах. Кроме того, если в библиотеке есть другие решатели, которые предлагают более высокую точность, может не потребоваться применение очень точных результатов - просто «достаточно точных». Таким образом, часть моего вопроса - какие тесты следует использовать для каких решателей; или, по крайней мере, как следует обосновать, чтобы решить это.

  2. Проверка работоспособности при установке библиотеки. Эти испытания не должны (не должны) быть сложными или трудоемкими; только те самые основы, которые могут быть запущены менее чем за 5 секунд, но которые предупредят пользователя, если что-то будет странным. Таким образом, мне также нужен способ создания очень простых тестов, но они все же говорят мне о состоянии библиотеки.


1 Да, я выгуливал глаза, но большую часть того, что я нахожу, - это лекционные заметки с очень тривиальными примерами, за заметным исключением из набора тестов CWI ODE от Bari, который я не знаю, или как, я мог бы использовать для моих целей, поскольку он рассматривает гораздо более сложные решатели, чем те, которые я хочу проверить ...


2
@ user75064: Абсолютно! Я не знал, что этот сайт даже существует =) Любые моды, не стесняйтесь перенести меня туда.
Томас Ашан

В этом ответе есть ссылки на другие тестовые наборы на Math Stack Exchange .
Джефф Оксберри

@GeoffOxberry: я нашел несколько таких раньше. Большинство из них реализованы на FORTRAN и предполагают, что читатель хочет протестировать решатели на том же языке, который добавляет еще один источник ошибок ... Однако пара (статьи о наборе DETEST) оказалась действительно полезной. Большое спасибо!
Томас Ашан

Ответы:


12

Это очень широкий вопрос, и я собираюсь дать вам несколько вещей для размышления (некоторые уже включены в ваш пост, но они приведены здесь для полноты).

Объем проблем

  • Вам необходимо определить интерфейс для определения проблем.
  • Вы собираетесь разрешить параметры, которые могут быть фиксированными или могут варьироваться для решений?
  • ϵ
  • Собираетесь ли вы позволить бесконечную точность?
  • Собираетесь ли вы проверить скорость и чувствительность к числовой точности?
  • Вы выбрали две (возможно, больше) библиотеки, которые уже существуют, чтобы сравнить результаты?
  • Как вы будете выбирать критерии остановки, будете ли вы использовать различные методы и позволять ли пользователю выбирать или определять свои собственные?
  • Собираетесь ли вы измерять ошибки, используя различные меры, и позволяете ли пользователям включать и выключать их?
  • Вы смотрели на профессиональные пакеты, такие как Computer-Algebra-Systems (CAS) и понимали все варианты, которые они позволяют?
  • Собираетесь ли вы разрешить отображение результатов и / или сравнений и / или графиков?

Проблема Рекомендации

  • Вам необходимо написать тестовую спецификацию, определяющую источник проблем, объем тестируемых проблем, сбор результатов и метрики выполнения подпрограмм.
  • Я бы, конечно, обратился к другим библиотекам, которые там уже работают, для определения проблем, которые они используют (возможно, тестовые файлы).
  • Я ходил в библиотеки колледжей, читал книги по ODE и извлекал проблемы всех типов, с известными решениями в закрытой форме или только с цифрами.
  • Случай 1: Мы хотим получить как можно больше вариантов решения замкнутых форм, чтобы сравнить точные и численные результаты.
  • Случай 2: я бы пошел в каждую книгу по численному анализу, которую смог найти, запечатлел обработанные примеры и продублировал их. Я бы дополнительно описал проблемные наборы, особенно те, которые имеют некоторую патологию, которая существует в большинстве книг (чувствительность к тому или иному типу).
  • Случай 3: Я бы пошел в разные отрасли прикладной математики, такие как физика, экология, биология, экономика и др. я и собираю проблемы из каждого из этих доменов, чтобы проверить, что ваш язык спецификаций для проблем допускает такие примеры.
  • Случай 4: я бы исследовал статьи / журналы, которые содержат наиболее полезные примеры, где конкретному автору пришлось модифицировать конкретный подход, чтобы учесть некоторую патологию, странности или жесткости.
  • Случай 5: поиск в Интернете дополнительных примеров. Для жестких , см. Ссылки здесь и просмотреть их ВСЕ, чтобы найти тестовые проблемы. Вот несколько примеров MATLAB для ознакомления.

Это не уникально. Если вы посмотрите книгу Денниса и Шнабеля «Численные методы для неограниченной оптимизации и нелинейных уравнений», Приложение B, «Тестовые задачи», вы увидите, как они это сделали. После разработки одного из самых красивых наборов описаний алгоритмов, которые я когда-либо видел, они столкнулись с целым рядом проблем, которые возникали, если сходить с ума. Вы должны были настроить здесь и там! Они включали пять очень разных и патологических проблем, которые напрягли возможности решателей. Это научило меня, что мы можем продолжать создавать проблемы в алгоритмах, которые они не могут обработать по целому ряду причин. Обратите внимание, что они даже позаимствовали этот набор проблем у Мора, Гарбоу и Хиллстрома (вы также можете посмотреть эту ссылку и, возможно, есть другие, которые вы можете использовать в качестве руководства).

Другими словами, это не тривиальная задача. Вам нужны контрольные примеры с известным ответом, которые всегда позволяют вам проверять достоверность обновлений и не ломать их. То есть повторяющийся и обширный набор проблем от низкого до высокого, от простого к сложному, от возможного к невозможному ... Вам также необходим набор проблем, с которыми ваши решатели не могут справиться, чтобы по-настоящему понять его ограничения.


2

Одна проверка работоспособности, которую я выполняю с моими решателями ODE, состоит в том, чтобы просто проверить это на меньших линейных системах посредством точного вычисления экспоненты матрицы системы. т.е. дано

dudt=Au

проверьте ошибку в

exp(tA)u0u^(t)

u^(t)

Только не рассчитывайте экспоненту с одним из ваших стимуляторов времени (то есть сомнительный метод номер 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )


Просто примечание: интеграторы DE считались «сомнительными» в том смысле, что они были немного неэффективны по сравнению с масштабированием + возведением в квадрат, а не из-за неточности.
JM

1

Вы можете попробовать исследовать «Метод изготовленных решений», который является общей методологией, используемой для тестирования реализации кодов, которые решают PDE (его можно использовать для поиска как математических ошибок, так и ошибок кодирования). Я полагаю, что он может быть адаптирован для работы с ODE, если методология вашего решения достаточно общая.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.