@ Відповідь ДевідКетчесона вражає великі моменти: ви завжди можете побудувати методи достатньо високого порядку, використовуючи екстраполяцію, це дуже песимістичний зв’язок, і ви завжди можете зробити набагато краще, всі хороші отримані вручну (за допомогою комп’ютера інструменти алгебри), нижня межа не відома, і методи вищого порядку пояснюються Феагіном. З огляду на деякі коментарі, я хотів би завершити відповідь обговоренням сучасних сучасних таблиць у цій галузі.
Якщо ви хочете збірник таблиць RK, ви можете знайти його в цьому коді Джулії . Цитати для документа, з якого вони вийшли, містяться в документах для конструкторів таблиць. Документація розробника для 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, але це дійсно неефективно).
Оскільки всі вони реалізовані з дуже ефективними реалізаціями, ви можете самі пограти з ними і подивитися, наскільки різні функції насправді мають значення. Ось ноутбук Юпітера, який показує використовувані методи Feagin . Зауважте, що графік конвергенції дійсно буде 1e-48помилковим. Методи високого замовлення лише ефективніші, ніж методи нижчого порядку, коли вам справді потрібна дуже низька толерантність. Деякі орієнтири, які використовують деякі з них, ви можете знайти на DiffEqBenchmarks.jl , хоча, коли вони використовуються, це звичайно метод Вернера 9-го порядку, і, як правило, показує, що тест не в режимі, де цей високий порядок є ефективним.
Отже, якщо ви хочете пограти і попрацювати з деякими методами високого порядку, RK-Opt - це те, що я знайшов, це гарний інструмент для виведення деяких (як згадував @DavidKetcheson), а DifferentialEquations.jl має всі опубліковані методи (я думаю? ) реалізовано так, що ви можете легко протестувати / орієнтуватись на них. Однак, якщо ви не знайдете припущення, яке можна відкинути, з моїх тестів я не зміг знайти те, що перемагає методи Вернера (замовлення 6-9) та Feagin (замовлення 10+). YMMV, хоча, і я хотів би дізнатися більше досліджень у цьому.