Множество Жюлиа

Множество названо в честь французского математика Гастона Жюлиа (1893-1978), который одновременно с Пьером Фату (1878-1929) в 1917-19 гг. написал основополагающие статьи по итерированию функций комплексного переменного. В работе был проведен ряд математических исследований, которые далеко опередили свое время в том смысле, что потребовалось более пятидесяти лет, прежде чем компьютерная графика, достигла уровня, позволяющего наблюдать эти математические объекты.

Для графического построения множества Жюлиа, необходимы начальные знания по теории функций комплексного переменного (ТФКП).

Пусть C обозначает множество всех комплексных чисел вида $z = a+ib$. Вещественная часть z равна а, а мнимая часть z равна вещественному числу b:
$$
a = Re(z) \\
b = Im(z)
$$

Модуль комплексного числа $z = a+ib$ определяется как
$$
|z| = \sqrt{a^2+b^2}
$$

Когда мы говорим, что последовательность комплексных чисел $[z_n]_{n=1}^\infty $ стремится к бесконечности:
$$
\lim_{n \to\infty} z_n = \infty
$$

то под этим мы понимаем, что для любого данного $M > 0$ существует $N > 0$ такое, что для всех $n > N$ справедливо $|z_n|>M$, то есть все точки $z_n$ лежат вне круга радиуса M для достаточно больших значений n.

Ограничимся далее рассмотрением функций, которые представляют собой полиномы одного комплексного переменного. Пусть
$$
f(z)=a_n z^n + a_{n-1}z^{n-1} + \dots + a_1 z + a_0, \qquad a_n\neq 0
$$

- полином степени $n\geq 2$. Коэффициенты $a_n,a_{n-1},\dots,a_1, a_0$ - комплексные числа (в частном случае - вещественные).

Множество Жюлиа функции $f(z)$, обозначаемое $J(f)$, определяется как
$$
J(f) = \delta \{z:f^{(n)}\to \infty \mbox{ при } n \to \infty \}.
$$

Таким образом, множество Жюлиа функции f есть граница множества точек z, стремящихся к бесконечности при итерировании f(z).

Можно написать простую программу для построения заполняющего множества Жюлиа. Заполняющее множество Жюлиа состоит из точек, орбиты которых пойманы, в отличие от границы этого множества, которое и является настоящим множеством Жюлиа. Заполняющие множества более привлекательны визуально и именно по этой причине наиболее часто реализуются программно. Такая программа наилучшим образом работает в случае множеств Жюлиа, обладающих притягивающей периодической орбитой.

Наиболее простые и в то же время визуально интересные - это построения множества Жюлиа квадратичных функций:
$$
f_c(z) = z^2+c,
$$

где c - константа в C (см. рис. 1).


Рис.1. Анимация множества Жюлиа для квадратичного полинома $f_c(z) = z^2+c$. Значения c для каждого кадра вычисляются по формуле: c=r*cos(a)+i*r*sin(a), где: a=(0..2*Pi), r=0,7885.

Следующая программа, записанная в псевдокодах, строит заполняющее множество Жюлиа.

Алгоритм

Вход:
c1, c2 - комплексное число c = c1+c2i
(a, b) - центр окна
s - размер окна
p - число пикселей в каждой стороне

Выход: изображение заполняющего множества Жюлиа

for m = 1 to p
 x0 = a - s/2 + ms/p
  for n=1 to p
   y0 = b - s/2 + ns/p
   x = x0
   y = y0
   z = 0
   iter = 1
   while iter < 20
    iter = iter + 1
    x1 = x*x + y*y + c1
    y1 = 2xy + c2
    x = x1
    y = y1
    z = x*x + y*y
    if z > 4, выход из цикла, end if
   end while
   if z < 4, построить (x0, y0), end if
  end for
end for

Для каждой точки z0 = (x0; y0) экрана нужно в цикле последовательно вычислять zk+1 по zk, используя формулу $z_{k+1}=z_k^2+c$ (в координатах это выглядит так: $x_{k+1}=x_k^2 - y_k^2 + p, y_{k+1} = 2x_k y_k + q$). Признаком остановки цикла является выполнение условия: на k-м шаге точка zk вышла из круга D (то есть верно неравенство $|z_k|=\sqrt{x_k^2+y_k^2}>R$).

На рис. 2, 3 приведены некоторые заполняющие множества Жюлиа, полученные с помощью данного алгоритма.


Рис.2. Заполняющее множество Жюлиа для z2-1.

Рис.3. Заполняющее множество Жюлиа для z2-0.20+0.75i.
Направление: