LINUX.ORG.RU

Взаимодействие тел в космосе.


1

2

Раз мою программу для микроскопа не приняли в пользу такой же с армией техподдержки, решил сделать свою давнюю задумку.

Вопрос - какие формулы необходимо применить к ракете, летящей в космосе, если вокруг неё есть объекты с большей массой. Тягу ракеты взять как 0 после старта и n как начальную.

$SUBJ1

>Вопрос - какие формулы необходимо применить к ракете, летящей в космосе, если вокруг неё есть объекты с большей массой. Тягу ракеты взять как 0 после старта и n как начальную.

уравнения Ньютона. Ваш К.О.

Ну и есессно дифур составить надо будет. А его уже численно решать, предварительно проверив на то, будет ли решение сходиться (условие Липшица)

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Для определения взаимодействия с большими объектами, я так полагаю, надобно использовать классическую теорию тяготения Ньютона?

AlexCones ★★★
() автор топика

Можно решить задачу в общем виде, нарисовав гамильтониан из закона всемирного тяготения.

Aceler ★★★★★
()
Ответ на: комментарий от AlexCones

Там проблема не в размерах объекта, а в скоростях. Если у тебя ракета успевает разогнаться до V→c, тогда надо будет вводить релятивистские эффекты.

Aceler ★★★★★
()
Ответ на: комментарий от AlexCones

>Для определения взаимодействия с большими объектами, я так полагаю, надобно использовать классическую теорию тяготения Ньютона?

Хоть с большими, хоть с малыми. Но трабл в том, что если массы взаимодействующих тел соизмеримы между собой, то уже в случае системы из 3-х тел дифур получается расходящимся. Так что в любом случае надо какое-то одно тело принимать за бесконечно малое, а остальные за бесконечно большие, причем большие не взаимодействуют между собой (ну или заранее рпосчитать их орбиты в системе)

dikiy ★★☆☆☆
()
Ответ на: комментарий от Aceler

>Если у тебя ракета успевает разогнаться до V→c, тогда надо будет вводить релятивистские эффекты.

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

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Т.е. (для примера) придется пренебрегать массой спейсшипа по сравнению с планетой? А как же тогда его рассчитывать по ф-ле тяготения?

AlexCones ★★★
() автор топика
Ответ на: комментарий от dikiy

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

Если ракеты участвует во взаимодействии — да, а если нет — то мы такое в универе решали вроде нормально :)

Aceler ★★★★★
()

«Задача трех тел»

Смотри решение Софьи Ковалевской.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от AlexCones

>Т.е. (для примера) придется пренебрегать массой спейсшипа по сравнению с планетой? А как же тогда его рассчитывать по ф-ле тяготения?

точно не помню уже, но если ты составишь дифур, то один из членов исчезает, если ты примешь соотношение масс пренебрежимо малым.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AlexCones

>Т.е. (для примера) придется пренебрегать массой спейсшипа по сравнению с планетой? А как же тогда его рассчитывать по ф-ле тяготения?

В общем тут путь тако примерно:

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

Допустим ты смог это сделать и получил поле P(t,x). ну и получаешь дифур

m_ракеты*x"(t)=P(t,x).

x - это положение ракеты в пространстве.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

>потенциального поля

имею в виду потенциальное поле гравитации, есессно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Сомневаюсь, что это оптимальный путь. Вот, например, заставка в xcsreensaver, которая показывает, как крутятся по орбитам шарики. Не думаю, что она использует дифференциальные уравнения n-го порядка.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>Сомневаюсь, что это оптимальный путь. Вот, например, заставка в xcsreensaver, которая показывает, как крутятся по орбитам шарики. Не думаю, что она использует дифференциальные уравнения n-го порядка.

Во-первых как минимум - 2-го порядка. А во-вторых проще сделать уж точно никак не получится.

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

dikiy ★★☆☆☆
()

Чорд, я думал, тут о сексе в невесомости!

hibou ★★★★★
()
Ответ на: комментарий от AlexCones

>Сомневаюсь, что это оптимальный путь.

да и составить P(x,t) не так уж и сложно. Для начала рассчитай орбиты самых крупных планет: Юпитера и Сатурна. Потом рассчитай орбиты мелких планет по полученному потенциальному полю от Солнца, Юпитера и Сатурна. Ну а потом составь результирующее потенциальное поле и в нем уже пусти ракету в полет.

Есессно, что надо заранее составить временной интервал, в котором ты все это будешь рассчитывать.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Хм... Да, тут один центральный шарик. А вот есть же еще тоже игрушка под линукс, там эти шарики можно руками разбрасывать и все со всеми взаимодействуют.

Лучше мне выложить структуры, которые я собирался использовать:

Для планеты:
-Масса
-Радиус (для расчета столкновения)
-Индекс звезды, вокруг которой вертится.
-A и B эллипса орбиты
-Угловая скорость
-Текущий угол

Для планет-спутников, Индекс звезды меняется на Индекс планеты.

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

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>А вот есть же еще тоже игрушка под линукс, там эти шарики можно руками разбрасывать и все со всеми взаимодействуют.

ну так ты же сам сказал - _игрушка_.

Взаимодействовать они-то взаимодействуют, но к реальному взаимодействию это не имеет никакого отношения.

-Масса

-Радиус (для расчета столкновения) -Индекс звезды, вокруг которой вертится. -A и B эллипса орбиты -Угловая скорость -Текущий угол

ну так все еще проще, тебе не надо рассчитывать орбиты планет, если они даны уже. Сделай программку в octave для начала (там есть численное решение дифуров). Чтобы посмотреть, как оно все будет. А потом уже даьше иди.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

>Сделай программку в octave для начала

Эм.. две проблемы.

1) Я не умею пользоваться octave
2) Я рассчитывал на рендомные системы с минимальной корректировкой после генерации.

AlexCones ★★★
() автор топика
Ответ на: комментарий от anonymous

>>>Во-первых как минимум - 2-го порядка.

Во-вторых, как максимум - 2-го порядка.

да. опечатка.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AlexCones

>>Сделай программку в octave для начала

Эм.. две проблемы.

1) Я не умею пользоваться octave

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

2) Я рассчитывал на рендомные системы с минимальной корректировкой после генерации.

что есть рендомная система?

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

>что есть рендомная система?

кол-во планет в системе - random
их массы, a и b орбит, круговые скорости - random

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>2) Я рассчитывал на рендомные системы с минимальной корректировкой после генерации.

да и перестань бояться. При твоих условиях программа на octave для рассчета траектории будет занимать от силы 200 строк.

Метода численного решения уравнений там уже встроены все. Тебе надо лишь адекватно объяснить octave чего ты собсно хочешь.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AlexCones

>>что есть рендомная система?

кол-во планет в системе - random
их массы, a и b орбит, круговые скорости - random

не вижу никакой проблемы. Осиль octave с функцией ode45. А так же осиль хотя бы на базовом уровне что такое дифур. И как преобразовать дифур второго порядка в систему из двух дифуров первого порядка. И будет тебе счастье.

Короче - посиди пару дней над матчастью. Без всякого программирования, а потом уже все получится быстро.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AlexCones

>Для планеты:
-Масса
-Радиус (для расчета столкновения)
-Индекс звезды, вокруг которой вертится.
-A и B эллипса орбиты
-Угловая скорость
-Текущий угол

рекомендую следующее:

-Масса
-Радиус
-A, B эллипса
-Скорость в перигее
-Наклон орбиты относительно эклиптики
-начальные условия (положение планеты, направление вращения)

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonymous

>-A, B эллипса -Скорость в перигее

При заданных массах это связанные величины.

это понятно. Но топик-стартеру будет проще, если оно будет заранее задано.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

> если массы взаимодействующих тел соизмеримы между собой, то уже в случае системы из 3-х тел дифур получается расходящимся.

ыыы!!!

что такое расходящий дифур???

www_linux_org_ru ★★★★★
()

ТС, тут все просто как паренная репа

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

1. считаешь силы

2. считаешь приращения скорости

3. считаешь приращения координат

и так в цикле

все!

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

www_linux_org_ru ★★★★★
()

задача на 50 строк на твой_язык, правда еще 30 строк на задания начальных положений, скоростей и масс

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Вот именно на такой ответ я и рассчитывал. Вчера даже рассчитывал частоту обновления, но подумал, что так не получится. Попробую. Если у меня рендомно сгенерируется несколько планет и звезда, как рассчитать начальное ускорение, чтобы планеты не улетели за пределы «системы» и не шмякнулись на звезду?

AlexCones ★★★
() автор топика

Nbody на shootout'е — на всех популярных языках :)

buddhist ★★★★★
()
Ответ на: комментарий от AlexCones

> как рассчитать начальное ускорение, чтобы планеты не улетели за пределы «системы» и не шмякнулись на звезду?

начальное ускорение бесполезно «рассчитывать» — оно определяется из массы звезды и расстояния до нее

начальную скорость можно рассчитывать из соотношения v^2/r = F, где F сила тяготения, если тебе хочется круговую орбиту и скорость направлена строго по нормали к направлению на звезду

можно чуть поварьировать направление и саму скорость, если тебе нужны эллиптические орбиты

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от AlexCones

точные детали «как сделать такую-то эллиптическую орбиту» я не помню, но считаются достаточно просто

кстати, тебе важнее может быть чтобы тело не улетело нафиг

почитай хотя бы http://ru.wikipedia.org/wiki/Первая_космическая_скорость http://ru.wikipedia.org/wiki/Вторая_космическая_скорость

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>почитай хотя бы http://ru.wikipedia.org/wiki/Первая_космическая_скорость http://ru.wikipedia.org/wiki/Вторая_космическая_скорость

Это читал еще в школе. Загвоздка в том, что эта скорость перпендикулярна поверхности объекта. Мне же нужна скорость параллельная (угловая), если не ошибаюсь.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

> Это читал еще в школе. Загвоздка в том, что эта скорость перпендикулярна поверхности объекта. Мне же нужна скорость параллельная (угловая), если не ошибаюсь.

ыыы! омега=v/r

но по-моему тут уже тебе легче поэкспериментировать

кстати — для генережа удобнее варьировать не направление скорости, а варьировать ее величину и точку перицентра

емнип тогда любая скорость между 1-й и 2-й даст элл. орбиту

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>а варьировать ее величину и точку перицентра

Здраво. Так и попробую. Сегодня скорее всего не успею - надо данные анкет обработать, но завтра попробую.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

вообще тут полностью достаточно школьной математики плюс небольшие ошметки из того, что требует интергрирования — их можно даже и не знать, а прочесть про ньютоновский потенциал и успокоиться

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

про ньютоновский потенциал — только если интересно *сразу* посчитать, какая элл. орбита получится

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Aceler

> Можно решить задачу в общем виде, нарисовав гамильтониан из закона всемирного тяготения.

ах, до чего страшные слова знает месье!

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Ты вьюноше расскажи ещё про динамику твёрдого тела и подсоби с уравнениями для углового движения, чтобы «ракета» честной получилась. До второго порядка малости по отношению к параметру <характерный размер ракеты>/<минимальное расстояние до планеты>, чтобы традицию не нарушать. Как гамильтониан с углами Эйлера и подходящими импульсами замутит, так и отстанет сразу с умными словами.

anonymous
()
Ответ на: комментарий от www_linux_org_ru

>>если массы взаимодействующих тел соизмеримы между собой, то уже в случае системы из 3-х тел дифур получается расходящимся.

ыыы!!!

что такое расходящий дифур???

тот, который не удовлетворяет условию Липшица, и, как следствие, не сходится при применении итеративных методов.

dikiy ★★☆☆☆
()
Ответ на: комментарий от www_linux_org_ru

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

и через пару сотен итераций получаем расхождение в 1000% :)

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonymous

>а на итеративных методах свет клином сошёлся?

а как ты еще дифур решать собрался? Все неналитические методы решения итеративные.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Например, берёшь и строишь последовательность канонических в данном случае замен (численно-аналитически), чтобы в новых переменных система отличалась от интегрируемой на пренебрежимо малую величину. Ты ж не на слишком большом интервале времени считать собрался? А если на большом - то тут надо умно усреднять по заветам М. Л. Лидова. Формально оно тоже в цикле бегает, но, подозреваю, немного не в том смысле, что ты имел ввиду.

Как вариант - замутить МКЭ, тоже прокатит.

И не надо тут парить себе мозг со сходимостью. На коленке народ считает Рунге-Куттой и всё путём. Правильные товарищи юзают симплектические методы, как учил дедушка Арнольд, и тоже, вроде, «дифуры не расходятся». // Блин, где ж ты такое определение вычитал...

anonymous
()
Ответ на: комментарий от www_linux_org_ru

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

1. считаешь силы

какие силы и куда?

2. считаешь приращения скорости

3. считаешь приращения координат

таким тупняком получится что угодно, но только не более-менее реальная картина.

Как я уже сказал - лучше всего взять _заранее заданные_ орбиты всех планет, и написать функцию потенциального поля P(t,x) (просто сумма всех «потенциалов» от планет). И получишь уже дифур, на который можно натравить уже известные сходящиеся методы решения.

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

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonymous

>И не надо тут парить себе мозг со сходимостью. На коленке народ считает Рунге-Куттой и всё путём.

Если считать без мозгов, то и результат такой же будет.

Правильные товарищи юзают симплектические методы, как учил дедушка Арнольд, и тоже, вроде, «дифуры не расходятся». // Блин, где ж ты такое определение вычитал...

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

/ Блин, где ж ты такое определение вычитал...

Ну а как ты это понятие «определил» бы?

чтобы в новых переменных система отличалась от интегрируемой на пренебрежимо малую величину. Ты ж не на слишком большом интервале времени считать собрался?

у тебя даже на пренебрежимо малом интервале не будет никакой гарантии сходимости.

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.