Чому RK4 краще, ніж інтеграція Ейлера? [зачинено]


20

Наприкінці цих чудових слайдів автор порівнює всі представлені інтегратори. Так чи інакше, всі вони випадають за винятком вдосконаленої інтеграції Euler та інтеграції Runge Kutta 4 , які обидва проходять усі тести.

Думаю, слід зазначити, що я працюю над 2D грою, яка не дуже фізична. Мені просто цікаво, де вдосконалена інтеграція Ейлера не вийде, і замість цього потрібно буде використовувати RK4.

Моя гра складається в основному з простої сили тяжіння (стрибки і падіння), руху по осях X і Y, а також обмеження зіткнення коробки. Чи варто впроваджувати RK4 чи буде вдосконаленим Euler достатньо? Я бачу багато дискусій, де користувачі Euler Integration піддаються кримінальній відповідальності, але, як я бачу, вдосконалений Ейлер є однозначним у простих двовимірних питаннях. Я думаю, що це теж було б швидше.


офтопік, але ці області чудові слайди, дуже зрозуміло з прикладами і все. Дякуємо за це посилання!
Рой Т.

Якщо це насправді поза темою, це, ймовірно, добре підходить для обчислювальної науки .
David Z

Також: Виправлена ​​часом інтеграція верлетів - схожа на вдосконалений Ейлер: занадто ліниво, щоб зрозуміти, чи точно так само. TCV чудовий тим, що ви можете бути поблажливими до вашого фіксованого кроку часу (інші інтегратори хочуть гарантовано встановити фіксований крок часу).
Джонатан Дікінсон

1
Неможливо редагувати: я бачу, що він це згадує. Я не впевнений, чи є його реалізація помилкою з точки зору вимог щодо початкових умов, як зазначено у статті: але я ніколи не бачив цього питання тяжкості з моєю реалізацією TCV, якщо правильно розрахував початкові умови.
Джонатан Дікінсон

Відповіді:


15

Я особисто віддаю перевагу Velocity Verlet для більшості симуляцій. На мій досвід цього методу, він цілком підходить для досить жорстких рівнянь. Схоже, цей "вдосконалений метод Ейлера" досить схожий на швидкість Verlet і покладається на клас методів інтеграції, відомий як предиктор-коректор . На сьогоднішній день ви можете прочитати багато речей про ці методи, починаючи з "Великих кроків у моделюванні тканини" Девіда Барафа, де справді світить сила неявних методів. Їх падіння полягає в тому, що ви:

  1. повинні наближати якобійців чи гессіанців, а потім,
  2. обчислити неабияку кількість обернених матриць на кадр.

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

Деякі додаткові ресурси ви можете переглянути:

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

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


1
+1 Це насправді була справді якісна відповідь за змістом: але це було занадто важко для засвоєння (стінка тексту). Я виявив, що гарне форматування завжди допомагає отримати голоси. Я покращив це, і, сподіваюся, ви отримаєте ваші голоси, які ви заслужили.
Джонатан Дікінсон

Спасибі Джонатане, я це зробив поспішно, не зважаючи на процедуру "дружнього до читачів", але мені довелося згадати ті кілька джерел, оскільки вони справді дуже часто використовуються навіть сьогодні.
теодрон

10

Питання: Навіщо використовувати розширений Runge Kutta?
A: Тому що це дуже точно.

З: Чому ні?
Відповідь: Оскільки ви робите гру, і дуже точний двигун фізики не має значення, він повинен бути достатньо хорошим, щоб обдурити гравця.

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

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

velocity += 0.5 * acceleration;
position += velocity;
velocity += 0.5 * acceleration;

Презентація не показує, як керувати зіткненнями, щоб об'єкти не вийшли за межі. Просте рішення цієї проблеми - використовувати високу частоту оновлення. Більш складним, але потенційно ефективнішим рішенням є переміщення предметів назад під час зіткнення, точна реалізація залежить від бажаної фізичної поведінки.


1
+1 за "обдурювання гравця" - але в мене особисто "дуже прості" системи вибухають через інтеграцію ейлерів.
Джонатан Дікінсон

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

О, це на деяких дійсно старих речах VB6 (коли мені було буквально близько 14), перш ніж я дізнався про RK / Verlet - у мене навіть коду вже немає: що дає високу довіру до того, що це могло бути щось інше в суміші :).
Джонатан Дікінсон

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

1

У презентації є помилка. Метод, який ведучий називає "вдосконаленим Ейлером" - це власне метод Velocity Verlet!

Дивіться тут для більш авторитетного джерела: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html

Також такі самі рівняння є у Вікіпедії .

Поширеним негайним вдосконаленням методу Ейлера є метод Midpoint, який, мабуть, мав на увазі ведучий, але в кінцевому рахунку помилився з швидкістю Верлету як з покращеним Ейлером. Єдине, що відрізняється між методом Midpoint і Velocity Verlet, полягає в тому, що швидкість - це середня величина останнього та наступного прискорень, а не просто залежала від останнього прискорення.

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