Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Система из трех материальных точек

85K
31 октября 2012 года
Avalan4er
2 / / 31.10.2012
Помогите пожалуйста решить задачу: Создать проект, моделирующий движение системы из 3 материальных точек под
действием гравитационных сил (для введенного момента времени t программа должна
распечатать координаты всех тел в пространстве).
В принципе тут нужно решать задачу трех тел, но там дифуры, а я в них еще не шарю, ибо 2 курс только.
Подскажите хотя бы словесный алгоритм, а то я вообще ничего по этой теме надумать не могу...
252
01 ноября 2012 года
koderAlex
1.4K / / 07.09.2005
задача трёх тел считается не разрешимой в аналитическом виде .
12K
02 ноября 2012 года
Ghox
297 / / 26.07.2009
Попытался привести свои размышления, надеюсь поможет.

Можно попытаться выполнить эту задачу с использованием приближённых вычислений - с помощью итерационного алгоритма.

Положим, на вход программы поступают данные:
- массы точек;
- пространственные координаты каждой точки (x, y, z);
- начальные скорости точек, заданные проекциями на оси координат - (vx, vy, vz).

Ускорение каждой точки можно вычислить на основе этих трёх групп величин, рассчитав для каждой точки векторы гравитационных ускорений, создаваемых двумя другими точками, и сложив эти векторы. В итоге для каждой точки получаем вектор ускорения (ax, ay, az).

Цикл итераций

Начало итерации

Имеем координаты точек, проекции векторов скоростей и ускорений точек.
Берём некоторый достаточно малый интервал времени - dt. Считаем, что на протяжении этого интервала ускорения точек остаются неизменными, соответственно можно вычислить положение и скорость точки на конец интервала:

 
Код:
x1 = x + vx * dt + ax * dt ^ 2 / 2
y1 = y + vy * dt + ay * dt ^ 2 / 2
z1 = z + vz * dt + az * dt ^ 2 / 2
vx1 = vx + ax * t
vy1 = vy + ay * t
vz1 = vz + az * t
Итого, на конец интервала, мы получаем для каждой точки новые координаты, и новые проекции её скорости на оси координат. На основе этих данных, вычисляем новые значения ускорений.

Конец итерации.

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

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

Также следует учесть, что для временного шага итерации лучше не брать какое-то фиксированное значение, а вычислять шаг итерации динамически на основе параметров точек (координат скоростей ускорений). Шаг итерации нужно каждый раз выбирать так, чтобы принятое допущение о неизменности ускорения обеспечивалось с некоторой нужной точностью, иначе алгоритм будет давать серьёзные искажения.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог