Так, з цього приводу не так вже й багато ресурсів. Дуже довгий час стандартним гото було "просто використовувати методи BDF". Ця мантра була встановлена в камінь з кількох історичних причин: для одного коду Gear був перший широко доступний жорсткий вирішувач, а для іншого пакет MATLAB не / не включає неявний метод RK. Однак це евристика не завжди є правильним, і я б сказав, що після тестування це зазвичай неправильно. Дозвольте докладно пояснити.
Методи BDF мають високу фіксовану вартість
Адаптивний часовий набір та адаптаційний порядок у методах BDF має дуже високу вартість. Коефіцієнти повинні бути перераховані або значення повинні бути інтерпольовані в різний час. Тут було зроблено багато роботи над тим, щоб зробити поточні коди BDF тут кращими (є дві добре відомі "форми" для впровадження, які намагаються вирішити цю проблему по-різному), але насправді це просто дуже складна проблема інженерії програмного забезпечення. Через це фактично більшість BDF-кодів є нащадками від оригінального коду Gear: Gear's, vode, lsoda, CVODE Sundial, навіть рішачі DAE DASKR і DASSL - нащадки з одного і того ж коду.
Це означає, що якщо проблема у вас "занадто мала", висока фіксована вартість дійсно має значення, і неявні методи РК будуть робити краще.
Методи BDF високого порядку дуже нестабільні для складних власних значень
Методи BDF дозволяють вам контролювати максимальний порядок і зробити його більш консервативним з причини: методи BDF вищого порядку не можуть дуже добре обробляти навіть "середні" складні власні значення. Тож у цих випадках, щоб бути стабільними, вони повинні скинути свій порядок. Це причина, чому метод BDF 6-го порядку, хоча технічно стабільний, часто ігнорується, оскільки навіть у 5-му порядку вже є проблеми (а 6-й порядок ще менш стабільний). Лише до 2-го порядку є A-стабільним, тож він завжди може повернутися туди, але тоді перехід домінує помилку.
Отже, використовуючи коди BDF для нетривіальних проблем, ви весь час не отримуєте 5 замовлення. Коливання призводять до того, що його порядок знижується.
Методи BDF мають високу стартову вартість
я ττ
Методи BDF, будучи багатоступеневими, мають найкраще масштабування
fradau
Які орієнтири доступні?
Книга Хайрера та DiffEqBenchmark (пояснено нижче), мабуть, найкращі з точки зору легкодоступних діаграм точності роботи. Розв’язування звичайних диференціальних рівнянь Хайрера II має безліч діаграм точності роботи на сторінках 154 і 155. Результати проблем, які він вибрав, відповідають тим, про що я говорив вище, з причин, про які я говорив вище: неявна RK буде ефективнішою, якщо проблема не буде "досить великий". Ще одне цікаве, що слід зазначити, що методи високого порядку Розенброк виходять найбільш ефективними у багатьох його тестах (як Rodas
) у режимі, де помилка вища, а неявна РК radau5
є найбільш ефективною при менших помилках. Але проблеми з його тестами - це здебільшого не дискретизація великих PDE, тому враховуйте наведені вище пункти.
Як ви тестуєте / оцінюєте?
Мені подобається перевірити це на DifferentialEquations.jl в Джулії (відмова від відповідальності: я один із розробників). Це в Юлії. Мова програмування тут справді повинен отримати примітку. Пам'ятайте, що зі збільшенням вартості виклику функції методи BDF виявляються краще. У R / MATLAB / Python функція користувача є єдиним кодом R / MATLAB / Python, який оптимізовані вирішувачі повинні реально використовувати: якщо ви використовуєте обгортки SciPy або Sundials, це весь код C / Fortran, за винятком функції, яку ви передаєте . Це означає, що в динамічних мовах (які не є Джулією) методи BDF роблять краще, ніж зазвичай, тому що виклики функцій дуже неоптимізовані (це, мабуть, причина, чому Shampine включений ode15s
у набір MATLAB, але немає неявного методу RK) .
fODEProblem
@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())
де перший використовує сонячні годинники CVODE
(метод BDF), а другий використовує Hairer's radau
(неявна RK).
Для будь-якого ODEProblem
ви можете скористатися інструментами бенчмаркінгу, щоб побачити, як масштабуються різні алгоритми для різних адаптивних допусків. Деякі результати розміщені на сайті DiffEqBenchmarks.jl . Наприклад, на проблемі ROBER (система з 3 жорсткими ODE) ви бачите, що сонячні годинники насправді нестабільні і розходяться з досить високою толерантністю (тоді як інші методи сходяться просто чудово), демонструючи вищевказане про проблеми стабільності. Щодо проблеми Van Der Pol , ви можете бачити, що це більше миття. У мене є набагато більше, ніж я не публікував, але, мабуть, не дістанусь до цього, поки не закінчу кілька методів Розенброк вищого порядку (Родас - це версія Fortran).
(Примітка: ці жорсткі орієнтири потребують оновлення. Для одного, текст потребує оновлення, оскільки чомусь методи ODE.jl розходяться ...)
Методи екструполяції та РКК
Існують також такі методи екстраполяції, seulex
які створені для жорстких проблем. Це "нескінченний пристосувальний порядок", але це означає лише, що вони асимптоматично гарні, коли ви шукаєте дуже низьку помилку (тобто шукаєте вирішити жорсткі проблеми з меншим значенням, 1e-10
або в такому випадку, ви можете, ймовірно, використовувати явний метод) . Однак у більшості випадків вони не настільки ефективні і їх слід уникати.
Рунге-Кутта Чебищев - це явний метод, який також працює над жорсткими проблемами, які слід враховувати. У мене цього немає в DifferentialEquations.jl, тому я не маю жодних вагомих доказів того, як це відбувається.
Інші методи, які слід врахувати: спеціалізовані методи для жорстких ФДЕ
Напевно, слід зауважити, що методи високого порядку Розенброка справді добре, у багато разів навіть краще, для жорстких проблем малого та середнього розміру, коли можна легко обчислити якобійців. Однак, для деяких PDE, я вважаю, що проблеми адвекції-дифузії потрапляють у цю категорію, Розенброк може втратити певні порядки точності. Також їм потрібні дуже точні якобійці, щоб зберегти їх точність. У Джулії це легко, тому що вирішувачі надходять із символікою та автодиференціацією, що може бути правильним для машинного епсилону. Однак такі речі, як MATLABode23s
можуть виникнути проблеми, оскільки в цих реалізаціях використовується скінченна диференціація. Для методів BDF та неявних RK помилки в якобіанській мові призводять до уповільнення конвергенції, тоді як для Розенброк, оскільки це не неявні рівняння і є скоріше методами РК з інверсіями якобійців, вони просто втрачають порядок точності.
Інші методи, на які слід звернути увагу, - це експоненціальні методи РК, експоненціальна часова різниця (ETD), неявний фактор інтеграції (IIF) та експоненціальні методи Розенброк. Перші три використовують той факт, що в багатьох дискреційних рішеннях PDE,
ут= A u + f( і )
АА уеАА
АJu + g( і )Jf= Ju + g
Ще інші методи: новітні творіння
Методи, які є повністю неявними, очевидно добре справляються з жорсткими рівняннями. Якщо PDE недостатньо великий, ви не можете ефективно "паралелізувати у просторі" достатньо, щоб використовувати HPC. Натомість ви можете створювати паралельно своєчасні розслідування, які є повністю неявними і, таким чином, хорошими для жорстких рівнянь, але паралельно, щоб повноцінно використовувати апаратне забезпечення. XBraid - це рішення, що використовує подібну методику, а основними методами є PFFAST та парареальні методи. DifferentialEquations.jl розробляє метод нейронної сітки, який працює аналогічно.
Знову ж таки, це оптимально, коли у вас недостатньо велика просторова дискретизація для ефективної паралелізації, але у вас є ресурси для паралельних обчислень.
Висновок: прийміть асимптотичні міркування із зерном солі
Δ t
Методи BDF асимптотично найкращі, але в більшості випадків ви, мабуть, не працюєте в такому режимі. Але якщо просторова дискретизація має достатньо точок, методи BDF можуть ефективно паралелізувати в просторі (шляхом паралелізації лінійного рішення) і матимуть найменші функціональні виклики, і, таким чином, робитимуть найкраще. Але якщо ваша дискретизація PDE недостатньо велика, уважно подивіться на неявні методи RK, Rosenbrock, експоненціальні RK тощо. Використання програмного комплексу типу DifferentialEquations.jl, який дозволяє легко переключатися між різними методами, може бути дуже корисним для вас, щоб зрозуміти, який метод найкраще підходить для вашої проблемної області, оскільки в багатьох випадках це не можна знати заздалегідь.
[Якщо у вас є якісь приклади проблем, які ви хочете додати до набору тестів, будь ласка, не соромтеся допомогти щось увійти. Я хочу зберегти дуже всебічний ресурс щодо цього. Я сподіваюся, що всі показники Хайрера у форматі зошита для ноутбука "незабаром" матимуться, і я хотів би інших проблем, які є репрезентативними в наукових галузях. Будь-яка допомога вдячна!]