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