Шукаєте Runge-Kutta 8-го порядку в C / C ++


10

Я хотів би використовувати метод Runge-Kutta 8-го порядку (89) у застосуванні небесної механіки / астродинаміки, написаному на C ++, за допомогою машини Windows. Тому мені цікаво, чи хтось знає хорошу бібліотеку / програму, яка є документально підтвердженою та вільною для використання? Це нормально, якщо це написано на C, якщо не очікується жодних проблем із компіляцією.

Поки що я знайшов цю бібліотеку (міматліб) . Код здається нормальним, але я не знайшов жодної інформації щодо ліцензування.

Чи можете ви допомогти мені, розкривши деякі альтернативи, які ви могли б знати і відповідати моїй проблемі?

EDIT:
Я бачу, що насправді не так багато наявних вихідних кодів C / C ++, як я очікував. Тому версія Matlab / Octave також буде нормальною (все-таки має бути вільною у використанні).

Відповіді:


8

І Наукова бібліотека GNU (GSL) (C), і Boost Odeint (C ++) мають методи Runge-Kutta 8-го порядку.

Обидва є відкритим джерелом, і під Linux та mac вони повинні бути безпосередньо доступними у менеджера пакунків. Під вікнами вам, мабуть, буде простіше використовувати Boost, а не GSL.

GSL публікується під ліцензією GPL, а Boost Odeint під ліцензією Boost.

Редагувати: Гаразд, у Boost Odeint НЕ є метод Runge-Kutta 89, лише 78, але він дає рецепт створення довільних кроків Runge-Kutta.

Однак методи 8-го порядку досить високі, і, швидше за все, надмірність для вашої проблеми.

Принц-Дорманд відноситься до конкретного виду Рунге-Кутта і не має прямого відношення до порядку, але найпоширенішим є 45. Matlabs ode45, що є їх рекомендованим алгоритмом ODE - це реалізація Prince-Dormand 45. Це той самий алгоритм, що і в Boost Odeint Runge_Kutta_Dopri5 .


1
Дякую за відповідь Добре, що зараз бентежить, я ще раз переглянув Boost Odeint, перш ніж запитати тут, і знайшов лише "runge_kutta_fehlberg78". Це правильна річ? Насправді я не знаю різниць між методами, коли використовуюсь на практиці, але я шукав RK89 (званий також Dormand-Prince, коли я шукаю в Інтернеті). Чи можете ви прокоментувати чи розширити свою відповідь щодо цього питання? Дякую.
Джеймс C

Оновлений пост, щоб відповісти на ваші запитання. Принц-Дорманд 45 швидше за все гарно вирішить ваші проблеми.
Л.Клевін

15

Якщо ви використовуєте небесну механіку протягом тривалих масштабів, використання класичного інтегратора Runge-Kutta не збереже енергію. У цьому випадку, можливо, було б краще використовувати симплектичний інтегратор. Boost.odeint також реалізує симплектичну схему Runge-Kutta четвертого порядку, яка б працювала краще протягом тривалих часових інтервалів. Наскільки я можу сказати, GSL не реалізує жодних симплектичних методів.


Дякую за відповідь Чи може симплектичний Runge-Kutta четвертого порядку давати кращі результати, ніж RKF78, якби він використовувався із супутниками Землі (низька орбіта, а також орбіта глибшого космосу), можливо, протягом періоду 1-3 орбіт?
Джеймс С

@JamesC Так. У тривалий період симплектичний метод набагато кращий.
eccstartup

@eccstartup - Що б ви вважали довгим періодом тут? Тому що це може бути до тих пір, як одна орбіта планети навколо Сонця, або кілька орбіт погодного супутника навколо Землі тощо.
Джеймс C

@JamesC Я не спостерігав такої великої проблеми. Але для моїх модельних проблем, з розрахунку багатьох орбіт, симплектичні методи дають дуже досконалі орбіти.
eccstartup

Отже, це порада запрограмувати власну версію неявного методу Runge-Kutta, яка включає в себе безліч симплектичних методів настільки ж вищого порядку, як ви хочете.
eccstartup

4

підсумовуючи деякі моменти:

  1. Якщо це довгострокова інтеграція недисапативної моделі, то симплектичний інтегратор - це те, що ви шукаєте.
  2. В іншому випадку, оскільки це рівняння руху, методи Runge-Kutta Nystrom будуть більш ефективними, ніж перетворення в систему першого порядку. Існують методи RKN високого порядку завдяки ДП. Є деякі реалізації, як, наприклад, у Julia вони задокументовані, і ось такий MATLAB .
  3. Методи Runge-Kutta високого замовлення потрібні лише в тому випадку, якщо ви хочете вирішити високу точність. Якщо це нижчі допуски, то РК 5-го порядку, швидше за все, буде швидшим (за ту ж помилку). Найкраще, якщо вам потрібно це часто вирішувати, - це протестувати купу різних методів. У цьому наборі орієнтирів щодо проблем із 3-ма тілами ми бачимо, що (за тією ж помилкою) методи RK високого порядку є лише незначним покращенням швидкості, хоча як помилка -> 0 ви бачите, що поліпшення вже йде до> 5x проти Dormand -Prince 45 ( DP5), коли ви дивитесь на чотири цифри точності (допуски є набагато нижчими для цього, хоча допуски - це лише бальний знак у будь-якій проблемі). Коли ви допустите допуски ще нижче, поліпшення методу РК високого порядку зростає, але, можливо, вам доведеться почати використовувати більш високі показники точності.
  4. Алгоритм порядку Дорманд-Прінс 7/8 має іншу таблицю 8-го порядку, ніж метод DP853 методу Хайрера dop853та DifferentialEquations.jl DP8(які однакові). Останній метод 853 не може бути реалізований у стандартній таблиці-версії методу Runge-Kutta, оскільки його оцінка помилок нестандартний. Але цей метод набагато ефективніший, і я б не рекомендував використовувати навіть старі методи Фельберга 7/8 або DP 7/8.
  5. Для методів РК високого порядку, золотим стандартом є методи Вернера "Ефективні" . Це відображається у орієнтирах, які я пов'язав. Ви можете кодувати їх у Boost самостійно або використовувати один з 2 пакетів, які реалізують їх, якщо ви хочете, щоб це було простіше (Mathematica або DifferentialEquations.jl).

2

Я хотів би додати, що хоча те, що пропонує Джефф Оксберрі для довгострокової інтеграції (використовуючи симплектичні інтегратори), є правдою, у деяких випадках це не спрацює. Більш конкретно, якщо у вас є дисипативні сили, ваша система більше не зберігає енергію, і тому в цьому випадку ви не можете вдатися до симплектичних інтеграторів. Особа, яка задала питання, говорила про низькі орбіти Землі, і такі орбіти виявляють велику кількість атмосферного затягування, тобто дисипативної сили, яка перешкоджає використанню таких симплектичних інтеграторів.

У цьому конкретному випадку (а також у випадках, коли ви не можете використовувати / не маєте доступу до / не хочете використовувати симплектичні інтегратори), я рекомендую використовувати інтегратор Bulirsch-Stoer, якщо вам потрібна точність та ефективність протягом тривалих часових шкал. Це добре працює на досвіді, а також рекомендується Числовими рецептами (Press et al., 2007).


Ні, не рекомендую числові рецепти. Тим більше, що в більшості випадків Burlirsch-Stoer не рекомендується. Це добре відома проблема з книгою. Ознайомтеся з купою рефлексій провідних дослідників у цій галузі тут: uwyo.edu/buerkle/misc/wnotnr.html . Якщо ви хочете орієнтири щодо цього, дивіться першу книгу Хайрера, де ви побачите, що BS майже ніколи не справляється. Вищий порядок є більш ефективним лише тоді, коли помилки є достатньо низькими, і ми (та інші) зробили бенчмаркінг, щоб доволі послідовно показати, що він ефективний лише для точності субплаваючої точки.
Кріс Ракаукас

Я не можу говорити занадто багато за NR, оскільки я використовував його здебільшого для ODE, але мені здається, що скарги на сторінці, на яку ви посилаєтеся, є старими і були адресовані авторами NR у своїй відповіді (кінець сторінки) але це поза темою. Щодо довгострокової інтеграції орбіт з високою точністю (скажімо, 13-14 цифр), про що я згадував у своїй відповіді, то давно доведено, що методи екстраполяції працюють добре (див. Розділ Montenbruck & Gill про числову інтеграцію). Більш недавні статті також використовують це, і це довело мені та іншим надійний та ефективний метод.
viiv

M&G лише тестує його на dop853 та більш сучасних методах RK високого порядку, таких, як завдяки Verner, набагато ефективнішими. M&G також, здається, вимірює лише використання функціональних оцінок, які є слабким показником часу. Він також не встигає проти методів Runge-Kutta Nystrom, які спеціально призначені для ODE 2-го порядку і є більш ефективними, ніж методи RK першого порядку, застосовані до другого порядку зовсім небагато. На 13-14 цифрах BS, мабуть, є конкурентоспроможним у більшості проблем, але це далеко не очевидний вибір, і я не бачив діаграми точності роботи з останніми методами, які не погоджуються з цим.
Chris Rackauckas

M&G перевіряють RKN на RK, а BS та інші на RKN (стор. 123-132 та 151-154) і кажуть, що вони є найбільш ефективними з методів RK (не включаючи Вернера, хоча вони цитують його). BS показав свою ефективність у 13-14 цифр, що було моїм твердженням. Я бачив, що це перевірено на dop853, ABM (12), Taylor та стандарт RK8, і це добре. Я мушу визнати, що не бачив перевіреного RKN, але з того, що я бачу з M&G, наприклад, недалеко від FILG11. Я щиро зацікавлений у РК Вернера і перегляну ваші посилання вище. Чи є у вас папір, який перевіряє їх усі?
viiv

Я повернувся назад і повторно запустив купу еталонів на DiffEqBenchmarks.jl, і я odexне прагнув до ярмарку. Так що, принаймні, для ODE 1-го порядку та для допусків >=1e-13, екстраполяція, здається, не працює добре, і зазвичай це навіть не близько. Це узгоджується із заявою вище.
Кріс Ракаукас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.