Плюси і мінуси різних інтеграторів [закрито]


29

Створюючи такі речі, як фізика в іграх, вам потрібен інтегратор. Я бачив, як інтеграція Верлета згадувала кілька місць як чудову альтернативу інтеграції Ейлера. Наприклад, у відомому документі Томаса Якобсена . Однак у цій статті Глен Фідлер пише:

Замість того, щоб познайомити вас з величезним набором різних інтеграторів, які існують, я збираюся вирішити погоню та йти прямо до кращого. Цей інтегратор називається інтегратором порядку 4 Runge Kutta aka RK4.

Так що, мабуть, немає срібної кулі. Які плюси і мінуси різних інтеграторів? Що стосується простоти, швидкості, точності, стабільності і т. Д. Який інтегратор найбільш підходить для тих видів ігор? Коли ви використовуєте Verlet, RK4 чи інші? Чи варто коли-небудь використовувати Euler?


Там в SO відповідь ви можете фантазії stackoverflow.com/questions/2769466 / ...
teodron

Дякуємо за посилання Я про це вже знаю.
paldepind

Відповіді:


27

Плюси і мінуси обох методів:

Плюси RK4:

  1. точність (завдяки кращій серії наближення дає точність 4-го порядку)
  2. штучне / вроджене спонукання (дещо подібне до неявних методів це робить) додає стабільності (тоді як простий крок Ейлера не робить - насправді це робить навпаки, вводячи привидну енергію, яка накопичує і може занурити систему в хаос)

Мінуси RK4:

  1. Витрати на обчислення: хоча він не такий складний порівняно з неявними методами чи гібридними методами IMEX, RK4 в 4 рази дорожче, ніж явний Ейлер, оскільки вимагає набагато більше оцінок функцій. Це показано при націлюванні на оптимізацію кровотоку.
  2. все ще нестабільна: залежно від типів сил, RK4 може бути таким же нестабільним, як і Ейлер. В середньому, RK4 трохи стабільніший і прагне скористатися цією вигодою з наділених «навичок» демпфування.
  3. Несимплектичне: чисельне затухання постає із вартістю - ви не можете імітувати системи, де енергія / об'єм / тощо. втрата не повинна застосовувати видимий ефект з часом (наприклад, Молекулярна динаміка, сили, отримані в потенційному полі, варіаційні проблеми)

Плюси Verlet:

  1. один-два рази складність кроку Ейлера (залежно від вашого аромату Verlet: положення чи швидкість).
  2. симплектичний: зберігає внутрішню енергію
  3. точність другого порядку: багато ігор не вимагають високої точності результатів з плаваючою точкою, а другий порядок є більш ніж приємним для очей в ігровому сценарії (плюс: його використовували в моделюванні сценарію, що не стосується ігор, коли його «виявили», так це не так погано)

Мінуси Verlet:

  1. стабільний, але все-таки: мабуть, найкращий явний метод з точки зору стабільності. Він, як правило, перемагає, коли в систему додаються жорсткі обмеження, що дозволяє зменшити болі в голові при впровадженні прогнозованих обмежень у динамічних двигунах, що базуються на положенні. Він починає нескінченність, якщо система турбує великі зовнішні сили і не додається демпфірування / тертя. Незважаючи на це, існують певні числові обмеження щодо того, наскільки великі можуть бути внутрішні (пружинні) сили, але вони в середньому вище, ніж те, що може зробити RK4
  2. нижча точність: не корисно, якщо ви хочете оцінити високу точність
  3. вимагає, в середньому, менших часових кроків, ніж RK4 для деяких моделювання (RK4 виграє як від його точності, так і від внутрішнього демпфування)

Використання одного над іншим залежить від сценарію. Якщо жорсткість і великі зовнішні сили та віртуальні енергії є проблемою, то розгляньте інші методи, що мають в описі / заголовку слово "неявне".


Зауважимо, деякі автори / книги використовують термін напівпредмечений Ейлер для фактичного явного інтегратора Ейлера, який називається симплектичним методом Ейлера (або Ейлера Кромера), з якого насправді походить Верлет. Верлет також деякі люди називають "стрибковим методом". Верлейт швидкості та метод середини досить схожі з моменту оцінки на етапі часуt + 0.5*dtнеобхідний для кроку, що нагадує прогноктор-коректор. Методи IMEX (неявні-явні) також використовуються для назви двох подібних, але не тотожних підходів: розділити обчислення на жорсткі та не жорсткі частини та використовувати на них різні інтегратори (явні для не жорстких, неявні для жорстких) АБО вирішити для швидкість із неявним кроком оновлення та явним чином оновити позицію (це гібридний напів неявний метод, що попадає на клас методів IMEX, оскільки жорсткі частини найбільше впливають на обчислення прискорення). Неявні методи більш громіздкі і вимагають вирішення системи одночасних нелінійних рівнянь для всієї конфігурації. Неявні методи застосовуються для деформованих тіл і зазвичай не застосовуються для з’єднаних жорстких тіл.

Як зазначено в одному з коментарів, якщо ви можете, не використовуйте Euler. Використовуйте або метод середини, напів неявний Ейлер, або, за той же рахунок, позицію-Верлет. Усі вони мають трохи більшу точність та чутливішу стабільність, ніж явний інтегратор Ейлера.

Рекомендоване читання міні-порівняння:

http://wiki.vdrift.net/Numerical_Integration


Одне зауваження: обидва варіанти Verlet можна кодувати, щоб оцінити прискорення лише один раз за оновлення кадру.
теодрон

1
Дякую за відповідь! Досить те, що я шукав.
paldepind

3

Реалізація Ейлера, як правило, дуже швидка, але набагато менш стабільна, ніж альтернативи. Runge Kutta повільніше, ніж Ейлер, але набагато більш точний і стабільний.

Я не дуже обізнаний у інтеграції Верле, тому я не маю уявлення, як це складеться проти Ейлера та Рунге Кутти.

Якщо вам потрібні ваші імітації, щоб бути більш точними або навіть чисельними доказами, Runge Kutta - кращий з двох.

Якщо вам потрібна швидка фізика з низькими витратами для простої гри, то Ейлер - кращий вибір.


2
Runge Kutta - НЕ БІЛЬШЕ СТАБІЛЬНОГО, ніж EULER. Це все-таки Ейлер, робиться 8 разів за кадр замість 1 (з трохи прогнозування та виправлення, але все-таки ..) forums.evilmana.com/game-programming-theory/…
teodron

2
Залежить від того, що потрібно, щоб бути "стабільним". можливо, я мав би розробити, кутта ружа чисельно стабільніше, ніж ейлер. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Тимофій Гроот

3
Наскільки я можу зрозуміти, немає причини, чому Верлет був би повільнішим за Ейлера. Тож порівняно з Верлетом Ейлер не має переваги в швидкості, і він все ще набагато точніший і стабільніший. Отже, я думаю, що ваше твердження, що Ейлер найкраще для швидкої та простої фізики, є невірним.
paldepind

4
Ось блогпост, який показує величезну різницю в точності: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
На останньому рівні «Трансформаторів» (PS2, 2004) в польовій моделі, яку я реалізував, використовувався інтегратор Ейлера, який я оновлював 2000 разів за кадр. (Звичайно, це була досить реалістична модель польоту, яка розганялася до надзвукових швидкостей і розміщувалася всередині зігнутого гравітаційного поля, тому її вимоги до стабільності були досить інтенсивними. І на цьому рівні не так багато інтенсивно працюючих процесорів, Мені вдалося відійти від цього). Додавати зайві ітерації в Euler часто набагато простіше, ніж перейти на інший ітератор.
Тревор Пауелл

1

Перш за все, я думаю, що вам слід користуватися Ейлером, поки ви не відчуєте прямої необхідності використовувати більш просунуту схему інтеграції. Це швидко і легко здійснити.

Якщо у вас виникають проблеми зі стабільністю, такі як системи пружин, які ніколи не впираються або якщо для моделювання потрібен високий рівень точності, починайте експериментувати з іншими.

Я не бачив згаданого вище методу середини, який дуже простий у здійсненні та вимагає лише одного додаткового кроку інтеграції.


1
Я думаю, що Верлет - це просто простий і легкий у здійсненні
paldepind

Я ніколи його не використовував, але, наскільки я розумію, ти, мабуть, правильно.
Mikael Högström
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.