Почему RK4 лучше, чем интеграция Эйлера? [закрыто]

20

В конце этих замечательных слайдов автор сравнивает все представленные интеграторы. Так или иначе, все они терпят неудачу за исключением Improved Эйлера интеграции и Рунге - Кутта 4 интеграции , которые оба проходят все испытания.

Полагаю, мне следует упомянуть, что я работаю над 2D-игрой, которая не очень интенсивна по физике. Мне просто любопытно, где не будет улучшенной интеграции Эйлера, и вместо этого придется использовать RK4.

Моя игра состоит в основном из простой гравитации (прыжки и падения), движения по осям X и Y и столкновения ограничивающего прямоугольника. Стоит ли внедрять RK4 или будет достаточно Improved Euler? Я вижу много дискуссий, где пользователи Euler Integration наказываются, но из того, что я вижу, Improved Euler является эквивалентом в простых вопросах 2D. Я думаю, что это также будет быстрее.

Джон Тайлер
источник
Оффтоп, но в этих областях отличные слайды, очень понятные примеры и все. Спасибо за эту ссылку!
Рой Т.
Если это действительно не по теме, то это, вероятно, подойдет для Computational Science .
Дэвид Z
Кроме того: Исправленная по времени интеграция Verlet - похожа на Improved Euler: слишком ленива, чтобы понять, если она точно такая же. TCV хорош, потому что вы можете быть мягкими с вашим фиксированным временным шагом (другие интеграторы хотят гарантированный фиксированный временной шаг).
Джонатан Дикинсон
1
Не могу редактировать: я вижу, он упоминает об этом. Я не уверен, что его реализация содержит ошибки с точки зрения требований к начальным условиям, описанным в статье: но я никогда не видел проблемы гравитации с моей реализацией TCV, если я правильно рассчитал начальные условия.
Джонатан Дикинсон

Ответы:

15

Я лично предпочитаю Velocity Verlet для большинства симуляций. По моему опыту с этим методом, он вполне подходит для довольно жестких уравнений. Кажется, что этот «улучшенный метод Эйлера» очень похож на метод Velocity Verlet и основан на классе методов интеграции, известных как предиктор-корректор . В наши дни вы можете многое прочитать об этих методах, начиная с Дэвида Бараффа «Большие шаги в моделировании одежды», где сила неявных методов действительно сияет. Их падение в том, что вы:

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

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

Некоторые дополнительные ресурсы, которые вы можете посмотреть:

Якобсен - своего рода гений, который придумал такую ​​простую идею для претенциозной задачи (его специальность - Криптография, если не ошибаюсь, но ему удалось доказать математическую эквивалентность его метода классу итерационного алгоритма Гаусса-Зейделя, который сходится ). Для простоты, сначала сделайте это, прежде чем углубляться в неявные методы.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ : Недавно я получил статью по этому вопросу об использовании явных интеграторов для моделирования мягких или полужестких тел и об их влиянии на производительность и качество. Этот документ должен служить руководством для выбора определенного интегратора, в зависимости от сценария.

teodron
источник
1
+1 Это был действительно очень качественный ответ с точки зрения содержания, но его было слишком сложно переварить (стена текста). Я обнаружил, что хорошее форматирование всегда помогает набирать голоса. Я улучшил его, и, надеюсь, вы получите голоса, которые вы заслуживаете.
Джонатан Дикинсон
Спасибо Джонатану, я сделал это поспешно, не обращая внимания на процедуру, удобную для читателя, но я должен был упомянуть эти несколько источников, поскольку они действительно очень часто используются даже сегодня).
Теодрон
10

В: Зачем использовать продвинутую Рунге Кутту?
A: Потому что это очень точно.

Q: почему нет?
A: Поскольку вы делаете игру, и очень точный физический движок не имеет значения, он просто должен быть достаточно хорош, чтобы обмануть игрока.

Кстати, если вы столкнулись с сильным демпфированием при столкновении, как это делает большинство платформеров, простой Эйлер - это нормально.

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

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

В презентации не показано, как обрабатывать столкновения, чтобы объекты не выходили за пределы границ. Простое решение этой проблемы - использовать высокую частоту обновления. Более сложное, но потенциально более эффективное решение - переместить объекты назад во время столкновения, точная реализация зависит от желаемого поведения физики.

AAAAAAAAAAAA
источник
1
+1 за «обмануть игрока» - но у меня лично «очень простые» системы взорвались из-за интеграции с euler.
Джонатан Дикинсон
@JonathanDickinson Я бы сказал, что это не из-за интеграции Эйлера, а скорее из-за сочетания обстоятельств, интеграция Эйлера является лишь одним из них. Если у вас есть пример, я уверен, что смогу найти способ избежать взрыва систем.
aaaaaaaaaaaa
О, это на некоторых действительно старых вещах VB6 (когда мне было буквально около 14 лет) до того, как я узнал о RK / Verlet - у меня даже больше нет кода: это подтверждает, что это могло быть что-то еще в смеси :).
Джонатан Дикинсон
1
Полагаю, я должен добавить, что как только вы начинаете возиться с притяжением между объектами, а не просто с гравитацией, мне кажется разумным активизировать метод интеграции, это может не быть строго необходимым, но если вы получаете вычислительную мощность Единственным недостатком является немного более сложный код.
aaaaaaaaaaaa
1

В презентации есть ошибка. Метод, называемый докладчиком «Улучшенный Эйлер», на самом деле является методом Velocity Verlet!

Смотрите здесь для более авторитетного источника: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numeric_ode/node5.html

Также те же уравнения есть в Википедии .

Общее немедленное улучшение по сравнению с методом Эйлера - это метод Midpoint, который, вероятно, имел в виду докладчик, но в итоге принял Velocity Verlet как улучшенный Эйлер. Единственное различие между методом Midpoint и Velocity Verlet состоит в том, что скорость является средним значением последнего и следующего ускорения, а не просто зависит от последнего ускорения.

Шиталь шах
источник