УДК 004.925
Технические науки
Ильичев В. Ю., к.т.н., доцент кафедры «Тепловые двигатели и гидромашины» Калужский филиал ФГОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский
университет), г. Калуга, Россия Качурин А. В., студент кафедры «Тепловые двигатели и гидромашины» Калужский филиал ФГОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский
университет), г. Калуга, Россия
СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ PYTHON ДЛЯ ИССЛЕДОВАНИЯ
МНОЖЕСТВА МАНДЕЛЬБРОТА
Аннотация: Статья посвящена описанию технологии построения фрактального множества Мандельброта. С помощью языка Python и подключаемых к нему специальных библиотек и формируемых пользовательских функций созданы программы для двухмерной и трёхмерной визуализации указанного множества и его областей. Это позволяет читателю как ознакомиться со структурой множества Мандельброта, так и самостоятельно произвести численные эксперименты с использованием написанных авторами программных кодов, выложенных на сайте для свободного доступа. Также описанное исследование демонстрирует визуальные и вычислительные возможности языка Python и поэтому может быть полезной при его изучении.
Ключевые слова: множество Мандельброта, синергетика, теория хаоса, фрактал, библиотеки Python, визуализация.
Annotation: The article is devoted to the description of the technology for building a fractal Mandelbrot set. With the help of the Python language and special
libraries connected to it and user-generated functions, programs were created for two-dimensional and three-dimensional visualization of the specified set and its areas. This allows the reader to both get acquainted with the structure of the Mandelbrot set, and independently perform numerical experiments using program codes written by the authors, posted on the site for free access. Also, the described study demonstrates the visual and computational capabilities of the Python language and therefore can be useful in studying it.
Keywords: Mandelbrot set, synergy, chaos theory, fractal, Python libraries, visualization.
Введение
Теория хаоса [1], частью которой является теория фрактальных множеств [2; 3], является основой новой науки, синергетики [4], позволяющей исследовать процессы, происходящие в открытых термодинамических системах.
В данном направлении в настоящее время проводится множество исследований, поскольку синергетика призвана описать с помощью новых математических приёмов процессы самоорганизации реальных природных структур, которые до сих пор в-основном изучаются методами статистического анализа. В развитии таких структур наступают моменты бифуркации [5; 6] -резкого изменения течения процессов или внешнего вида систем, при плавном изменении её параметров (переход количественных изменений в качественные, детерминированного процесса в хаотичный). Многие природные объекты обладают не только свойствами самоорганизации, но и свойствами самоподобия - когда можно заметить, что с увеличением масштаба их наблюдаемая структура напоминает структуру, видимую при меньшем масштабе. Один из первооткрывателей таких явлений, Бенуа Мандельброт, назвал их фракталами, а первая полученная им самоподобная математическая система получила его имя - множество Мандельброта [7].
Существуют различные технологии построения данного множества,
однако для среды программирования Python данная процедура пока детально не отработана. Поэтому целью описываемой работы являлся подбор наилучших средств Python для визуализации множества и его частей как в двухмерном (2D), так и в трёхмерном (3D) виде.
Материал и методы исследования
Математическая формулировка принципа организации множества Мандельброта достаточно проста - оно представляет из себя такое множество точек (или чисел на комплексной плоскости с, каждое из которых состоит из двух частей: вещественной Real или x, и мнимой Imaginary или у), для каждой точки которого последовательность
+1 = 2 + с (1) при z0 = 0 ограничена. Это означает, что в каждой точке данного множества
существует некоторое значения комплексного числа, взятого по модулю |zw|,
которое не может превысить никакое последующее значение последовательности при любом натуральном n. В данном случае это предельное значение |zw| равно 2.
В таком случае, справедливо и следующее утверждение: точки комплексной плоскости, в которых последовательность с увеличением n стремится к бесконечности, не относятся к множеству Мандельброта (оказалось, что для практического применения теории в рамках данной работы, достаточно произвести такую проверку не более, чем для n=100 итераций -элементов последовательности). Однако, существуют зоны вблизи области данного множества, в которых последовательность не слишком быстро стремится к бесконечности. Для эффектного визуального изображения множества эти зоны также учитываются, но при выводе графики обозначаются другим цветом. В описываемой работе решено ограничиться предельным значением (ограничением) последовательности, равным 4, а цвет таких пограничных зон изменить. На рис. 1 продемонстрирована картина, формируемая первой версией программы на Python для визуализации
множества Мандельброта.
Рис. 1. Визуализация множества Мандельброта
На рисунке, представленном в статье, само множество окрашено чёрным цветом, а пограничные зоны - светлые. Серым же цветом отмечены области, не относящиеся к рассматриваемому множеству. В реальности все рисунки выводятся в цвете (часть из них представлена на сайте автора [8]) и выглядят гораздо эффектнее.
Из рис. 1 видно, что картина отличается наличием самоподобия. Зона множества, занимающая наибольшую площадь, называется кардиоидой. Её окружают фигуры разного размера, имеющие форму эллипса (эллипсоиды). Причём, если увеличивать граничные зоны множества, можно заметить, что каждая эллипсоида окружена в свою очередь эллипсоидами уменьшающегося размера. Благодаря свойству самоподобия данное множество, наряду с некоторыми другими, относится к ряду фрактальных (а часто его просто называют фракталом Мандельброта). Для демонстрации системы координат, которыми ограничен фрактал, создан рис. 2.
1.00 -0.75 -0.500.25-
о.оо-
-0.25-0.50 --0.75 --1.00 -
-1.5 -1.0 -0.5 0.0 0.5
Рис. 2. Комплексная плоскость размещения фрактала Мандельброта (ось абсцисс -
вещественная часть, ординат - мнимая)
Далее было необходимо разработать программу на Python, позволяющую исследовать отдельные участки фрактала. Для формирования более красочной картины, в отличии от метода, применённого при создании рис. 1, решено было применить такое раскрашивание, при котором цвет точки множества зависит от количества итераций, за которое |zw| становится больше 4.
Программа состоит из следующих функциональных блоков:
1. Импорт необходимых библиотек функций: Numpy [9] для работы с массивами данных, Colorsys для преобразования цветовой схемы формирования цвета точки из HSV в RGB, Matplotlib.pyplot [10] для создания графического 2D изображения и записи его в файл.
2. Присвоение значения переменной, означающей предельное количество итераций, accuracy=100 (или любого другого, в случае необходимости повышения точности построения области Мандельброта).
3. Создание основной функции вычисления последовательности mandelbrot_equation с двумя входными параметрами, означающими координату точки на комплексной плоскости и заданное в п. 2 количество итераций. Далее в этой функции присваивается начальное значение последовательности z=0 и в
цикле организовывается вычисление каждого последующего члена последовательности по формуле (1). В случае, если текущий член превышает 4, цикл прерывается. При этом номер текущей итерации преобразуется с помощью функции colorsys.hsv_to_rgb в цвет RGB, который выводится как результат функции mandelbrot_equation.
4. Создание трёх пустых массивов для занесения вычисляемых при каждой итерации значений абсциссы (вещественной части числа), ординаты (мнимой части числа) и цвета точки.
5. Организация цикла в цикле для последовательного перебора всех пар вещественных и мнимых частей чисел рассматриваемой комплексной плоскости (при этом задаются пределы и шаги изменения данных параметров). Из каждой пары чисел с помощью функции Complex модуля Numpy формируется комплексное число, используемое в качестве входного параметра функции mandelbrot_equation.
6. Созданные в п. 4 массивы после каждого выполнения п. 5 дополняются значениями абсциссы, ординаты и цвета текущей обрабатываемой точки.
7. После окончания цикличных вычислений, с помощью функции scatter (график разброса) модуля Matplotlib.pyplot по заполненным массивам атрибутов точек строится вычисленное изображение и с помощью команды savefig записывается в файл формата png (с возможностью выбора размера и формы каждой точки и разрешения графического файла).
На рис. 3 представлены сформированные таким образом изображения различных областей множества Мандельброта. По числовым осям можно проследить, какая часть фрактала (рис. 2) детализирована.
-0.2360 —0.2355 -0.2350 -0.2345 -0.2340 -0.2335 -0 2330 -0.2360 -0.2359 -0.2358 -0.2357 -0.2356 -0.2355 -&.0 -7.5 -70 -6-5 -60 -5-5 -5-0 -4-5 -40
Рис. 3. Выведенные в увеличенном виде части фрактала
На следующем этапе исследований решено было создать ещё одну версию программы на Python, позволяющую представить множество Мандельброта в трёхмерных координатах. Для большей наглядности каждую точку комплексной плоскости можно поднимать над ней на расстояние, пропорциональное количеству итераций, при котором достигается значение последовательности, большее 4. При этом элементы множества Мандельброта окажутся расположенными на одной высоте и выше всех остальных точек (так как за все итерации |zw| не достигнет значения 4). Точки, близкие к фракталу,
будут располагаться чуть ниже, поскольку значение |zw| в них достигает
предельного значения 4 раньше заданного максимального количества итераций.
В данной модификации программы на Python функция mandelbrot_equation выдаёт на выходе не только цвет точки, но и её положение по вертикальной оси (пропорциональное числу произведённых итераций). Для формирования трёхмерного пространства в начале программы подключается функция Axes3D из дополнительного модуля mpl_toolkits.mplot3d.
Результаты построенных с помощью этой программы фрактала и его области (последняя картинка на рис. 3) представлены на рис. 4.
Рис. 4. 3D образы множества Мандельброта и его части
Рисунки демонстрируют интересные визуальные эффекты, очень наглядно отражающие особенности распределения характеристик исследуемого множества. При варьировании цветовой гаммы (что позволяет делать функция colorsys.hsv_to_rgb) можно получить даже эффекты, имитирующие природные объекты. Например, на рис. 5, сформированном из полупрозрачных точек, можно увидеть структуры, напоминающие горные массивы.
Рис. 5. Альтернативный вариант визуализации фрактального образа
Заключение
Таким образом, в ходе описанной работы созданы программы на современном свободно распространяемом языке Python, продемонстрировано применение его библиотек и функций для реализации алгоритмов построения фрактального множества Мандельброта с помощью современных средств программирования и созданных авторами принципов визуализации. Коды созданных программ размещены на странице сайта одного из авторов [8] для бесплатного изучения, использования, модификации всеми желающими, проявляющими интерес к развиваемой области исследований.
Формируемые разработанными программами изображения не только позволяют более наглядно исследовать особенности организации фрактального множества Мандельброта (например, в процессе изучения синергетики, теории хаоса, термодинамики неравновесных систем и других современных отраслей науки), но и получать интересные визуальные эффекты. Как один из вариантов, их можно использовать в качестве элемента дизайна арт-объектов.
Дальнейшим развитием представленных методов может служить анимация результатов расчётов [11], которую также возможно организовать с помощью языка Python.
Авторы также надеются, что данная статья будет способствовать популяризации перспективных направлений научных разработок.
Библиографический список:
1. Козупица Г.С., Хадарцева К.А., Шелим Л.И. Теория хаоса-самоорганизации - фундамент развития общей теории систем. // Сложность. Разум. Постнеклассика. 2018. № 1. С. 63-70.
2. Ильичев В.Ю. Разработка программных средств увеличения изображений с использованием их фрактальных свойств. // Системный администратор. 2021. № 1-2 (218-219). С. 124-127.
3. Ilichev V.Y. Development of program for determination of fractal dimensions of images. // International Research Journal. 2021. № 4-1 (106). С. 6-10.
4. Еськов В.М., Попов Ю.М., Шелим Л.И., Филатов М.А. Синергетика как наука о сложности и сложности синергетики. // Сложность. Разум. Постнеклассика. 2017. № 4. С. 75-84.
5. Кузнецов А.П., Кузнецов С.П. Нелинейные колебания, катастрофы, бифуркации, хаос. // Izvestiya VUZ. Applied Nonlinear Dynamics. 2013. Т. 21. № 3. С. 1-10.
6. Ильичев В.Ю. Разработка программы для исследования аттрактора Лоренца и ее использование. // Сложные системы. 2021. № 1 (38). С. 56-63.
7. Шлык В.А. В защиту «хаоса», фрактальной геометрии, Бенуа Мандельброта и Анри Пуанкаре. // Педагогические и информационные технологии в образовании. 2002. № 5. С. 9.
8. Визуализация фрактального множества Мандельброта. [Электронный ресурс]. URL: http://turbopython.ru/Mandelbrot (Дата обращения 20.01.2021).
9. Ильичев В.Ю. Использование парсинга для создания базы метеорологических данных и разработка на её основе нейросетевой модели прогнозирования скорости ветра. // Системный администратор. 2020. № 10 (215). С. 92-95.
10. Ильичев В.Ю., Гридчин Н.В. Визуализация масштабируемых 3d-моделей с помощью модуля Matplotlib для Python. // Системный администратор. 2020. № 12 (217). С. 86-89.
11. Кизянов А.О. Создание анимации в Matplotlib на языке программирования Python. // Постулат. 2017. № 8 (22). С. 9.