【Complex Analysis2】Julia set



2019年07月13日    Author:Guofei

文章归类: 0x53_复分析与积分变换    文章编号: 92502

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2019/07/13/complex_julia.html


julia set

我们讨论这个迭代式 $f(z)=z^2+c$

问题1

为什么不用更一般化的迭代式呢 $p(z)=az^2+bz+d$?
令$\phi(z)=az+b/2, c=ad+b/2+(b/2)^2$,有$\phi(p(z))=f(\phi(z))$

也就是,有下面这个图。

abc

进一步的,$p=\phi^{-1} \circ f \circ \phi $
再进一步,$p^{n \circ } = \phi^{-1} \circ f^{n\circ} \circ \phi $

结论是,我们只需要研究 $f(z)=z^2+c$ 就可以了

(本节$f^n$表示 $f^{n\circ}$)

定义

Julia set 是x的这样一个集合,其邻域对迭代表现出混沌性。
相反,Fatou set 是x的这样一个集合,其邻域对迭代不表现出混沌性。
Julia set 和 Fatou set 是补集

例子
以$f(z)=z^2$为例,对应的 julia set 是 \(\{ z\mid \mid z \mid =1\}\),对应的 Fatou set 是补集。

定义\(A(\infty)=\{z: f^n(z) \to\infty \}\),那么这个集合有如下性质:

  • $A(\infty)$ is open, connected, unbounded
  • $A(\infty)$是 Fatou set 的子集
  • $A(\infty)$的边界是 Julia set

推论:

  • Fatou set is open and unbounded
  • Julia set is closed and bounded set
  • $J(f) \cap F(f) = \varnothing$
  • completely invariant $f(J)=J, f(F)=F$

例子 $f(z)=z^2-2$
引入$\phi(w)=w+1/w$,就有$z^2=\phi^{-1} \circ f \circ \phi (z)$
可以找到$A(\infty)$, 进而找到边界 Julia set is $[-2,2]$
(过程不难,但有点绕,可以在纸上画一画)

数值方法

我们有这个定理:
对于$f(z)=z^2+c, R=\dfrac{1+\sqrt{1+4\mid c\mid}}{2}$
如果$\mid z_0 \mid >R$,那么$z_0 \in A(\infty)$ (也就是说$\lim\limits_{n\to \infty} f^{n\circ}(z_0)=\infty$)

所以,$\exists n, f^{n\circ}(z_0)>R \Longrightarrow z_0 \in A(\infty)$
(在迭代过程中,如果任意一次迭代,其值大于R,那么后面的值就趋近于无界)

这给我们一种用迭代法找 Julia set 的方法:
在迭代过程中,任意一次迭代值大于 R,就剔除 Julia set,到 max_iter 后画图
进一步,根据第一次出现R的迭代步骤的不同,可以涂上不同的颜色。

import numpy as np
import matplotlib.pyplot as plt

c = -0.75 + 0.2j
R = (1 + np.sqrt(1 + 4 * abs(c))) / 2

n_grid = 1000
Z = np.linspace(-2, 2, n_grid).reshape(1, n_grid) + np.linspace(2, -2, num=n_grid).reshape(n_grid, 1) * 1j
Julia_set = np.zeros_like(Z)
max_iter = 50
for i in range(max_iter):
    Z = np.where(Julia_set == 0, np.square(Z) + c, 2 * R)  # 已归入 Julia set 的点,记为大数,之后不再参与计算
    Julia_set = np.where((Julia_set == 0) & (np.abs(Z) > R), i, Julia_set)
    # 第一次归入Julia set,记入其迭代次数,如果不想画彩图,把i改为1

Julia_set = np.where(Julia_set == 0, 2 * max_iter, Julia_set)  # 到最后都没有剔除的点,赋值为 2*max_iter
plt.imshow(np.abs(Julia_set))
plt.show()

Mandelbrot set

c的集合,使得 $J(f)$是连通集。
精确的定义:\(M=\{c\in \mathbb C: J(z^2+c) \mathrm{\ is \ connected} \}\)

例如,$0, -2, 0.25 \in M, 1\not \in M$

TH1
$J(f) \mathrm{\ is \ connected} \Longleftrightarrow 0\not \in A(\infty)$

TH2
$c\in M \Longleftrightarrow \mid f^{n\circ} \mid \leq 2, \forall n\geq 1$

import numpy as np
import matplotlib.pyplot as plt

n_grid = 1000
c = np.linspace(-2, 2, n_grid).reshape(1, n_grid) + 1j * np.linspace(2, -2, n_grid).reshape(n_grid, 1)
Mandelbrot = np.zeros_like(c)
f_z = 0
max_iter = 30

for i in range(max_iter):
    f_z = np.where(Mandelbrot == 0, np.square(f_z) + c, 1e8)  # 已经被归入 Mandelbrot set 的点,记为很大,之后不再参与计算
    Mandelbrot = np.where((Mandelbrot == 0) & (np.abs(f_z) > 2), i, Mandelbrot)  # 记录首次大于2的迭代次数,如果不想画彩图,把 i 换成 1

Mandelbrot = np.where(Mandelbrot == 0, max_iter, Mandelbrot)
plt.imshow(np.abs(Mandelbrot))
plt.show()

(强烈建议跑一下这段代码,缩小c的范围,同时扩大迭代次数)

性质:

  • M is connected
  • $M\subset B_2(0)$
  • M的边界点叫做 Misiurewicz points,其性质是 $f^{n\circ}(0)$ is pre-periodic, but not periodic
    ($c=i$就是一个 Misiurewicz point,以此为例形象化说明,根据定义,c使Julia set介于连通集和非连通集之间,所以Julia set更像一条线,无限放大这条线,看起来就像分形曲线。与此同时,因为Mandelbrot的稠密和花纹性质,在i周围无限放大,也得到分形曲线)
  • Misiurewicz points 这条边界线稠密

Big Open Conjecture
The Mandelbrot set is locally connected, that is, for every $c\in M$ and every open set V with $c\in v$, there exists an open set U such that $c\in U\subset V$ and $U\cap M$ is connected.

参考资料

coursera:Introduction to Complex Analysis


您的支持将鼓励我继续创作!