пятница, 3 января 2014 г.

TimeTape

Здесь я хочу коротко рассказать об одном очень интересном проекте - TimeTape, или Временная Лента. Суть его в следующем: Вы хотите не просто узнать об исторических событиях, а наглядно увидеть как они друг с другом соотносились. Для этого Вам надо просто зайти на сайт, выбрать диапазон дат (и, возможно, интересующие вас категории), и вы увидите что-то типа:
          
                +читать далее...
В википедии сортировка событий по годам уже есть.
Даже есть категории, только они, пожалуй, не очень-то тут подойдут, т.к. больше похожи на теги, нежели на нормальную классификацию.
В википедии есть API, с помощью которого нужные пользователю данные будут выгружаться на сайт. А тут eсть хорошая статья как работать с API из Zend-a.

Вот пример запроса, который возвращает json:
http://ru.wikipedia.org/w/api.php?format=json&action=query&titles=1941%20%D0%B3%D0%BE%D0%B4&prop=revisions&rvprop=content

и xml:
http://ru.wikipedia.org/w/api.php?format=xml&action=query&titles=1941%20%D0%B3%D0%BE%D0%B4&prop=revisions&rvprop=content

среда, 1 января 2014 г.

Задача N тел

Этот пост навеян просмотром научно-популярного 
сериала канала Discovery "How the Univers works".
Посвящается: Вале.

В космосе многие известные нам тела движутся по эллипсам друг вокруг друга: планеты вокруг солнца, спутники вокруг планет. Но если взять несколько тел в компьютерном эксперименте, где они так же будут притягиваться друг к другу с силой гравитационного притяжения \vec{F_{ij}}=G\frac{m_{i}m_{j}}{r_{ij}^{3}}\vec{r}_{ij}, то с очень большой вероятностью они разлетятся, и никакой стабильной системы не образуют.
(+ читать далее...)
Дело тут в том, что для трех и более гравитируюих тел очень сложно подобрать такое их положение и скорости, чтобы они двигались друг вокруг друга, не разлетаясь и не сталкиваясь. Хотя, некоторые устойчивые комбинации все же возможны.
Решая задачи с тремя и более телами, почти всегда используют численный эксперимент. Дифференциальные уравнения, описывающие движение n притягивающихся гравитационно тел выглкдят так:
\left\{ { m_{1}\ddot{\vec{r_{1}}}=G\frac{m_{1}m_{2}}{r_{1,2}^3}\vec{r_{1,2}}+G\frac{m_{1}m_{3}}{r_{1,3}^3}\vec{r_{1,3}}+...\atop m_{2}\ddot{\vec{r_{2}}}=G\frac{m_{2}m_{1}}{r_{2,1}^3}\vec{r_{2,1}} +G\frac{m_{2}m_{3}}{r_{2,3}^3}\vec{r_{2,3}}+... \\ ...} \right.
Введя скорость (\ddot{\vec{r_{i}}}=\dot{\vec{v_{i}}}\dot{\vec{r_{i}}}=\vec{v_{i}}) можно свести эту систему к системе обыкновенных дифференциальных уравнений первого порядка:
\left\{ { \dot{\vec{r_{1}}}=\vec{v_{1}}\\\dot{\vec{v_{1}}}=G\frac{m_{2}}{r_{1,2}^3}\vec{r_{1,2}}+G\frac{m_{3}}{r_{1,3}^3}\vec{r_{1,3}}+...\\\dot{\vec{r_{2}}}=\vec{v_{2}}\\\dot{\vec{v_{2}}}=G\frac{m_{1}}{r_{2,1}^3}\vec{r_{2,1}} +G\frac{m_{3}}{r_{2,3}^3}\vec{r_{2,3}}+... \\ ...} \right.
Эти системы можно решать методом численного интегрирования Рунге-Кутты. Вот пример такой программы, написанной Владимиром Романюком (переключать различные режимы можно кнопками 1-9).

Интересно отметить, что показанная выше задача о разлете произвольного числа тел интегрируема. Грубо говоря, траектории этих тел можно легко рассчитать с большой точностью. А вот если рассмотреть всего три тела, но вращающихся друг вокруг друга (например, движение двух планет вокруг Солнца), то все оказывается куда сложнее. Эта задача неинегрируема, и возмущения их движения, хотя и малые, могут накапливаться со временем. Это приводит к тому, что если такую систему моделировать, то со временем расчеты начнут существенно расходиться с действительностью (источник).
Вообще, если подобрать начальное положение и скорости k (k>2) гравитирующих тел так, что они будут двигаться у аттрактора или сепаратрисы, их движение станет хаотичным. Под "хаотичностью" тут подразумевается динамический хаос, когда небольшие изменения в начальных условиях приводят к значительным изменениям результата. Например, если ошибиться с заданием начальных положений планет на несколько метров, то довольно быстро это отличие от их истинного положения может стать равным километрам и даже больше (планеты вообще сорвутся со своих орбит и улетят в открытый космос).

 Замечание: более серьезное рассмотрение задачи n тел можно почитать тут.

суббота, 28 декабря 2013 г.

Движение двух гравитирующих тел: численный и аналитический подходы


Этот пост навеян постом "Задача N тел".
Посвящается: школьника и студентам.

Задача ставится так: есть два точечных тела с массами m_{1} и m_{1}, которые притягиваются друг к другу с силой гравитационного притяжения \vec{F_{12}}=G\frac{m_{1}m_{2}}{r^{3}}\vec{r}_{12}.
(+ читать далее...)
В зависимости от начальных условий (т.е. от значений координат и скоростей этих тел в начальный момент времени), они будут двигаться по замкнутым траекториям (эллипсам), или же разлетятся и никогда больше не встретятся. Надо составить программу, в которую можно вводить какие угодно начальные условия, а она будет рисовать траектории движения этих двух тел. Причем, рисовать эти траектории программа должна двумя способами: по формуле - аналитическому решению задачи двух тел, и численно рассчитав эту траекторию.
Построив такую программу, нужно проанализировать выдаваемые ей результаты: при каких условиях численное решение будет давать большую ошибку, и траектории, рассчитанные аналитически и численно не будут совпадать.

План решения задачи:
1) Получить аналитическое решение задачи двух тел.
2) Написать в Mathcad полученные формулы. Рисовать по ним траектории движения для различных начальных условий.
3) Построить траектории движения численно.
4) Сравнить полученные результаты, сделать выводы.

1) Решение задачи двух тел есть во многих книгах. Например, в первом томе Ландау, Лифшиц, или в этой книге на с.367. Если коротко, то движение двух тел сводят к движению одного тела в определенном потенциале. Поняв как движется это тело, сразу становится понятно, как движутся два исходных тела.
Нажмите сюда чтобы свернуть или развернуть выкладки.

2) Полученные формулы записываем в систему Mathcad и строим графики. Тут можно посмотреть как это будет выглядеть, а тут - загрузить файл .mcdx.
В зависимости от начальных условий эксцентриситет может быть положительным или отрицательным. Его значение по модулю характеризует степень отклонения траектории от окружности:
  • е=0 - окружность
  • 0<е<1 - эллипс
  • е=1 - парабола
  • е>1 - гипербола
А знак эксцентриситета влияет лишь на расположение траектории:
Будем рассматривать следующие начальные условия:
x0 = 10;
y0 = 10;
Vx0 = -0.03;
Vy0= -0.01.
Эксцентриситет при этом равен: е = -0.997.

3) Для численного моделирования запишем в Mathcad систему, описывающую движение того одного тела, к которому можно свести движение двух тел:
\left\{ { \dot{x}=v_{x}\\\dot{v}_{x}=-\gamma\frac{x}{(x^{2}+y^{2})^{\frac{3}{2}}}\\\dot{y}=v_{y}\\ \dot{v}_{y}=-\gamma\frac{y}{(x^{2}+y^{2})^{\frac{3}{2}}} } \right.
Численно решаем эту систему методом Rkfixed для начальных условий, приведенных выше. Убедимся, что она (справа) совпадает с траекторией, построенной по формуле (слева):

Посмотреть как выглядит программа можно тут, скачать ее можно тут или тут, где она объединена с аналитическим решением.

4) Со временем траектория, рассчитанная численно, начнет давать все большую и большую погрешность:
На последней картинке тела вообще разлетелись в разные стороны.
Как хорошо видно ниже, на графике изменения х-ой составляющей скорости от времени, проблема тут в резких поворотах, просчитать которые довольно сложно, т.к. функция там меняется довольно быстро. Подробнее о проблемах интегрирования рассматриваемых систем читайте тут.

Систему можно решить и другими методами: Stiffb и Stiffr. Они более приспособлены для таких случаев.

Выводы: Задача о движении двух гравитирующих тел имеет точное решение. Решая эту задачу численно, можно "на практике" проверить состоятельность различных методов численного интегрирования.

Замечание: Результаты численного моделирования задачи трех тел (более сложный случай изложенной выше задачи) изложены тут.