0

【Complex Analysis2】Julia set

 3 years ago
source link: https://www.guofei.site/2019/07/13/complex_julia.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【Complex Analysis2】Julia set

2019年07月13日

Author: Guofei

文章归类: 5-3-复分析与积分变换 ,文章编号: 92502


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

Edit

julia set

我们讨论这个迭代式 f(z)=z2+cf(z)=z2+c

问题1

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

也就是,有下面这个图。

abc

进一步的,p=ϕ−1∘f∘ϕp=ϕ−1∘f∘ϕ
再进一步,pn∘=ϕ−1∘fn∘∘ϕpn∘=ϕ−1∘fn∘∘ϕ

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

(本节fnfn表示 fn∘fn∘)

定义

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

例子
以f(z)=z2f(z)=z2为例,对应的 julia set 是 {z∣∣z∣=1}{z∣∣z∣=1},对应的 Fatou set 是补集。

定义A(∞)={z:fn(z)→∞}A(∞)={z:fn(z)→∞},那么这个集合有如下性质:

  • A(∞)A(∞) is open, connected, unbounded
  • A(∞)A(∞)是 Fatou set 的子集
  • A(∞)A(∞)的边界是 Julia set
  • Fatou set is open and unbounded
  • Julia set is closed and bounded set
  • J(f)∩F(f)=∅J(f)∩F(f)=∅
  • completely invariant f(J)=J,f(F)=Ff(J)=J,f(F)=F

例子 f(z)=z2−2f(z)=z2−2
引入ϕ(w)=w+1/wϕ(w)=w+1/w,就有z2=ϕ−1∘f∘ϕ(z)z2=ϕ−1∘f∘ϕ(z)
可以找到A(∞)A(∞), 进而找到边界 Julia set is [−2,2][−2,2]
(过程不难,但有点绕,可以在纸上画一画)

数值方法

我们有这个定理:
对于f(z)=z2+c,R=1+1+4∣c∣−−−−−−−√2f(z)=z2+c,R=1+1+4∣c∣2
如果∣z0∣>R∣z0∣>R,那么z0∈A(∞)z0∈A(∞) (也就是说limn→∞fn∘(z0)=∞limn→∞fn∘(z0)=∞)

所以,∃n,fn∘(z0)>R⟹z0∈A(∞)∃n,fn∘(z0)>R⟹z0∈A(∞)
(在迭代过程中,如果任意一次迭代,其值大于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)J(f)是连通集。
精确的定义:M={c∈C:J(z2+c) is connected}M={c∈C:J(z2+c)isconnected}

例如,0,−2,0.25∈M,1∉M0,−2,0.25∈M,1∉M

TH1
J(f) is connected⟺0∉A(∞)J(f)isconnected⟺0∉A(∞)

TH2
c∈M⟺∣fn∘∣≤2,∀n≥1c∈M⟺∣fn∘∣≤2,∀n≥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⊂B2(0)M⊂B2(0)
  • M的边界点叫做 Misiurewicz points,其性质是 fn∘(0)fn∘(0) is pre-periodic, but not periodic
    (c=ic=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∈Mc∈M and every open set V with c∈vc∈v, there exists an open set U such that c∈U⊂Vc∈U⊂V and U∩MU∩M is connected.

参考资料

coursera:Introduction to Complex Analysis


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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK