Великие математики, такие как Эйлер, хорошо понимали, что решать уравнения, интегралы и дифференциалы численными методами – дело неблагодарное и ненадежное. Но природа дает нам не только целые или рациональные числа, ей очень нравится засунуть между ними иррациональные. Так и с уравнениями, наряду с задачами, решаемыми точными математическими способами, жизнь изобилует иррациональными задачами, решить которые можно только численным способом. К таким относится задача движения трех тел в условиях «изолированной гравитации», где эти тела притягиваются друг к другу и больше никто на них не воздействует.
В задаче задаются начальные координаты и скорости этих тел, после чего тела свободно перемещаются в образованном ими гравитационном поле. Решением задачи является набор координат, при которых тела, выполнив ряд манипуляций, возвращаются в исходное состояние и продолжают движение по ранее описанным траекториям. При этом траектория движения и координаты тел в любой момент времени определяются численным интегрированием перемещений за очень малый промежуток времени.
И вот тут возвращаемся к Эйлеру. Он предложил рассчитывать вектор скорости в момент T0, как среднее между вектором в этот момент и вектором, в котором точка приближенно окажется в момент T0+dT. Эта простая формула также получается, если считать, что траектории между моментами T0 и T0+dT соответствует линии 2-го порядка.
Однако, решая разные наборы исходных данных, и получая различные рисунки траекторий, я натолкнулся на данные, решение которых никак не возвращалось в исходную точку. Траектория, полученная моей программой, показана на рис.1. Никакие ухищрения типа уменьшение шага интегрирования, оптимизация алгоритма обработки и прочие «секреты» программистов не помогали. Я, как и многие коллеги, стал «изобретать» функции для обработки длинных мантисс, надеясь, что это поможет найти правильное решение. А потом подумал, что у Эйлера компьютера не было, поэтому он придумывал способы решения задач, доступные простым людям. То есть, если использовать правильный контроль за ходом вычислительного процесса, сверхвысокая точность не понадобится. Так оно и оказалось. Достаточно было применить тот же модифицированный метод дважды, и траектория «выровнялась» и тела стали возвращаться в исходные точки. Результат показан на рис. 2
Исходные данные: масса всех тел 1. Гравитационная постоянная 1
Красное X=-1; Y=0; Vx=0,049050673; Vy=0,590194112
Зеленое X=1; Y=0; Vx=0,049050673; Vy=0,590194112
Синее X=0; Y=0; Vx=-0,098101346; Vy=-1,180388223
Таким образом, можно решать задачи итеративно, как например в методах Димсдейла или Рунге-Кутты, можно простым повторением предыдущего шага, наверное можно еще сотней способов. Главное - совершенно необязательно создавать громоздкие функции с расширенной точностью.