Множество Мандельброта
Одна короткая формула $z\to z^2+c$ порождает бесконечно сложную фрактальную границу.
Множество Мандельброта — набор комплексных чисел $c$, для которых итерация $z_{n+1}=z_n^2+c$ (начиная с $z_0=0$) не уходит в бесконечность.
Правило игры
Выбираем комплексное число $c$. Запускаем итерацию: $z_0=0$, затем многократно применяем $z\to z^2+c$. Возможны два исхода: либо последовательность остаётся ограниченной (точки не разбегаются), либо модуль $|z|$ растёт неограниченно. В первом случае $c$ принадлежит множеству Мандельброта, во втором — нет.
Доказано, что как только $|z|\gt2$, точка уже обязательно убежит. Поэтому критерий простой: итерируем и проверяем, превысил ли модуль $2$.
Проверка точек
Напишем функцию, возвращающую число итераций до «побега» (или $-1$, если точка осталась внутри за отведённое число шагов):
def escape(c, max_iter=50):
z = 0
for i in range(max_iter):
z = z*z + c
if abs(z) > 2:
return i # убежала на шаге i
return -1 # осталась внутри
for c in [0, -1, 1, 0.3+0.5j, -0.8+0.156j, 2]:
r = escape(c)
status = "внутри" if r == -1 else f"убежала на шаге {r}"
print(f"c={c}: {status}")Вывод:
c=0: внутри c=(-1+0j): внутри c=(1+0j): убежала на шаге 2 c=(0.3+0.5j): внутри c=(-0.8+0.156j): внутри c=2: убежала на шаге 1
Точки $c=0$ и $c=-1$ остаются ограниченными (они в множестве), а $c=1$ и $c=2$ быстро убегают (вне множества). Граница между «внутри» и «снаружи» бесконечно изломана — это и есть фрактал.
ASCII-картинка множества
Раскрасив плоскость по признаку «внутри/снаружи», получим узнаваемую форму. Сделаем грубую текстовую визуализацию:
def escape(c, max_iter=30):
z = 0
for i in range(max_iter):
z = z*z + c
if abs(z) > 2:
return False
return True
for row in range(-10, 11):
line = ""
for col in range(-30, 11):
c = complex(col/20, row/12)
line += "#" if escape(c) else " "
print(line)Вывод:
## #
#####
# ##
## ############ ###
##################
#####################
#######################
# ### ######################
########## ######################
###############################
####################################
###############################
########## ######################
# ### ######################
#######################
#####################
##################
## ############ ###
# ##
#####
## # Даже в такой грубой сетке проступает характерная форма множества Мандельброта: большое «тело» с почкой слева.
Как работает под капотом
Почему такая элементарная формула рождает бесконечную сложность? Итерация $z^2+c$ сочетает удвоение угла (от $z^2$) и сдвиг (от $+c$) — небольшое изменение $c$ может радикально поменять судьбу траектории. Граница множества имеет фрактальную размерность: сколько ни увеличивай, видны всё новые узоры, подобные целому. Это наглядный пример того, как простое детерминированное правило порождает безграничную сложность — связь комплексного анализа с теорией хаоса.
Частые ошибки
- Начинать итерацию не с нуля. Для множества Мандельброта всегда $z_0=0$, меняется только параметр $c$.
- Брать слишком мало итераций. Точки у границы убегают медленно, нужно достаточно шагов.
- Путать множество Мандельброта (по параметру $c$) с множествами Жюлиа (по начальному $z$ при фиксированном $c$).
Итог
- Множество Мандельброта — точки $c$, для которых итерация $z\to z^2+c$ не убегает в бесконечность.
- Критерий побега: как только $|z|\gt2$, точка уже не вернётся.
- Простое правило рождает фрактал с бесконечной сложностью — мост к теории хаоса.