Рисуем множество Мандельброта вручную: пошаговое руководство
Множество Мандельброта – это одна из самых известных и красивых фрактальных фигур в математике. Хотя для его построения обычно используются компьютеры, его можно нарисовать и вручную, понимая принципы его формирования. В этой статье мы подробно рассмотрим, как это сделать, шаг за шагом.
## Что такое множество Мандельброта?
Множество Мандельброта – это множество комплексных чисел `c`, для которых последовательность, определенная рекурсивно:
`z_{n+1} = z_n^2 + c`
где `z_0 = 0`, остается ограниченной по модулю. Другими словами, если мы многократно применяем эту формулу, значения `z_n` не уходят в бесконечность. На практике, если после определенного числа итераций (например, 100 или 200) модуль `z_n` превышает некоторое значение (обычно 2), мы считаем, что последовательность расходится и `c` не принадлежит множеству Мандельброта.
## Подготовка к рисованию
1. **Материалы:**
* Бумага в клетку (миллиметровка предпочтительнее).
* Карандаши разной твердости (для контуров и раскрашивания).
* Линейка.
* Ластик.
* Цветные карандаши или маркеры (для раскрашивания).
2. **Выбор области:**
Множество Мандельброта располагается в комплексной плоскости. Наиболее интересная его часть лежит в области от `-2` до `0.5` по действительной оси (Re) и от `-1.5` до `1.5` по мнимой оси (Im). Нам нужно выбрать масштаб, который позволит нам достаточно детально отобразить эту область на бумаге. Например, можно взять масштаб 1 см = 0.1 единицы комплексной плоскости. Это означает, что область, которую мы будем рисовать, будет примерно 25 см в ширину и 30 см в высоту. Размер бумаги должен быть соответствующим.
3. **Создание сетки:**
Нарисуйте на бумаге прямоугольную систему координат. Ось X (горизонтальная) будет соответствовать действительной части комплексного числа (Re), а ось Y (вертикальная) – мнимой части (Im).
* Отметьте начало координат (0, 0) примерно в центре листа.
* Проведите оси X и Y.
* Разметьте оси с шагом, соответствующим выбранному масштабу. Например, если 1 см = 0.1, то каждый сантиметр будет соответствовать 0.1 единицы.
* Обозначьте значения на осях: -2, -1.5, -1, -0.5, 0, 0.5 по оси X и -1.5, -1, -0.5, 0, 0.5, 1, 1.5 по оси Y.
## Алгоритм рисования
Для каждой точки `c` на комплексной плоскости мы будем проверять, принадлежит ли она множеству Мандельброта. Мы будем делать это путем итеративного вычисления последовательности `z_{n+1} = z_n^2 + c`.
1. **Выбор точки `c`:**
Выберите точку на вашей сетке. Например, `c = (-1, 1)` (Re = -1, Im = 1). Это соответствует комплексному числу `c = -1 + 1i`.
2. **Инициализация:**
Установите `z_0 = 0` (то есть `z_0 = 0 + 0i`).
3. **Итерации:**
Вычислите последующие значения `z_n` по формуле `z_{n+1} = z_n^2 + c`. Напомним, что `z` и `c` – это комплексные числа. Для умножения комплексных чисел используется формула:
`(a + bi)(c + di) = (ac – bd) + (ad + bc)i`
Поэтому, если `z_n = a + bi`, то `z_n^2 = (a^2 – b^2) + 2abi`.
Тогда `z_{n+1} = (a^2 – b^2 + Re(c)) + (2ab + Im(c))i`
Давайте проведем несколько итераций для нашей точки `c = -1 + 1i`:
* `z_0 = 0 + 0i`
* `z_1 = z_0^2 + c = (0^2 – 0^2 + (-1)) + (2 * 0 * 0 + 1)i = -1 + 1i`
* `z_2 = z_1^2 + c = ((-1)^2 – 1^2 + (-1)) + (2 * (-1) * 1 + 1)i = (1 – 1 – 1) + (-2 + 1)i = -1 – 1i`
* `z_3 = z_2^2 + c = ((-1)^2 – (-1)^2 + (-1)) + (2 * (-1) * (-1) + 1)i = (1 – 1 – 1) + (2 + 1)i = -1 + 3i`
* `z_4 = z_3^2 + c = ((-1)^2 – 3^2 + (-1)) + (2 * (-1) * 3 + 1)i = (1 – 9 – 1) + (-6 + 1)i = -9 – 5i`
4. **Проверка на ограниченность:**
После каждой итерации нужно проверять, не ушел ли модуль `z_n` слишком далеко от начала координат. Модуль комплексного числа `z = a + bi` вычисляется как `|z| = sqrt(a^2 + b^2)`. На практике достаточно проверять, не превышает ли `a^2 + b^2` некоторое пороговое значение, например, 4 (что соответствует модулю больше 2). Это значительно упрощает вычисления.
В нашем примере:
* `|z_1|^2 = (-1)^2 + 1^2 = 2 < 4` * `|z_2|^2 = (-1)^2 + (-1)^2 = 2 < 4` * `|z_3|^2 = (-1)^2 + 3^2 = 10 > 4`
Уже на третьей итерации модуль `z_3` превысил 2 (квадрат модуля превысил 4). Это означает, что последовательность, скорее всего, расходится, и точка `c = -1 + 1i` не принадлежит множеству Мандельброта.
5. **Раскрашивание (или пометка):**
* Если после заданного числа итераций (например, 100) модуль `z_n` так и не превысил порог, считаем, что точка `c` принадлежит множеству Мандельброта. Закрашиваем ее черным цветом или как-то помечаем.
* Если модуль `z_n` превысил порог раньше, чем было достигнуто заданное число итераций, считаем, что точка `c` не принадлежит множеству Мандельброта. Можно оставить ее белой, либо раскрасить в цвет, зависящий от количества итераций, потребовавшихся для выхода за порог. Например, чем меньше итераций потребовалось, тем ярче цвет.
6. **Повторение для всех точек:**
Повторите шаги 1-5 для каждой точки на вашей сетке. Чем больше точек вы проверите, тем более детальным получится изображение множества Мандельброта.
## Практические советы и упрощения
* **Используйте симметрию:** Множество Мандельброта симметрично относительно оси X. Это означает, что если точка `c = a + bi` принадлежит множеству, то и точка `c’ = a – bi` также принадлежит множеству. Это позволяет сократить количество вычислений вдвое.
* **Оптимизация вычислений:** Вместо вычисления квадратного корня для определения модуля, можно сравнивать квадрат модуля с квадратом порога (как было показано выше). Это быстрее.
* **Разные цвета для разных скоростей сходимости:** Раскрашивание точек, не принадлежащих множеству, в разные цвета в зависимости от количества итераций, потребовавшихся для выхода за порог, позволяет увидеть структуру вокруг множества Мандельброта. Чем быстрее последовательность `z_n` уходит в бесконечность, тем дальше от множества находится точка `c`.
* **Начните с низкого разрешения:** Сначала можно проверить несколько точек с большим шагом, чтобы понять общую форму множества. Затем можно увеличить разрешение и проверить больше точек в интересных областях.
* **Используйте таблицу цветов:** Чтобы упростить раскрашивание, можно заранее составить таблицу соответствия между количеством итераций и цветом. Это сделает процесс раскрашивания более систематическим и предсказуемым.
## Пример раскрашивания
Предположим, мы выполнили 100 итераций для каждой точки и установили порог `|z| > 2`. Мы можем использовать следующую таблицу цветов:
| Количество итераций до выхода за порог | Цвет |
| :————————————— | :————————– |
| 1-10 | Ярко-красный |
| 11-20 | Оранжевый |
| 21-30 | Желтый |
| 31-40 | Светло-зеленый |
| 41-50 | Зеленый |
| 51-60 | Светло-синий |
| 61-70 | Синий |
| 71-80 | Фиолетовый |
| 81-90 | Темно-фиолетовый |
| 91-100 | Черный (принадлежит множеству) |
## Углубленное изучение: Комплексные числа и фракталы
Множество Мандельброта тесно связано с комплексными числами и фракталами. Комплексное число — это число вида `a + bi`, где `a` и `b` — действительные числа, а `i` — мнимая единица, удовлетворяющая уравнению `i^2 = -1`. Комплексные числа можно представлять как точки на плоскости, где ось X соответствует действительной части, а ось Y — мнимой части. Операции сложения и умножения комплексных чисел имеют геометрическую интерпретацию на этой плоскости.
Фрактал — это геометрическая фигура, обладающая свойством самоподобия, то есть она состоит из частей, подобных всей фигуре целиком. Множество Мандельброта является фракталом, поскольку при увеличении его границ можно увидеть структуры, напоминающие исходное множество. Это бесконечное самоподобие делает множество Мандельброта одним из самых интересных объектов для изучения в математике.
## Заключение
Рисование множества Мандельброта вручную – это трудоемкий, но очень познавательный процесс. Он позволяет понять принципы построения фракталов и оценить красоту математики. Хотя современные компьютеры могут сгенерировать гораздо более детальные изображения, ручное рисование дает уникальное понимание алгоритма и структуры множества Мандельброта. Попробуйте это сделать, и вы откроете для себя удивительный мир фрактальной геометрии!