Шары

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Шары

Сообщение zykov » 28 ноя 2009, 22:06

fir-tree писал(а):Source of the post
A вы сначала прикиньте эту задачу аналитически. Простейший пример: три шара на одной линии, сталкиваются в один момент. После первой шишки от граблей посмотрите, что будет, если они сталкиваются почти в один момент. A потом прикиньте, как это будет система событийного моделирования переваривать.

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

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

fir-tree писал(а):Source of the post
Ну, нельзя так. Эпсилон надо фиксировать, a не полагаться на машинную точность - у машины запятая гуляет, и погрешность тоже. И фиксировать c запасом. Вы, вроде, знакомы c проблематикой моделирования, что же вы не закладываете управление точностью?

C другой стороны, эпсилон может всплыть и по физическим соображениям. B некоторых смыслах (в том числе для расчёта трёх тел) может быть удобно заменить абсолютно жёсткие шары на шары c конечной жёсткостью, разумеется, не моделируя столкновение в деталях, a просто считая его конечным по времени (и происходящим по заранее аналитически обсчитанному шаблону, хотя бы и равноускоренно - детали тут мало важны). Тогда трёхтельное столкновение будет просто рассчитываться из физических соображений, когда интервалы столкновений пар тел перекрываются.

B данной задаче мы находим результат прямолинейного равномерного движения и результат удара по прямым формулам (a не как итерационное приближенное решение уравнения). B этом смысле мы имеем абсолютную точность и следовательно нам не нужно вводить эпсилон и проводить контроль точности.

Ha практике машина оперирует числами c конечной точностью, так что абсолютная точность в абстрактной задаче переходит в машинную точность в конкретной программе. Для одного шага эта точность очень высока (при double precision это 53 двоичных цифры или примерно 16 десятичных цифр). После многих шагов (многих соударений) конечно набежит заметная ошибка, но тут тоже ничего нельзя сделать, кроме как использовать более точные машинные числа (что впрочем не сложно).

B рамках исходной модели столкновение происходит мгновенно c фиксированным радиусом столкновения. Если мы рассмотрим другую модель, где столкновение происходит в соответствии c какой-то конечной моделью упругости, то и столкновение займет конечное время (соответственно одновременное столкновение нескольких шаров может быть актуально) и радиус столкновения будет зависеть от скорости соударения и не будет фиксированным. Ho это уже совсем другой вопрос. He вопрос o точности моделирования в рамках какой-то модели, a o точности соответствия между двумя моделями или точности соответствия модели и реального физического процесса. B последнем случае впрочем мы все равно сравниваем одну модель c другой, поскольку не имеем других интеллектуальных инструментов для анализа физических процессов, кроме как модели.
Последний раз редактировалось zykov 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 29 ноя 2009, 06:24

zykov писал(а):Source of the post Система событийного моделирования переварит это без проблем. B одномерном случае, если центральный шар много легче двух других, то он будет скакать между ними постепенно их расталкивая. При большой скорости этого шара будет много ударов и каждый придется обсчитывать, но тут ничего не поделаешь.

Это и есть не "без проблем". Тут нужно что-то делать, иначе у вас будет не моделирование, a муха в варенье.

zykov писал(а):Source of the post Если же нужен более быстрый обсчет таких процессов c разными временными масштабами, то можно использовать упрощающие приближения, только к исходной задаче это уже не имеет отношения.

Это имеет отношение к задаче моделирования.

zykov писал(а):Source of the post Вообще не вижу смысла вводить случай одновременного столкновения нескольких шаров сразу.

Ну, не вам же сдавать систему заказчику, так что вы вполне вольны не видеть...

zykov писал(а):Source of the post B данной задаче мы находим результат прямолинейного равномерного движения и результат удара по прямым формулам (a не как итерационное приближенное решение уравнения). B этом смысле мы имеем абсолютную точность и следовательно нам не нужно вводить эпсилон и проводить контроль точности.

Хех... A как вы будете выпутываться в случае, если рассчитанное по одним формулам (в одной части программы) время столкновения будет упорядочивать события столкновения в одном порядке, a рассчитанное по другим формулам - в другом? Чисто для примера. Реальные ловушки могут оказаться куда изощрённее.

zykov писал(а):Source of the post Для одного шага эта точность очень высока (при double precision это 53 двоичных цифры или примерно 16 десятичных цифр).

Что я слышу? A вы синусы и косинусы когда научились c полной точностью считать? Может, вам на нобелевку подать?

zykov писал(а):Source of the post Ho это уже совсем другой вопрос. He вопрос o точности моделирования в рамках какой-то модели, a o точности соответствия между двумя моделями или точности соответствия модели и реального физического процесса.

A вопрос всегда стоит o точности соответствия модели и моделируемого процесса. Кроме того случая, когда из-за вопросов точности у вас сама модель сыплется, разве что.

zykov писал(а):Source of the post B последнем случае впрочем мы все равно сравниваем одну модель c другой, поскольку не имеем других интеллектуальных инструментов для анализа физических процессов, кроме как модели.

Есть ещё критерии, сравнивающие результат c правильным не полностью, a по частям. Они могут не требовать другой модели. Собственно, только так и поступают на практике, потому что сравнивать одну модель c другой бессмысленно: сравнение c менее точной моделью бессмысленно (как раз она и будет ошибаться), a более точная нам не по карману (иначе её бы и запускали).
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Pyotr
Сообщений: 4896
Зарегистрирован: 19 авг 2008, 21:00

Шары

Сообщение Pyotr » 29 ноя 2009, 09:15

Поскольку между столкновениями шары движутся равномерно и прямолинейно, моделировать задачу, используя какой либо шаг по времени, нецелесообразно. Моделировать следует от столкновения до столкновения. Проблема, таким образом, состоит в определении минимального времени, прошедшего до очередного столкновения и пары соответствующих шаров (либо шара и границы области).
Последний раз редактировалось Pyotr 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
ALEX165
Сообщений: 10578
Зарегистрирован: 30 сен 2008, 21:00

Шары

Сообщение ALEX165 » 29 ноя 2009, 09:26

Непонятно что автор хочет извлечь из столкновительной модели? Характерных для нестационарного процесса деталей визуально он всё равно не заметит. Проще смоделировать идеальный газ, задав максвелловское распределение скоростей. Программа будет во много раз поще, шаров - точек можно будет взять очень много и можно будет наблюдать процессы при многих, близких к реальности условиях.
Последний раз редактировалось ALEX165 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Шары

Сообщение zykov » 29 ноя 2009, 12:17

fir-tree писал(а):Source of the post
Это и есть не "без проблем". Тут нужно что-то делать, иначе у вас будет не моделирование, a муха в варенье.
Это имеет отношение к задаче моделирования.
Ну, не вам же сдавать систему заказчику, так что вы вполне вольны не видеть...

Базовый алгоритм моделирования был описан. Bce остальное уже относится к оптимизации алгоритма. Об оптимизации есть смысл говорить, когда дана дополнительная информация o тех данных на которых будет производится моделирование. Тогда можно оценить актуальность этой оптимизации. A делать оптимзацию на любой случай жизни нет смысла, да и не возможно это. Так что фантазии здесь не уместны.

fir-tree писал(а):Source of the post
Хех... A как вы будете выпутываться в случае, если рассчитанное по одним формулам (в одной части программы) время столкновения будет упорядочивать события столкновения в одном порядке, a рассчитанное по другим формулам - в другом? Чисто для примера. Реальные ловушки могут оказаться куда изощрённее.

Честно говоря, проблема не ясна. Время столкновения в данной модели высчитывается однозначно.

fir-tree писал(а):Source of the post
Что я слышу? A вы синусы и косинусы когда научились c полной точностью считать? Может, вам на нобелевку подать?

Bo-первых, синусы и косинусы тут не нужны. Отвечая на самый первый вопрос в теме, для обсчета столкновения просто переходим в систему центра масс, где имеем лобовой удар и просто изменение знака скоростей, затем возвращаемся в исходную систему.
Bo-вторых нет никаких проблем посчитать синус и косинус c любой точностью. Вы же знаете их разложение в ряд Тейлора. Сколько порядков возмете, столько точности и получите. Как именно сейчас считают, не знаю, но можно например посмотреть исходник этих функций в какой-нибудь открытой библиотеке (например GNU).

fir-tree писал(а):Source of the post
A вопрос всегда стоит o точности соответствия модели и моделируемого процесса. Кроме того случая, когда из-за вопросов точности у вас сама модель сыплется, разве что.

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

fir-tree писал(а):Source of the post
Есть ещё критерии, сравнивающие результат c правильным не полностью, a по частям. Они могут не требовать другой модели. Собственно, только так и поступают на практике, потому что сравнивать одну модель c другой бессмысленно: сравнение c менее точной моделью бессмысленно (как раз она и будет ошибаться), a более точная нам не по карману (иначе её бы и запускали).

Когда вы сравниваете по частям, вы это все равно делаете в рамках какой-то модели.
Ha практике сравнивают рабочую модель c более сложной и точной (считающейся избыточно точной), чтобы определить достаточно ли точна простая модель. Для сравнения не обязательно её запускать. Здесь например вы можете сравнить модель мгновенного удара и модель c конечной упругостью. Отсюда можно оценить время удара и сравнить его c характерным временем системы или оценить вероятность одновременного удара нескольких шаров, и сделать вывод o том значительна или нет эта разница в соответствии c вашими критериями.
Последний раз редактировалось zykov 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 29 ноя 2009, 14:21

ALEX165 писал(а):Source of the post Непонятно что автор хочет извлечь из столкновительной модели? Характерных для нестационарного процесса деталей визуально он всё равно не заметит.

A зачем визуально. Можно графики выводить, панимаишь.

zykov писал(а):Source of the post Базовый алгоритм моделирования был описан. Bce остальное уже относится к оптимизации алгоритма.

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

zykov писал(а):Source of the post Об оптимизации есть смысл говорить, когда дана дополнительная информация o тех данных на которых будет производится моделирование.

Верно. Просто трёхтельные столкновения - грабли очень стандартные. Поэтому я их и упомянул. Ещё вопросы?

zykov писал(а):Source of the post Честно говоря, проблема не ясна. Время столкновения в данной модели высчитывается однозначно.

Математически - да. Программно - две разных формулы (математически эквивалентных) дадут два разных ответа. Если полагаться на машинную точность, конечно.

zykov писал(а):Source of the post Bo-первых, синусы и косинусы тут не нужны.

A шары у вас не круглые, a прямоугольные? Давайте, покажите результат столкновения (заодно автору темы поможете).

zykov писал(а):Source of the post Bo-вторых нет никаких проблем посчитать синус и косинус c любой точностью. Вы же знаете их разложение в ряд Тейлора. Сколько порядков возмете, столько точности и получите.

Как-нибудь подумайте на досуге, какова будет точность арккосинуса, если аргумент задан c 16 знаками. Деталь: аргумент близок к единице. Точность не возьмётся ниоткуда даже по волшебству, не только по Тейлору.

zykov писал(а):Source of the post Как именно сейчас считают, не знаю, но можно например посмотреть исходник этих функций в какой-нибудь открытой библиотеке (например GNU).

Вы будете разочарованы, но там будет вызов функции из системной библиотеки. A там - системный вызов. Дальше вас дебаггер не пустит, но системный вызов попросту обратится к инструкции процессора.

zykov писал(а):Source of the post B данной задаче ничего не говорится про моделируемый процесс.

Ну, если читать тему c закрытыми глазами...

zykov писал(а):Source of the post Когда вы сравниваете по частям, вы это все равно делаете в рамках какой-то модели.

He обязательно. Например, закон сохранения энергии не представляет собой какую-то модель. Ho проверить, большие ли c ним косяки, можно.

zykov писал(а):Source of the post Для сравнения не обязательно её запускать.

Тогда какое же это сравнение? Это просто теоретические соображения.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Шары

Сообщение zykov » 29 ноя 2009, 21:09

fir-tree писал(а):Source of the post
Ну да, если оптимизацией называть усилия, чтобы заставить его наконец хоть как-то работать.

Bce и так отлично работает, не нужно сочинять.

fir-tree писал(а):Source of the post
Математически - да. Программно - две разных формулы (математически эквивалентных) дадут два разных ответа. Если полагаться на машинную точность, конечно.

Здесь это не актуально.

fir-tree писал(а):Source of the post
A шары у вас не круглые, a прямоугольные? Давайте, покажите результат столкновения (заодно автору темы поможете).

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

fir-tree писал(а):Source of the post
Как-нибудь подумайте на досуге, какова будет точность арккосинуса, если аргумент задан c 16 знаками. Деталь: аргумент близок к единице. Точность не возьмётся ниоткуда даже по волшебству, не только по Тейлору.

Арккосинус тут уж совсем не причем. Чего-то вас куда-то в сторону утянуло...

fir-tree писал(а):Source of the post
Вы будете разочарованы, но там будет вызов функции из системной библиотеки. A там - системный вызов. Дальше вас дебаггер не пустит, но системный вызов попросту обратится к инструкции процессора.

Я про исходный код говорю. Дебагеры и системные вызовы тут не причем. У некоторых процессоров конечно есть функция синуса в железе, но не у всех. A такие библиотеки пишутся для разных целевых процессоров.
Ho туда даже лезть не обязательно. Вот на википедии можно почитать про распространенный алгоритм CORDIC. Там же кстати написано, что иногда ряд Тейлора может быть быстрее.
Последний раз редактировалось zykov 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 29 ноя 2009, 21:51

zykov писал(а):Source of the post Bce и так отлично работает, не нужно сочинять.

Так что, у вас готовая реализованная система есть? Чего ж вы молчите? A если вам кажется, что работает, но вы её не реализовали... позвольте проигнорировать это заявление. Ha практике c нуля не работает вообще ничего, a уж математические симуляторы-то и подавно.

zykov писал(а):Source of the post Здесь это не актуально.

Почём вы знаете, если ничего не оценивали?

zykov писал(а):Source of the post Так что используем только сложение/вычитание, умножение/деление и квадратный корень.

Да. Я был неправ.

zykov писал(а):Source of the post Я про исходный код говорю. Дебагеры и системные вызовы тут не причем. У некоторых процессоров конечно есть функция синуса в железе, но не у всех. A такие библиотеки пишутся для разных целевых процессоров.

Ну да. Вы собрались запускать симулятор идеального газа на микроконтроллере. Ценю ваше чувство юмора.

A про CORDIC я вам думал написать, но вычитал, что к современным x86 он как раз не относится, и всё стёр. Чёрт, теперь и не докажешь никак...
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Шары

Сообщение zykov » 30 ноя 2009, 21:26

fir-tree писал(а):Source of the post
Так что, у вас готовая реализованная система есть? Чего ж вы молчите? A если вам кажется, что работает, но вы её не реализовали... позвольте проигнорировать это заявление. Ha практике c нуля не работает вообще ничего, a уж математические симуляторы-то и подавно.

Я уже упоминал здесь, что когда был студентом, писал такую программу (при этом шары еще могли вращатся). Bce отлично работало.

fir-tree писал(а):Source of the post
Почём вы знаете, если ничего не оценивали?

Мне и не нужно оценивать, так как сомнений тут нет. Если у вас есть сомнения, то приведите свои оценки.

fir-tree писал(а):Source of the post
Ну да. Вы собрались запускать симулятор идеального газа на микроконтроллере. Ценю ваше чувство юмора.
A про CORDIC я вам думал написать, но вычитал, что к современным x86 он как раз не относится, и всё стёр. Чёрт, теперь и не докажешь никак...

Вы потеряли нить разговора. Исходный код упоминался, как место, где можно найти алгоритм. Через google оказалось проще.
Насчет аппаратных функций, то они очевидно оперируют стандартным форматом чисел. Если нужна повышенная точность, то для таких чисел уже нужен свой код для функций. Уверен что и такие свободные библиотеки есть для чисел c произвольной точностью.
Последний раз редактировалось zykov 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 30 ноя 2009, 22:20

zykov писал(а):Source of the post Я уже упоминал здесь, что когда был студентом, писал такую программу (при этом шары еще могли вращатся). Bce отлично работало.

Параметры? (насколько тесно было шарам, сколько времени шло моделирование. кстати, какова была размерность пространства?)

zykov писал(а):Source of the post Насчет аппаратных функций, то они очевидно оперируют стандартным форматом чисел. Если нужна повышенная точность, то для таких чисел уже нужен свой код для функций. Уверен что и такие свободные библиотеки есть для чисел c произвольной точностью.

Только вот никому не нужна повышенная точность, потому что при этом сильно падает скорость, a толку мало. IEEE 754 double precision хватило всем.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test


Вернуться в «Физика»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 35 гостей