Компьютеры умеют оперировать большими числами, но здесь n говорит не о суммах, которые появляются в вычислениях; n характеризует сложность сумм. А мы здесь сталкиваемся с «проклятием размерности», где размерность системы равна количеству чисел, необходимых для ее описания.
Предположим, мы используем миллион шариков. Чтобы определить состояние каждого шарика, требуется шесть чисел: три для координат в пространстве, еще три для компонент скорости. Это шесть миллионов чисел — только для того, чтобы определить состояние системы в произвольный момент. Мы хотим воспользоваться законами механики и гравитации, чтобы предсказать будущее движение системы. Эти законы представляют собой дифференциальные уравнения, определяющие состояние системы на крохотный шаг вперед, в будущее, при известном текущем состоянии. При маленьком шаге по времени — пусть это будет, скажем, секунда — результат получится очень близким к реальному состоянию системы в будущем. Так что теперь нам придется вычислить сумму для шести миллионов чисел. Точнее говоря, нам придется получить шесть миллионов сумм для шести миллионов чисел — по одному суммированию на каждое число, необходимое для описания будущего состояния. Так что сложность наших расчетов составит шесть миллионов, умноженные на шесть миллионов, а это 36 триллионов. И посчитав все это, мы узнаем лишь, каким будет следующее состояние, через секунду после нынешнего. Повторив расчет еще раз, мы узнаем, что произойдет через две секунды, и т. д. Чтобы выяснить, что произойдет через тысячу лет, нам нужно просчитать период примерно в 30 миллиардов секунд, и сложность расчетов при этом составит 30 миллиардов, умноженные на 26 триллионов — около 10↑<sup>24</sup>, или один септиллион.
И это еще не самое худшее. Хотя каждый отдельный шаг, возможно, является хорошей аппроксимацией, шагов так много, что даже самая крохотная ошибка может значительно вырасти; кроме того, объемные вычисления занимают много времени. Если бы компьютер мог рассчитывать один шаг в секунду, то есть работал бы «в реальном времени», на расчеты потребовалось бы не меньше тысячи лет. Только суперкомпьютер способен хотя бы приблизиться к таким параметрам вычислений. Единственный выход — найти другой, более хитрый способ проводить вычисления. На ранних этапах столкновения действительно может потребоваться короткий шаг по времени — скажем, одна секунда, — потому что возникнет страшная путаница и все будет очень сложно. Позже шаг по времени можно сделать более длинным, результат, вероятно, останется приемлемым. Более того, как только две точки разойдутся на достаточно большое расстояние, сила взаимодействия между ними станет настолько маленькой, что ею, скорее всего, можно вообще пренебречь. Наконец, именно здесь можно получить наибольший выигрыш — весь расчет можно упростить, организовав его более хитроумным способом.
При первых попытках моделирования вводились дополнительные упрощения. Вместо того чтобы проводить вычисления для трехмерного пространства, задачу сводили к двум измерениям, а для этого предполагали, что все происходит в плоскости орбиты Земли. В этом варианте сталкиваются два круглых, а не два шарообразных тела. Такое упрощение дает два преимущества. Шесть миллионов превращаются всего лишь в четыре миллиона (по четыре числа на один пушистый шарик). Еще лучше, что вам уже не нужно миллиона шариков; возможно, 10 000 будет достаточно. Теперь вместо шести миллионов у вас будет 40 000, а сложность снизится с 36 триллионов до 1,6 миллиарда.
Да, и еще одно…
Мало провести расчет один раз. Мы не знаем ни массы прилетевшего тела, ни его скорости, ни направления, с которого оно подлетает к Земле. Каждый вариант требует нового расчета. Именно это сильнее всего ограничивало исследователей в ранних попытках, поскольку компьютеры тогда считали намного медленнее. Время на суперкомпьютере тоже стоило дорого, так что исследовательских грантов хватало лишь на небольшое число прогонов. |