![]() |
|
![]() ![]() ![]() |
|
SCII |
|
|||
Unregistered |
Есть такая задачка:
В сосуде с идеальным газом, находящимся в равновесном состоянии, помещена большая частица. Под действием соударений с молекулами она начинает броуновское движение. Можно менять форму сосуда, форму размер и массу частицы. /*Следующий абзац можно пропустить, если вопрос непонятен тогда советую прочитать*/ Я хочу сделать так: Создать класс Частица, который будет содержать номер,координаты частицы(2-х или 3-х мерная модель), направление движения (это тоже координаты куда частица переместится,проще куда направлена скорость) и скорость. Методы: графическое отображение частицы, моделирование столкновения с другой частицей(соответственно меняется скорость, направление движения) и перемещение(изменение начальной координаты ), еще создать класс Броуновская Частица(БЧ), наследующий от класса Частица, в нем поменяются только координаты, это будет массив содержащий координаты оболочки частицы. И еще мне нужен массив для координат сосуда(молекулы и БЧ с ним сталкиваются). /*Вопрос*/ В итоге у меня есть координаты молекул, частицы и сосуда. Вопрос в том, что когда я буду моделировать перемещение молекулы или частицы я должен буду перебирать координаты всех молекул для того чтобы узнать столкнется она с кем нибудь или нет, а это грустно и долго... /*Как можно решить*/ И подходящего алгоритма на ум не приходит, можно конечно разделить сосуд на части и соответственно все молекулы по группам,находящимся в той или иной части. Т е взять самые крайние координаты сосуда(например х1 и х2), также для у (у1 и у2), и наложить своеобразную сетку. Тогда в класс надо будет добавить номер ячейки в котором находить молекула .Теперь при перемещении мне достаточно проверять на совпадение координат только те молекулы которые находятся с моей в одной ячейке, и еще проверять ячейки окружающие мою(тк молекула может перелететь из одной ячейки в другую),причем перемещение(т е один "шаг ") будет не больше чем размер ячейки . Вот так можно решить, вроде понятно обьяснил. Может кто-нибудь предложит другой алгоритм, лучше чем мой? Буду благодарен. ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
есть один способ из статистики
![]() рассмотрим импульс (p=m*v) исследуемой частицы при каждом ударе он изменяется на какую-то величину она зависит от импульса частицы и импульса молекулы, с которой она столкнулась при небольших скоростях частицы по сравнению со скоростью молекул (а мне кажется, что такое допущение можно сделать) можно сказать, что это изменение зависит только от импульса молекулы молекул куча, импульс той, с которой произошло столкновение - случайная величина если взять промежуток времени dt, то в течение его произойдет несколько столкновений, что можно сказать о распределении этих случайных величин? про распределение модуля скорости молекулы нам особо и знать ничего не понадобится, главное, что оно приблизительно одинаковое (распределение, а не скорость) у всех Предположение1:мы находимся не очень близко к стенкам сосуда отсюда можно получить более осмысленный результат - все направления ударов равновероятны, отсюда автоматически следует, что мат.ожидание нулевое Предположение 2:за время выбранного промежутка времени происходит много столкновений это дает нам основания применить теорему (по-моему, называется центральная предельная теорема): сумма большого количества одинаково распределенных сл.величин с нулевым имеет распределение, близкое к нормальному дальше все просто p(t+dt)=p(t)+e здесь p(t) - испульс нашей частицы e - сумма его маленьких изменений, распределена она по нормальному закону мат.ожидание у нее нулевое что касается дисперсии, она определяется несколькими величинами: 1. длина промежутка времени (дисперсия пропорциональна длине промежутка) 2. температура в сосуде (т.е. среднее квадрата скорости, умноженное на какую-то константу), дисперсия и ей пропорциональна 3. всякие константы, которые зависят от параметров частицы и молекул - их всех можно объединить в одну и сделать ее настраиваемой вот и получается алгоритм: x(t+dt)=x(t)+dt*v(t) v(t+dt)=v(t)+E E - нормально распределенная сл.величина (или вектор в случае 2-d или 3-d) с параметрами (мат.ожидание=0,дисперсия=C*dt*T) C - та самая константа, которая зависит от статических параметров частицы и молекул dt - длина промежутка времени T - температура (в Кельвинах) P.S. такие процессы называются виннеровскими припоминаю, преподаватель рассказывал, что их применяют также для моделирования цен на акции и вообще многих величин, зависящих от большого числа похожих воздействий -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |