Построение явных методов Рунге Кутты порядка 9 и выше

9

Некоторые старые книги, которые я видел, говорят, что минимальное количество этапов явного метода Рунге-Кутты указанного порядка неизвестно для заказов 9, Это все еще правда?

Какие есть библиотеки для автоматической работы с методами Рунге-Кутты высокого порядка?

Кирилл
источник
Что вы подразумеваете под «автоматически работать»?
Дэвид Кетчон
@DavidKetcheson Генерация коэффициентов и проверка их свойств. Я не могу себе представить, что кто-то мог бы вывести метод высокого порядка чисто вручную, учитывая, сколько существует условий и переменных.
Кирилл
Я не знаю ни одного программного обеспечения для генерации таких коэффициентов. Я видел методы RK высокого порядка в Интернете, например , как те , разработанный Терри Feagin. Статья, описывающая процесс получения коэффициентов для порядка 10, находится здесь . Не похоже, что автоматизированный метод будет легко реализован, и я сомневаюсь, что они существуют. (Как примечание, я никогда не видел РК порядка 9, всегда (7) 8 или (8) 10. Не уверен, что РК тоже существует!)
Этьен Пеллегрини
(7) 8, (8) 9, (8) 10, (10) 12 и (12) 14 все имеют реализации в DifferrntialEquations.jl . Вы можете попробовать на кучу проблем. Я дам детальную оценку чуть позже.
Крис
Обратите внимание, что выше 8-го порядка, как правило, бесполезно в пределах точности с плавающей точкой. Методы Вернера действительно хороши, но только до 6 легко FSAL. Феагин не имеет интерполяций.
Крис

Ответы:

14

Bounds

Это все еще правда. В книге Мясника , стр. 196, говорится следующее: В статье 1985 года Мясник показал, что вам нужно 11 этапов, чтобы получить 8-й порядок , и это очень точно. Для 10-го порядка Хайрер получил семейство 17-этапных методов , но неизвестно, можно ли добиться большего успеха. Та же информация приведена в разделе II.5 Hairer, Norsett, & Wanner vol. Я . В последнем документе также рассматриваются некоторые методы разработки пар высокого порядка (до 8-го порядка).

Существует верхняя граница минимального количества этапов, требуемых для любого заказа, так как вы можете построить их путем экстраполяции. Это было известно очень давно; см. мою недавнюю статью для объяснения. Однако эта граница является квадратичной по порядку и, безусловно, весьма пессимистичной. Программное обеспечение nodepy, рассмотренное ниже, может генерировать точные коэффициенты для этих методов, а также для методов отложенной коррекции (которые являются методами Рунге-Кутты) любого порядка.

Я считаю, что @Etienne правильно сказал, что методы высшего порядка, которые были созданы вручную, принадлежат Терри Феагину. Что касается его другого комментария, эта статья содержит около 9 (8) пар:

Дж. Вернер, Явные пары Рунге-Кутты высокого порядка с младшим каскадом, Прикладная численная математика, том 22, выпуски 1–3, ноябрь 1996, страницы 345-357

Вот таблица (совокупного) количества условий заказа N требуется для каждого заказа п; эта таблица выходит за рамки представленных в литературе и была создана с использованием nodepy:

p | N
-----
1 | 1
2 | 2
3 | 4
4 | 8
5 | 17
6 | 37
7 | 85
8 | 200
9 | 486
10| 1205
11| 3047
12| 7813
13| 20300
14| 53264

Програмное обеспечение

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

  • nodepy : пакет Python, который может генерировать символические выражения и код для условий заказа в произвольном порядке. Он также включает в себя код Python для проверки этих условий, коэффициенты ошибок вычислений и т. Д.
  • RK-Opt : пакет MATLAB, в котором, помимо прочего, можно найти методы Рунге-Кутты высокого порядка с коэффициентами, оптимизированными для нескольких различных целей. В настоящее время он не может обрабатывать явный RK 9-го порядка (он поднимается до 8-го порядка для методов первого порядка, десятый - для методов более высокого уровня). Если это то, что вас интересует, я могу довольно легко добавить условия 9-го порядка (и выше).

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

Дэвид Кетчесон
источник
5

Ответ @ DavidKetcheson поражает важными моментами: вы всегда можете построить методы достаточно высокого порядка, используя экстраполяцию, это очень пессимистичный предел, и вы всегда можете сделать намного лучше, все хорошие получены вручную (с помощью какого-то компьютера). алгебраические инструменты), нижняя граница не известна, а методы высшего порядка принадлежат Феагину. Учитывая некоторые комментарии, я хотел бы завершить ответ обсуждением текущих современных таблиц в этой области.

Если вам нужен сборник таблиц РК, вы можете найти его в этом коде Юлии . Цитаты для бумаги, из которой они пришли, находятся в строках документации для конструкторов таблиц. Документация разработчика для DifferentialEquations.jl перечисляет все эти таблицы как доступные для использования , и вы можете увидеть здесь, что все они протестированы с использованием комплектов непрерывной интеграции Travis и AppVeyor, чтобы убедиться, что выполняются не только условия заказа, но и фактически добиться требуемой конвергенции (проверочное тестирование). Из них вы можете видеть, что есть:

  • 5 порядка 9 методов
  • 6 порядка 10 методов
  • 2 порядка 12 методов
  • 1 порядок 14 метод

(что я мог найти, что были опубликованы). Опять все выведено вручную.

Тесты сходимости показывают, что некоторые деривации не были выполнены с достаточно высокой точностью, чтобы работать для более чем 64-битных чисел (они прокомментированы следующим образом ). Так что это интересная особенность, о которой следует знать: при этих высоких порядках вы обычно получаете только коэффициенты, которые «с ошибкой x» удовлетворяют условиям порядка, но при использовании арифметики произвольной точности вы можете фактически обнаружить эти границы. Так что точность, с которой вы выполняете коэффициенты, имеет значение, и вы должны выбрать ее, чтобы охватить точность, которую вы хотите проверить (/ конечно, использовать).

Если вам нужна куча графиков стабильности, вы можете просто plot(tableau)использовать рецепт Plots.jl. Хороший набор заметок, в которых много всего записано, можно найти на веб-сайте Питера Стоуна (перейдите ниже и нажмите, скажем, схемы порядка 10, и вы получите кучу PDF-файлов). При разработке DifferentialEquations.jl я создал этот набор таблиц, чтобы систематически проходить их по тестовым задачам / анализировать аналитические индикаторы, чтобы увидеть, какие из них следует включить в основную библиотеку. Я сделал несколько быстрых заметок здесь . Как видно из алгоритмов, входящих в основную библиотекуте, которые я нашел достойными, были методы Вернера и Феагина. Метод 9-го порядка Вернера является методом наивысшего порядка с интерполяцией, также совпадающим с порядком. Это то, что нужно признать: методы Feagin не имеют совпадающего интерполятора (хотя вы можете загрузить Hermite, но это действительно неэффективно).

Поскольку все они реализованы с очень эффективными реализациями, вы можете сами поиграть с ними и посмотреть, насколько действительно важны различные функции. Вот блокнот Jupyter, в котором показаны используемые методы Feagin . Обратите внимание, что график конвергенции действительно идет на 1e-48ошибку. Методы высокого порядка более эффективны, чем методы низкого порядка, когда вам действительно нужен очень низкий допуск. Вы можете найти некоторые тесты, которые используют некоторые из них, в DiffEqBenchmarks.jl , хотя, когда они используются, это, как правило, метод Вернера 9-го порядка, и обычно показывающий, что тест не находится в режиме, где эффективен этот высокий порядок.

Так что, если вы хотите поиграть и поработать с некоторыми методами высокого порядка, RK-Opt - это то, что я нашел, является хорошим инструментом для получения некоторых (как упомянуто @DavidKetcheson), а у DifferentialEquations.jl есть все опубликованные методы (я думаю? ) реализовано так, что вы можете легко проверить / сравниться с ними. Однако, если вы не найдете предположение, которое может быть отброшено, из моих тестов я не смог найти что-то, что превосходит методы Вернера (порядки 6-9) и Феагина (порядки 10+). YMMV, хотя, и я хотел бы видеть больше исследования в этом.

Крис Ракауцкас
источник