ПрограммированиеФорумФизика

Физика «на пальцах»: Position-Based подход (комментарии) (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#165
4:38, 17 апр 2013

Решил подготовить своим студентам лабу по сабжу статьи. И, блин, сделал окрытие! Преамбула:

Часто встречал на форуме мнение, что при интегрировании позиции точки лучше учитывать член с ускорением, то есть так:

pos += velocity * dt + acceleration * dt * dt * 0.5f;
velocity += acceleration * dt;

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

velocity += acceleration * dt
pos += velocity * dt

то при постоянном dt получается ну просто зашибись. В общем путём нехитрых преобразований выяснил, что такая формула и является перефразированным position-based, то есть обладает третьим порядком точности. Успех же, желающие могут проверить у себя в проекте, выкинув лишний член и поменяв две строчки местами, на халяву получив +1 к порядку точности.

Ну и плюс по мелочи пофиксил старенькую статью, добавил матан под спойлеры для желающих разобраться в математической стороне происходящего.

#166
11:11, 17 апр 2013

Suslik
> В общем путём нехитрых преобразований выяснил, что такая формула и является
> перефразированным position-based, то есть обладает третьим порядком точности.
> Успех же, желающие могут проверить у себя в проекте, выкинув лишний член и
> поменяв две строчки местами, на халяву получив +1 к порядку точности.
Спасибо, что написал об этом, а то я думал, что у меня одни читы да хаки в физике, а оказалось не совсем :)
Выводить формулы не люблю, использовал второе поскольку нравилось как работает да выглядит довольно логично, а тут вот оно что оказалось.

#167
16:54, 18 апр 2013

Люди открыли для себя верлет лист
v(dt/2)=v(-dt/2)+a(t)*dt
r(dt)=r(0)+v(dt/2)*dt
Которому уже лет 30. ))) Есть и более крутые алгоритмы интегрирования по траекториям. С аккамулэйшн еррор dt^2

#168
16:56, 18 апр 2013

А чтоб учитывать связи и сохранялась энергия - нужно пользоваться алгоритмами SHAKE или RATTLE. А не изобретать собственные нативные методы. )

#169
18:41, 18 апр 2013

bagnis
> А чтоб учитывать связи и сохранялась энергия - нужно пользоваться алгоритмами SHAKE или RATTLE. А не изобретать собственные нативные методы. )
да ради бога. написать адаптивного дорманда-принса седьмого порядка по времени - десяток строчек кода. фишка в том, что position-based позволяет не хранить никаких дополнительных данных - только позиция, скорость(или предыдущая позиция) и ускорение.

SHAKE - алгоритм, который использует gauss-seidel'я для решения связей. метод с итеративной релаксацией бинарных связей, описанный в статье, математически эквивалентен gauss-seidel'ю.

RATTLE(из википедии) - RATTLE works the same way as SHAKE,[17] yet using the Velocity Verlet time integration scheme. (без комментариев)

#170
19:44, 18 апр 2013

Проще говоря, зачем усложнять себе жизнь? Если нужно супер точно, то есть профит от более сложных и точных методов.
Но, если нужна физика для казуалки, то зачем мне там SHAKE, если я могу сделать всё гораздо проще и 90% народу вообще разницы не заметит.

#171
21:04, 18 апр 2013

belK@
> Но, если нужна физика для казуалки, то зачем мне там SHAKE
прочитай сообщение выше. SHAKE - это и есть то, что описано в статье, только с интегратором эйлера. RATTLE - буквально то, что описано в статье. просто они очень любят называть старые методы новыми именами.

#172
14:58, 19 апр 2013

Так верлет лист и хранит тока позицию и скорость смещенные относительно друг друга на полшага. Написана ж формула. )
Между SHAKE и RATTLE, канешн, формально разница в ту самую одну строчку "yet using the Velocity Verlet time integration scheme" на деле означает то, что SHAKE включается после update координат, а RATTLE после update скоростей. Исходят из текущей потребности. Обычно людям нужны координаты. А методы SHAKE очень обширны. И динамические связи этими методами тоже считают. ) По моему мнению - самый крутой алгоритм по учету связей. Быстрый, точный. )

#173
15:01, 19 апр 2013

Кстати, так как я один из разработчиков методов SHAKE (по динамическим связям), можете задавать мИне любые вопросы, на которые я смогу ответить. ))

#174
15:36, 19 апр 2013

И ещё, кстати, самое распространненое название для схемы интегрирования со смещенными относительно друг друга на полшага скоростью и координатами - leap frog. Ценность его дополнительно в том, что им хорошо интегрировать циклические траектории, например, вращение спутника методом Эйлера даст траекторию - спираль. Спутник уйдет с траектории. А leap frog даст круговую орбиту (немножко, правда, отличающуюся от настоящей). )))

#175
19:06, 19 апр 2013

bagnis
> И ещё, кстати, самое распространненое название для схемы интегрирования со смещенными относительно друг друга на полшага скоростью и координатами - leap frog
это тот же самый верле, только переформулированный. то есть все эти схемы математически эквивалентны. то, что они на халяву повышают порядок точности - конечно, здорово, но больше чем третий порядок с ними получить не удастся, так что в нериалтайм методах всё-таки предпочтительнее более точные рунге-кутты.

#176
19:40, 19 апр 2013

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

#177
23:38, 19 апр 2013

Не совсем предпочтительные более точные методы. ПОпытаюсь пояснить. Мы знаем, что leap frog нам даст ошибку dt^2 и это замечательно. ) Это означает, что результаты шкалируются. Если мы знаем, как шкалируется, мы это используем, например, шкалируется ошибка энергии пропорционально dt^2. Мы делаем несколько измерений для разных dt и строим график, и этот график зависимости от dt^2 - прямая. Там де она пересекается с линией dt = 0, там и истинное значение энергии. )) Настоящее. Ваще без всяких ошибок.
Вот такая херня, малята. ))
Вот поэтому 99.9% всех симуляций в молекулярной физике - leap frog.

#178
23:54, 19 апр 2013

bagnis
чтобы энергию вычислить, можно вообще ничего не "симулировать"(для справки это слово в русском языке обозначает вовсе не то, что тебе бы хотелось) - её обычно можно просто вычислить аналитически. а более сложную величину вроде фазовых координат таким способом вычислить не удастся.

> Вот поэтому у нас 99.9% всех симуляций в молекулярной физике - leap frog.
fxd, не благодари.

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

#179
0:46, 20 апр 2013

Ну, не всегда можно вычислить что-то аналитически. Иначе бы не было смысла в молекулярной динамике. Люди запускают там ансамбль из многих частиц и затем меряют энергию системы, как сумму энергий каждой частицы. Кинетическая, например, дает температуру. Про точность я уже сказал. Если задача шкалируется, то все равно чем считать. Можно отшкалировав, найти точные динамические параметры.
Могу на пальцах. Допустим я методом leap frog посчитал орбиту. Эта орбита не точная. Ее отклонение от настоящей - пропорционально квадрату шага интегрирования. Но мне все равно. Я ещё раз считаю ту же орбиту с другим шагом. Строю график зависимости радиуса орбиты от шага. И получаю истинную орбиту при шаге ноль.
6-7 порядок для молекулярной динамики - прошу ссылочку. DL POLY, GROMAX или какие известные пакеты используют 6-7 порядок? ) Я за все годы ни разу не сталкивался с таким. )
Какая-то тенденция скатывания темы в троллинг. )

Страницы: 18 9 10 11 12 13 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.