以前收集的关于Mandelbrot分形图的Python脚本,Mandelbrot集合的图像因它洛可可式繁复卷曲华丽的风格而受到大众的欣赏和赞叹,与其他分形图案一起,是许多艺术家和设计师的灵感来源。
是由于今天个人电脑计算能力的强大,才有可能让我们在家中就能绘出从前只有在世界级研究中心里才能见到的绚丽图案。
from pylab import *
from numpy import NaN
def m(a):
z = 0
for n in range(1, 100):
z = z**2 + a
if abs(z) > 2:
return n
return NaN
X = arange(-2, .9, .002)
Y = arange(-1, 1, .002)
Z = zeros((len(Y), len(X)))
for iy, y in enumerate(Y):
print (iy, "of", len(Y))
for ix, x in enumerate(X):
Z[iy,ix] = m(x + 1j * y)
imshow(Z, cmap = plt.cm.prism, interpolation = 'none', extent = (X.min(), X.max(), Y.min(), Y.max()))
xlabel("linuxidc")
ylabel("linuxidc.com")
savefig("www.linuxidc.com.png")
show()
如下图:
Mandelbrot集
数学定义: $$f_c(z) = z^2+c$$
Mandelbrot集是\(f_c(z)\)在z=0,关于复数c=x+yi的函数迭代不发散序列集合。
绘制Mandelbrot集最简单的方法是使用逃逸时间进行绘制。逃逸时间指的是,在指定范围M进行有限次数N迭代,而不超出M区域的次数。使用不同的颜色绘制不同的迭代次数。
1.设置迭代的最多次数,N
2.设置初始化\(z_0\)的值,
3.设置逃逸半径R的值,通常为2
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plot
x0=0 #初始值z0的x0
y0=0 #初始值z0的y0
zoom=2.0 #放大倍率
N=200 #最大迭代次数
R=2 #迭代半径
a=6.0 #绘制图的横轴大小
b=5.0 #绘制图的纵轴大小
step=0.001 #绘制点的步长
def iterate(c,N,R):
z=c
for i in range(N):
if abs(z)>R:
return i
z = z*z+c
return N
x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)
y=np.arange(b/(2.0*zoom)+y0,-b/(2.0*zoom)+y0,-step)
cx,cy=np.meshgrid(x, y)
c = cx + cy*1j
ufunc=np.frompyfunc(iterate,3,1)
Z=ufunc(c,N,R).astype(np.float)
plot.imshow(Z,extent=(-a/2.0,a/2.0,-b/2,b/2.0))
cb = plot.colorbar(orientation='vertical',shrink=1)
cb.set_label('www.linuxidc.com')
plot.show()
图中是使用参数:x0=0 y0=0 zoom=2.0 N=200 R=2 a=6.0 b=4.0 step=0.001。生成的图像。不同的是,它们依次使用的是二次、三次幂的迭代。
如下图: