Ответ @ 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, хотя, и я хотел бы видеть больше исследования в этом.