WikiDer > Интеграция Верле
Интеграция Верле (Французское произношение:[vɛʁˈlɛ]) - численный метод, используемый для интегрировать Ньютона уравнения движения.[1] Часто используется для расчета траектории частиц в молекулярная динамика моделирование и компьютерная графика. Впервые алгоритм был использован в 1791 г. Деламбре и с тех пор много раз открывался заново, в последний раз Лу Верле в 1960-х годах для использования в молекулярной динамике. Он также использовался Коуэлл и Кроммелин в 1909 г. для вычисления орбиты Комета Галлея, и по Карл Стёрмер в 1907 г. для изучения траекторий электрических частиц в магнитное поле (поэтому его также называют Метод Штёрмера).[2]Интегратор Verlet обеспечивает хорошую числовая стабильность, а также другие свойства, важные в физические системы Такие как обратимость времени и сохранение симплектической формы на фазовом пространстве, без значительных дополнительных вычислительных затрат по сравнению с простым Метод Эйлера.
Basic Störmer – Verlet
Для дифференциальное уравнение второго порядка типа с начальными условиями и , приближенное численное решение в то время с размером шага можно получить следующим способом:
- набор ,
- за п = 1, 2, ... итерация
Уравнения движения
Уравнение движения Ньютона для консервативных физических систем имеет вид
или индивидуально
куда
- т время,
- - ансамбль вектора положения N объекты,
- V - скалярная потенциальная функция,
- F это отрицательный градиент потенциала, давая ансамбль сил на частицы,
- M это матрица масс, обычно по диагонали с блоками массой для каждой частицы.
Это уравнение для различных вариантов потенциальной функции V, можно использовать для описания эволюции различных физических систем, начиная с движения взаимодействующие молекулы к орбита планет.
После преобразования, чтобы привести массу в правую сторону и забыть о структуре множества частиц, уравнение можно упростить до
с некоторой подходящей вектор-функцией А представляет позиционно-зависимое ускорение. Обычно начальное положение и начальная скорость также даны.
Интегрирование Верле (без скоростей)
Чтобы дискретизировать и численно решить эту проблема начального значения, временной шаг выбирается, а последовательность точек отбора проб считается. Задача - построить последовательность точек которые внимательно следят за пунктами на траектории точного решения.
Где Метод Эйлера использует форвардная разница приближения к первой производной в дифференциальных уравнениях первого порядка, интегрирование Верле можно рассматривать как использование центральная разница приближение ко второй производной:
Интеграция Верле в форме, используемой как Метод Штёрмера[3] использует это уравнение для получения следующего вектора положения из двух предыдущих без использования скорости как
Ошибка дискретизации
Временная симметрия, присущая этому методу, снижает уровень локальных ошибок, вносимых в интегрирование дискретизацией, за счет удаления всех членов нечетной степени, здесь члены в степени три. Локальная ошибка определяется количественно путем вставки точных значений в итерацию и вычисляя Разложения Тейлора вовремя вектора положения в разных направлениях времени:
куда это позиция, скорость, ускорение, и то придурок (третья производная положения по времени).
Добавление этих двух расширений дает
Мы можем видеть, что члены первого и третьего порядка из разложения Тейлора сокращаются, что делает интегратор Верле на порядок более точным, чем интегрирование простым разложением Тейлора.
Следует с осторожностью относиться к тому факту, что ускорение здесь вычисляется из точного решения, , тогда как в итерации он вычисляется в центральной точке итерации, . При вычислении глобальной ошибки, то есть расстояния между точным решением и аппроксимационной последовательностью, эти два члена не компенсируются точно, что влияет на порядок глобальной ошибки.
Простой пример
Чтобы получить представление о связи локальных и глобальных ошибок, полезно изучить простые примеры, где точное и приближенное решение можно выразить в явных формулах. Стандартный пример для этой задачи - экспоненциальная функция.
Рассмотрим линейное дифференциальное уравнение с постоянным ш. Его точные базовые решения: и .
Применение метода Штёрмера к этому дифференциальному уравнению приводит к линейному отношение повторения
или же
Ее можно решить, найдя корни его характеристического многочлена. Это
Базисными решениями линейной рекуррентности являются и . Чтобы сравнить их с точными решениями, вычисляются разложения Тейлора:
Частное этого ряда с экспоненциальной начинается с , так
Отсюда следует, что для первого базисного решения ошибка может быть вычислена как
То есть, хотя локальная ошибка дискретизации имеет порядок 4, из-за второго порядка дифференциального уравнения глобальная ошибка имеет порядок 2 с константой, которая растет экспоненциально во времени.
Запуск итерации
Обратите внимание, что в начале итерации Верле на шаге , время , вычисление , уже нужен вектор позиции вовремя . На первый взгляд, это может вызвать проблемы, потому что начальные условия известны только в начальный момент времени. . Однако от них ускорение известно, и подходящее приближение для положения на первом временном шаге можно получить, используя Полином Тейлора второй степени:
Тогда ошибка на первом временном шаге имеет порядок . Это не считается проблемой, потому что при моделировании на большом количестве временных шагов ошибка на первом временном шаге составляет лишь пренебрежимо малую величину от общей ошибки, которая во время имеет порядок , как для расстояния векторов положения к Что касается расстояния разделенных разностей к . Более того, чтобы получить эту глобальную ошибку второго порядка, начальная ошибка должна быть не менее третьего порядка.
Непостоянная разница во времени
Недостатком метода Штёрмера – Верле является то, что если временной шаг () изменяется, метод не приближает решение дифференциального уравнения. Это можно исправить с помощью формулы[4]
Более точный вывод использует ряд Тейлора (до второго порядка) при на время и получить после устранения
так что формула итерации принимает вид
Вычисление скоростей - метод Штёрмера – Верле
Скорости явно не указываются в основном уравнении Штермера, но часто они необходимы для расчета определенных физических величин, таких как кинетическая энергия. Это может создать технические проблемы в молекулярная динамика моделирования, потому что кинетическая энергия и мгновенные температуры во времени не может быть рассчитан для системы, пока не будут известны позиции . Этот недостаток можно устранить с помощью скорость Верле алгоритма или путем оценки скорости с использованием условий положения и теорема о среднем значении:
Обратите внимание, что этот член скорости на шаг отстает от члена положения, поскольку он предназначен для скорости в момент времени , нет , означающий, что это приближение второго порядка к . Используя тот же аргумент, но уменьшив временной шаг вдвое, это приближение второго порядка к , с .
Можно сократить интервал, чтобы приблизить скорость во времени ценой точности:
Скорость Верле
Связанный и более часто используемый алгоритм - это скорость Верле алгоритм,[5] аналогично метод чехарда, за исключением того, что скорость и положение вычисляются при одном и том же значении временной переменной (как следует из названия, чехарда не делает). Здесь используется аналогичный подход, но явно учитывается скорость, решая проблему первого временного шага в базовом алгоритме Верле:
Можно показать, что ошибка скорости Верле того же порядка, что и в основном Верле. Обратите внимание, что алгоритм скорости не обязательно требует больших затрат памяти, потому что в базовом Verlet мы отслеживаем два вектора положения, тогда как в скорости Verlet мы отслеживаем один вектор положения и один вектор скорости. Стандартная схема реализации этого алгоритма:
- Рассчитать .
- Рассчитать .
- Производный от потенциала взаимодействия с использованием .
- Рассчитать .
Исключив полушаговую скорость, этот алгоритм можно сократить до
- Рассчитать .
- Производный от потенциала взаимодействия с использованием .
- Рассчитать .
Обратите внимание, однако, что этот алгоритм предполагает, что ускорение зависит только от позиции и не зависит от скорости .
Можно отметить, что долгосрочные результаты скорости Верле и аналогичной чехарды на порядок лучше, чем у полунеявный метод Эйлера. Алгоритмы практически идентичны вплоть до сдвига скорости на половину временного шага. Это легко проверить, повернув вышеуказанный цикл, чтобы начать с шага 3, а затем заметить, что член ускорения на шаге 1 может быть исключен путем объединения шагов 2 и 4. Единственная разница в том, что средняя скорость в скорости Верле считается конечной скоростью. в полунеявном методе Эйлера.
Глобальная ошибка всех методов Эйлера - первого порядка, тогда как глобальная ошибка этого метода аналогична метод средней точки, второго порядка. Кроме того, если ускорение действительно является результатом сил в консервативном механическом или Гамильтонова система, энергия приближения по существу колеблется вокруг постоянной энергии точно решенной системы с глобальной оценкой ошибки снова первого порядка для полуявного Эйлера и второго порядка для Верле-чехарда. То же самое касается всех других сохраняющихся величин системы, таких как линейный или угловой момент, которые всегда сохраняются или почти сохраняются в симплектический интегратор.[6]
Скоростной метод Верле является частным случаем Метод ньюмарк-бета с и .
Алгоритмическое представление
С скорость Верле - это обычно полезный алгоритм в 3D-приложениях, общее решение, написанное на C ++, может выглядеть следующим образом. Упрощенная сила сопротивления используется для демонстрации изменения ускорения, однако она необходима только в том случае, если ускорение не является постоянным.
1 структура Тело 2 { 3 Vec3d позиция { 0.0, 0.0, 0.0 }; 4 Vec3d вель { 2.0, 0.0, 0.0 }; // 2 м / с по оси x 5 Vec3d соотв { 0.0, 0.0, 0.0 }; // сначала нет ускорения 6 двойной масса = 1.0; // 1 кг 7 двойной тащить = 0.1; // rho * C * Area - упрощенное перетаскивание для этого примера 8 9 /**10 * Обновите pos и vel с помощью интеграции "Velocity Verlet"11 * @param dt DeltaTime / временной шаг [например: 0,01]12 */13 пустота Обновить(двойной dt)14 {15 Vec3d new_pos = позиция + вель*dt + соотв*(dt*dt*0.5);16 Vec3d new_acc = apply_forces(); // необходимо только если ускорение непостоянное17 Vec3d new_vel = вель + (соотв+new_acc)*(dt*0.5);18 позиция = new_pos;19 вель = new_vel;20 соотв = new_acc;21 }22 23 Vec3d apply_forces() const24 {25 Vec3d grav_acc = Vec3d{0.0, 0.0, -9.81 }; // 9,81 м / с ^ 2 вниз по оси Z26 Vec3d drag_force = 0.5 * тащить * (вель * пресс(вель)); // D = 0,5 * (rho * C * Площадь * vel ^ 2)27 Vec3d drag_acc = drag_force / масса; // а = F / м28 возвращаться grav_acc - drag_acc;29 }30 };
Условия ошибки
Локальная ошибка положения интегратора Верле составляет как описано выше, а локальная ошибка скорости равна .
Глобальная ошибка положения, напротив, равна , а глобальная ошибка скорости равна . Их можно получить, отметив следующее:
и
Следовательно
По аналогии:
который можно обобщить до (это можно показать по индукции, но здесь оно приводится без доказательства):
Если мы рассмотрим глобальную ошибку в положении между и , куда , ясно, что
и, следовательно, глобальная (кумулятивная) ошибка за постоянный интервал времени определяется выражением
Поскольку скорость определяется некумулятивным образом из положений в интеграторе Верле, общая ошибка скорости также .
В моделировании молекулярной динамики глобальная ошибка обычно намного важнее локальной ошибки, поэтому интегратор Верле известен как интегратор второго порядка.
Ограничения
Системы из нескольких частиц с ограничениями проще решать с помощью интегрирования Верле, чем с помощью методов Эйлера. Ограничения между точками могут быть, например, потенциалами, ограничивающими их определенным расстоянием, или силами притяжения. Их можно смоделировать как пружины соединяя частицы. Используя пружины бесконечной жесткости, модель может быть затем решена с помощью алгоритма Верле.
В одном измерении отношения между неограниченными позициями и фактические позиции очков я вовремя т можно найти с помощью алгоритма
Интегрирование Верле полезно, потому что оно напрямую связывает силу с положением, а не решает проблему с использованием скоростей.
Однако проблемы возникают, когда на каждую частицу действуют несколько сдерживающих сил. Один из способов решить эту проблему - перебрать каждую точку в моделировании так, чтобы в каждой точке ослабление ограничений последней уже использовалось для ускорения распространения информации. В моделировании это может быть реализовано с использованием небольших временных шагов для моделирования, использования фиксированного количества шагов решения ограничений на каждый временной шаг или решения ограничений до тех пор, пока они не встретятся с определенным отклонением.
При локальном приближении ограничений к первому порядку это то же самое, что и Метод Гаусса – Зейделя. Для малых матрицы известно, что LU разложение быстрее. Большие системы можно разделить на кластеры (например, каждая тряпичная кукла = кластер). Внутри кластеров используется метод LU, между кластерами - Метод Гаусса – Зейделя используется. Матричный код можно использовать повторно: зависимость сил от положений может быть аппроксимирована локально до первого порядка, а интеграция Верле может быть сделана более неявной.
Сложное программное обеспечение, такое как SuperLU[7] существует для решения сложных задач с использованием разреженных матриц. Конкретные методы, такие как использование (кластеров) матриц, могут использоваться для решения конкретной проблемы, такой как проблема распространения силы через лист ткани без образования звуковая волна.[8]
Другой способ решить голономные ограничения использовать алгоритмы ограничения.
Реакции на столкновение
Один из способов реагировать на столкновения - использовать систему штрафов, которая в основном применяет установленную силу к точке при контакте. Проблема в том, что очень сложно выбрать сообщаемую силу. Используйте слишком сильную силу, и объекты станут неустойчивыми, слишком слабыми, и объекты будут проникать друг в друга. Другой способ - использовать реакцию столкновения проекции, которая берет проблемную точку и пытается переместить ее на кратчайшее возможное расстояние, чтобы вывести ее из другого объекта.
Интеграция Верле автоматически обрабатывает скорость, сообщаемую столкновением в последнем случае; однако обратите внимание, что это не гарантирует того, что это будет соответствовать физика столкновений (то есть реалистичность изменений импульса не гарантируется). Вместо неявного изменения члена скорости необходимо явно контролировать конечные скорости сталкивающихся объектов (путем изменения записанного положения с предыдущего временного шага).
Два простейших метода выбора новой скорости идеально подходят эластичный и неупругие столкновения. Немного более сложная стратегия, предлагающая больший контроль, будет включать использование коэффициент реституции.
Смотрите также
- Условие Куранта – Фридрихса – Леви.
- Энергетический дрейф
- Симплектический интегратор
- Интеграция чехарда
- Алгоритм Бимана
Литература
- ^ Верле, Лу (1967). "Компьютерные" эксперименты "над классическими жидкостями. I. Термодинамические свойства молекул Леннард-Джонса". Физический обзор. 159 (1): 98–103. Bibcode:1967ПхРв..159 ... 98В. Дои:10.1103 / PhysRev.159.98.
- ^ Press, W. H .; Теукольский, С. А .; Vetterling, W. T .; Фланнери, Б. П. (2007). «Раздел 17.4. Консервативные уравнения второго порядка». Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк: Издательство Кембриджского университета. ISBN 978-0-521-88068-8.
- ^ страница в Интернете В архиве 2004-08-03 на Wayback Machine с описанием метода Штёрмера.
- ^ Даммер, Джонатан. «Простой метод интеграции Верле с временной коррекцией».
- ^ Свуп, Уильям С .; Х. К. Андерсен; П. Х. Беренс; К. Р. Уилсон (1 января 1982 г.). «Метод компьютерного моделирования для расчета констант равновесия для образования физических кластеров молекул: приложение к небольшим кластерам воды». Журнал химической физики. 76 (1): 648 (Приложение). Bibcode:1982ЖЧФ..76..637С. Дои:10.1063/1.442716.
- ^ Хайрер, Эрнст; Любич, Кристиан; Ваннер, Герхард (2003). «Геометрическое численное интегрирование, иллюстрированное методом Штёрмера / Верле». Acta Numerica. 12: 399–450. Bibcode:2003AcNum..12..399H. CiteSeerX 10.1.1.7.7106. Дои:10.1017 / S0962492902000144.
- ^ Руководство пользователя SuperLU.
- ^ Baraff, D .; Виткин, А. (1998). «Большие шаги в моделировании ткани» (PDF). Труды по компьютерной графике. Ежегодная конференция, серия: 43–54.