В детстве мне крупно повезло. Когда я учился в восьмом классе, в нашем доме появился всамделишный компьютер ZX Spectrum 128, который подключался к нашему домашнему телевизору и позволял почувствовать себя программистом. После школы, кое-как разобравшись с уроками, я крепко залипал перед экраном и старался успеть до прихода родителей с работы (телевизор-то на всех один), сотворить что-нибудь сногсшибательное. Творил я тогда на неотъемлемом от компьютера, и даже от его клавиатуры, языке BASIC, а источником вдохновения служили журналы «Наука и жизнь», «Техника молодёжи» и «В мире науки» (перевод «Scientific American»), в которых к концу 80-х начали появляться регулярные рубрики для любителей ЭВМ. В результате многочасового сидения перед телевизором я ожидаемо приобрёл близорукость, однако вместе с очками пришла убеждённость в том, что математика, даже школьная, может быть безумно красивой и интересной!
В ноябрьском номере журнала «В мире науки» за 1986 год появилась статья, в которой рассказывалось, как с помощью очень простых вычислений можно генерировать на экране необычные, сложные и на удивление красивые картины. Речь в ней идёт о функциях на модулярных арифметиках, о динамических системах и клеточных автоматах. Среди прочих приводилась очень простая итерационная схема некоего Барри Мартина, опубликованная им ранее в статье «Graphic Potential of Recursive Functions»:
При многократном применении (итерациях) это преобразование из точки на плоскости порождает множество, обладающее причудливой и гармоничной структурой. Разнообразные картины можно получать, изменяя три параметра , и , начальную точку и масштаб изображения. Цвет точек определяется шагом итерации. Алгоритм предельно прост:
x = 0, y = 0
a = 1, b = 3, c = 0
col = 0
while true
(x, y) = (y - sign(x)*sqrt(abs(b*x + c)), a - x)
col = col + 1
if col > 10000
поменять цвет точки
col = 0
end
нарисовать точку с координатами (x, y)
end
Этот способ генерации сложных картин настолько прост, что я смог реализовать его даже на мучительно медленном Спектруме, получая обалденные изображения, которые называл «салфетками». Ну, а сейчас я за часик набросал для вас интерактивный рисователь «салфеток Мартина», с которым вы можете поиграть сами. А вот тут реализован эффектный «полёт» сквозь это множество.
Я очень рекомендую этот способ генерации изображений тем, кто хочет заинтересовать детей программированием и математикой. Он очень легко кодируется на чём угодно и производит впечатление на зрителей.
Круто, а почему так?
Но что же такого таится в мартиновской формуле, что способно порождать эту красоту? Можно ли как-то объяснить все эти пузыри, ритмичные мотивы, перетекающие друг в друга симметрии? Как вообще анализируют подобные системы?
Занимается этим раздел математики, который называется теорией динамических систем, граничащий с теорией хаоса. Я не буду сильно глубоко влезать в теорию, сосредоточившись на объяснении основных структур, а больше даже — на красивых картинках.
Изобилие параметров в формуле Мартина излишне. Чтобы проявить все существенные свойства этого отображения, достаточно коэффициента , при фиксированных значениях и . Таким образом, мы рассмотрим упрощённое преобразование, которое обозначим как :
Его, в свою очередь, можно представить композицией двух простых преобразований — нелинейного искажения , которое, не меняя координат , сдвигает точки вдоль , как показано на картинке ниже, и поворота на 90° против часовой стрелки :
Коэффициент приобретает теперь вполне определённый смысл: он отвечает за масштаб нелинейного сдвига. Важной особенностью этих преобразований является то, что они оба сохраняют площади, а значит и преобразование , искажая пространство, не сжимает или растягивает его, а только сдвигает и поворачивает. Таким образом, при многократном применении преобразования, точки пространства перемешиваются, не стягиваясь в точку и не разбегаясь на бесконечность.
Перемешивание качественно объясняет появление хаотичных областей, в которых не угадывается какой-либо структуры. Однако куда больше хаоса наш глаз привлекают организованные структуры. Обратите внимание на то, как при перемешивании постепенно выявляются три каплеобразные области, которые переходят друг в друга не сильно изменяясь. Они называются резонансами и соответствуют точкам, которые циклично переходят друг в друга под действием нашего преобразования. Вокруг резонансных точек вместо перемешивания происходит только вращение пространства.
Резонансы возникают между поворотом , который имеет период 4 (через четыре поворота на 90 ° всё точки возвращаются на место) и смещениями нелинейного преобразования . Из-за этого точки в разной степени недоворачиваются на положенные 90°, а поскольку смещение гладко и неравномерно, то большая часть точек никогда не вернётся на место, сколько их ни крути. Однако, каким-то точкам, всё-таки повезёт, и смещение с последующим поворотом сможет вернуть их через 2, 3, 5, 7 и более итераций. Это явление порождает точки, неподвижные для многократно применяемых преобразований, таких как и так далее.
Теперь мы можем детально разобрать происхождение основных элементов «салфетки Мартина», рождающихся из различных начальных точек.
Хаотические облака происходят в результате перемешивания пространства, а внутри них располагаются «пузыри», окружающие резонансы различного порядка. Эти пустоты на самом деле не пусты, они заполнены кольцевыми орбитами, демонстрирующими не перемешивание, а вращение пространства. Поскольку смещение гладко, то соседи резонансных точек немного недоворачиваются на каждом цикле, и по мере накопления, результаты итераций заполняют замкнутую орбиту. Это недоворачивание окрестностей резонанса тоже может оказаться в резонансе с периодом преобразования . В таком случае мы увидим, как овальная орбита сама распадается на цепочку полюсов более высокого порядка. Так на предыдущей картинке образовались симпатичные оранжевые колечки, четвёрками окружающие синие точки резонанса с периодом 17.
Между резонансами и хаотическими областями есть тесная связь. Резонансы порождаются так называемыми эллиптическими неподвижными точками преобразования , или полюсами, именно они окружены овальными траекториями. Но полюсы не могут появляться сами по себе: окружающие их овальные орбиты неизбежно пересекутся, образуя неподвижные точки другого типа — седловые точки. Эти точки неустойчивы, и соседние точки под действие отображения M разбегаются от них в разные стороны. Именно они и порождают хаотические области, которые заполняют пространство между упорядоченными областями, окружающими полюсы. Постоянно разбегаясь, эти точки обречены всё время оказываться замкнутыми в пределах одной сложной структуры: странного аттрактора. Подробнее об этом я рассказывал в серии статей, посвящённых динамическому хаосу.
Седловые точки соединяются особыми орбитами — инвариантными гетероклиническими многообразиями. Звучит, может быть, непонятно, но, согласитесь, красиво. А выглядят эти многообразия ещё красивее!
При любом значении параметра преобразование оставляет на месте линию . Именно она и является инвариантным многообразием этого преобразования. После поворота, она превращается в линию , и её отображение преобразованием выявляет множество всех седловых точек и гетероклинических орбит, которые их соединяют. Смотрите, как красиво они выявляют тонкие структуры хаотических областей для различных значений параметра :
Наконец, к картине инвариантных многообразий можно добавить красок. Для этого наложим их на карту скоростей с которой каждая точка пространства удаляется от своих соседей под действием преобразования :
Для полноты картины здесь можно полюбоваться тем, что происходит с этой красотой при плавном изменении параметра (осторожно, тяжёлый GIF).
Ещё со времени моих экспериментов на Спектруме меня не переставало удивлять, как сухая математика позволяет получать элегантные и гармоничные картины, сравнимые по «креативности» с человеческой фантазией или творениями живой природы. Благодаря этому удивлению я и стал профессионально заниматься теорией динамического хаоса, которая помогает наслаждаться красотой не только внешней, но и внутренней — в логике и неожиданных взаимосвязях между разными объектами и концепциями.