@ Відповідь ДевідКетчесона вражає великі моменти: ви завжди можете побудувати методи достатньо високого порядку, використовуючи екстраполяцію, це дуже песимістичний зв’язок, і ви завжди можете зробити набагато краще, всі хороші отримані вручну (за допомогою комп’ютера інструменти алгебри), нижня межа не відома, і методи вищого порядку пояснюються Феагіном. З огляду на деякі коментарі, я хотів би завершити відповідь обговоренням сучасних сучасних таблиць у цій галузі.
Якщо ви хочете збірник таблиць 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, хоча, і я хотів би дізнатися більше досліджень у цьому.