你好,游客 登录 注册
背景:
阅读新闻

使用 Python 绘制 Mandelbrot 分形图

[日期:2019-05-01] 来源:Linux社区  作者:Linux [字体: ]

以前收集的关于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("programbbs.com")
savefig("www.programbbs.com.png")
show()

如下图:

使用 Python 绘制 Mandelbrot 分形图

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.programbbs.com')
plot.show()

图中是使用参数:x0=0 y0=0 zoom=2.0 N=200 R=2 a=6.0 b=4.0 step=0.001。生成的图像。不同的是,它们依次使用的是二次、三次幂的迭代。

如下图:

使用 Python 绘制 Mandelbrot 分形图

更多Python相关信息见Python 专题页面 https://www.programbbs.com/topicnews.aspx?tid=17

https://www.programbbs.com/rssFeed.aspx

本文永久更新链接地址https://www.programbbs.com/Linux/2019-05/158411.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款