`
isiqi
  • 浏览: 16332732 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Mandelbrot集

阅读更多

Mandelbrot集

分形资源网

http://www.shimen.org/web/shimen/teachers/shuxue/zhouwsShuXuezy/wlhj/web/yingyuan.htm

曼德布洛特集合(Mandelbrot set)是在复平面上组成分形的点的集合。Mandelbrot集合可以用复二次多项式f(z)=z^2+c来定义。

  其中c是一个复参数。对于每一个c,从z=0开始对f(z)进行迭代

  序列 (0, f(0), f(f(0)), f(f(f(0))), .......)的值或者延伸到无限大,或者只停留在有限半径的圆盘内。

  曼德布洛特集合就是使以上序列不延伸至无限大的所有c点的集合。

  从数学上来讲,曼德布洛特集合是一个复数的集合。一个给定的复数c或者属于曼德布洛特集合M,或者不是。

计算的方法

  曼德布洛特集合一般用计算机程序计算。对于大多数的分形软件,例如Ultra fractal,内部已经有了比较成熟的例子。下面的程序是一段伪代码,表达了曼德布洛特集合的计算思路。

  For Each z0 in Complex

  repeats = 0

  z=z0

  Do

  z=z^2+z0

  repeate = repeats+1

  Loop until abs(z)>Bailout or repeats >= MaxRepeats

  If repeats >= MaxRepeats Then

  Draw z0,Black

  Else

  Draw z0,f(z,z0,Repeats) 'f返回颜色

  End If

  Next

Julia 集:对复平面上的一个二次映射迭代,即f(z) = z*z + C,对平面上的一点 z=z0 进行迭代,经足够多次迭代后函数值不扩散,这类z0点组成的集合为Julia集,对每一个特定的C都有一个相应Julia集,记为J(C) , C为复数;或 J(a,b) , a、b为C 的实部和虚部。


Mandelbrot集: M集是使Julia集为连通的参数C的集合。它的另一个等价的定义为对每一个C,让z0=0代入迭代式:f(z) = z*z + C,经足够多次迭代后函数值不扩散,这样的C所组成的集合为M集。1980年当 B. B. Mandelbrot第一次画出它的图形以来,M集就被认为是数学上最为复杂的集合之一,又是如此的美丽,它吸引了大批的科学家和爱好者。M集又被称为“数学恐龙”,它已成为混沌、分形最为重要的标志之一。

M集与J集的简单高次迭代:n次迭代式为f(z)=z^n+C (“x^y”表示x的y次方)。

神奇的分形艺术(四):Julia集和Mandelbrot集

icon2Brain Storm | icon4 2007-08-17 12:55| icon328 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com

考虑函数f(z)=z^2-0.75。固定z0的值后,我们可以通过不断地迭代算出一系列的z值:z1=f(z0), z2=f(z1), z3=f(z2), ...。比如,当z0 = 1时,我们可以依次迭代出:
z1 = f(1.0) = 1.0^2 - 0.75 = 0.25
z2 = f(0.25) = 0.25^2 - 0.75 = -0.6875
z3 = f(-0.6875) = (-0.6875)^2 - 0.75 = -0.2773
z4 = f(-0.2773) = (-0.2773)^2 - 0.75 = -0.6731
z5 = f(-0.6731) = (-0.6731)^2 - 0.75 = -0.2970
...
可以看出,z值始终在某一范围内,并将最终收敛到某一个值上。
但当z0=2时,情况就不一样了。几次迭代后我们将立即发现z值最终会趋于无穷大:
z1 = f(2.0) = (2.0)^2 - 0.75 = 3.25
z2 = f(3.25) = (3.25)^2 - 0.75 = 9.8125
z3 = f(9.8125) = (9.8125)^2 - 0.75 = 95.535
z4 = f(95.535) = (95.535)^2 - 0.75 = 9126.2
z5 = f(9126.2) = (9126.2)^2 - 0.75 = 83287819.2
...
经过计算,我们可以得到如下结论:当z0属于[-1.5, 1.5]时,z值始终不会超出某个范围;而当z0小于-1.5或大于1.5后,z值最终将趋于无穷。
现在,我们把这个函数扩展到整个复数范围。对于复数z0=x+iy,取不同的x值和y值,函数迭代的结果不一样:对于有些z0,函数值约束在某一范围内;而对于另一些z0,函数值则发散到无穷。由于复数对应平面上的点,因此我们可以用一个平面图形来表示,对于哪些z0函数值最终趋于无穷,对于哪些z0函数值最终不会趋于无穷。我们用深灰色表示不会使函数值趋于无穷的z0;对于其它的z0,我们用不同的颜色来区别不同的发散速度。由于当某个时候|z|>2时,函数值一定发散,因此这里定义发散速度为:使|z|大于2的迭代次数越少,则发散速度越快。这个图形可以编程画出。和上次一样,我用Pascal语言,因为我不会C的图形操作。某个MM要过生日了,我把这个自己编程画的图片送给她^_^

{$ASSERTIONS+}

uses graph;

type
complex=record
re:real;
im:real;
end;

operator * (a:complex; b:complex) c:complex;
begin
c.re := a.re*b.re - a.im*b.im;
c.im := a.im*b.re + a.re*b.im;
end;

operator + (a:complex; b:complex) c:complex;
begin
c.re := a.re + b.re;
c.im := a.im + b.im;
end;

var
z,c:complex;
gd,gm,i,j,k:integer;
begin
gd:=D8bit;
gm:=m640x480;
InitGraph(gd,gm,'');
Assert(graphResult=grOk);

c.re:=-0.75;
c.im:=0;
for i:=-300 to 300 do
for j:=-200 to 200 do
begin
z.re:=i/200;
z.im:=j/200;
for k:=0 to 200 do
begin
if sqrt(z.re*z.re + z.im*z.im) >2 then break
else z:=(z*z)+c;
end;
PutPixel(i+300,j+200,k)
end;

readln;
CloseGraph;
end.


代码在Windows XP SP2,FPC 2.0下通过编译,麻烦大家帮忙报告一下程序运行是否正常(上次有人告诉我说我写的绘图程序不能编译)。在我这里,程序运行的结果如下:



这个美丽的分形图形表现的就是f(z)=z^2-0.75时的Julia集。考虑复数函数f(z)=z^2+c,不同的复数c对应着不同的Julia集。也就是说,每取一个不同的c你都能得到一个不同的Julia集分形图形,并且令人吃惊的是每一个分形图形都是那么美丽。下面的六幅图片是取不同的c值得到的分形图形。你可能不相信这样一个简单的构造法则可以生成这么美丽的图形,这没什么,你可以改变上面程序代码中c变量的值来亲自验证。

c = 0.45, -0.1428


c = 0.285, 0.01


c = 0.285, 0


c = -0.8, 0.156


c = -0.835, -0.2321


c = -0.70176, -0.3842




类似地,我们固定z0=0,那么对于不同的复数c,函数的迭代结果也不同。由于复数c对应平面上的点,因此我们可以用一个平面图形来表示,对于某个复数c,函数f(z)=z^2+c从z0=0开始迭代是否会发散到无穷。我们同样用不同颜色来表示不同的发散速度,最后得出的就是Mandelbrot集分形图形:


前面说过,分形图形是可以无限递归下去的,它的复杂度不随尺度减小而消失。Mandelbrot集的神奇之处就在于,你可以对这个分形图形不断放大,不同的尺度下你所看到的景象可能完全不同。放大到一定时候,你可以看到更小规模的Mandelbrot集,这证明Mandelbrot集是自相似的。下面的15幅图演示了Mandelbrot集的一个放大过程,你可以在这个过程中看到不同样式的分形图形。



玩Mathematica之十三——Mandelbrot集之舞

分享到:
评论

相关推荐

    论文研究-广义Mandelbrot集的控制 .pdf

    广义Mandelbrot集在数学研究领域是复动力系统理论中的一个重要概念。它与Julia集紧密相关,Julia集是由Gaston Julia首次提出的,描述了复迭代函数的性质和行为。Mandelbrot集则是以著名数学家Benoit Mandelbrot命名...

    广义Mandelbrot集的分形结构的研究(硕士论文)

    非线性理论是描述复杂系统结构形态的一门新兴边缘科学。它包含了分形、混沌和 孤子这三个非常重要的概念。本文侧重研究了分形学中具有重要意义的广义Mandelbrot 集(简称广义M集)的分形结构,并取得了一些研究成果。

    Mandelbrot集和Julia集.rar_ Mandelbrot_Julia C_Julia集_Mandelbrot_Man

    《Mandelbrot集与Julia集:C++实现及分形艺术的探索》 Mandelbrot集和Julia集是数学中的两个经典分形,它们在计算机图形学和艺术领域有着广泛的应用。这个压缩包文件包含了用C++语言编写的小程序,用于绘制和探索这...

    基于MFC的Mandelbrot集和julia集的画法

    **基于MFC的Mandelbrot集和Julia集的画法** MFC(Microsoft Foundation Classes)是微软提供的一种C++类库,用于构建Windows应用程序,它为开发者提供了丰富的控件和界面元素,使得开发图形用户界面(GUI)变得更加...

    Mandelbrot集和Julia集的分形图之matlab实现.pdf

    **Mandelbrot集与Julia集的分形图MATLAB实现** Mandelbrot集和Julia集是数学中的两个重要概念,属于复数域上的分形几何研究对象。它们通过迭代函数系统来创建复杂的、自相似的图形,展示了分形理论的魅力。 **1. ...

    c++画分形之Mandelbrot集

    **C++绘制曼德博集合(Mandelbrot Set)** 曼德博集合是数学中一个著名的复数集合,由法国数学家本华·曼德博在20世纪70年代发现,它以其复杂的细节和无限的自相似性而闻名。在计算机图形学中,这个集合经常被用来...

    分形集生成算法,julia集,mandelbrot集生成算法

    本主题将深入探讨两个著名的分形集——Julia集和Mandelbrot集,以及如何通过算法生成它们。我们将讨论这些集合的基本原理、生成算法以及三维Mandelbrot集的实现。 首先,让我们了解什么是分形。分形是一种具有自...

    VC6实现Mandelbrot集

    **VC6实现Mandelbrot集** Mandelbrot集是数学中著名的分形图形,以其复杂的边界和无限的细节而著称。在计算机图形学领域,它常被用来展示迭代算法和复杂性的美。本项目是使用Visual C++ 6.0(简称VC6)这一经典开发...

    毕业设计MATLAB_函数生成Mandelbrot集和Julia集分形.zip

    **MATLAB源码详解:构建Mandelbrot集与Julia集** 在计算机科学和数学领域,Mandelbrot集和Julia集是分形几何中的两个重要概念,它们通过迭代复数运算来生成复杂的图形。MATLAB作为一款强大的数值计算软件,常被用于...

    用MATLAB编写的Julia集和Mandelbrot集分形图案

    在计算机图形学和数学领域,Julia集和Mandelbrot集是两个非常著名的分形图形。它们由法国数学家Benoît Mandelbrot在20世纪80年代提出,成为了分形几何研究的标志性例子。MATLAB作为一种强大的数值计算和可视化工具...

    Mandelbrot集和Julia集的图像绘制

    总结来说,Mandelbrot集和Julia集的图像绘制涉及到复数运算、迭代算法、分形理论以及计算机图形学。通过编程,我们可以探索这些集合的美丽和复杂性,同时也深入理解分形几何和复数系统的性质。在VC++环境下,可以...

    Mandelbrot集的java多线程实现方法.pdf

    Mandelbrot集是复平面上的一个点集,由所有具有给定逃逸半径的复数构成。Mandelbrot集在分形几何和计算机图形学中非常重要。实现Mandelbrot集的渲染通常需要进行大量迭代计算,因而十分适合使用并行处理来加速。Java...

    基于广义Mandelbrot 集的分形图像压缩算法研究

    ### 基于广义Mandelbrot集的分形图像压缩算法研究 #### 引言 分形图像压缩作为一种新兴的图像压缩方法,凭借其独特的分形几何理论基础,能够在保持良好图像重建质量的同时实现高比例的图像压缩。然而,传统分形...

    彩色HOMFLY和广义Mandelbrot集

    Mandelbrot集是在映射f(x)的模空间中迭代映射F n(x)= f°n(x)-x的结果x(F n,F m)的零集的闭合。 奇妙的事实是,对于给定的n,所有零都不在模空间周围无序分散,而是位于平滑曲线上,只有几个尖点位于判别x...

    MFC程序_曼德布络特分形_Mandelbrot集

    在这个特定的项目中,“MFC程序_曼德布络特分形_Mandelbrot集”是一个使用MFC框架编写的程序,其主要功能是生成著名的数学图形——曼德布洛特集。 **曼德布洛特集(Mandelbrot Set)** 曼德布洛特集是由法国数学家...

    mandelbrot-js, 在 HTML5 Canvas 中使用 JavaScript,快速绘制Mandelbrot集.zip

    mandelbrot-js, 在 HTML5 Canvas 中使用 JavaScript,快速绘制Mandelbrot集 Mandelbrot.jsHTML5 Canvas 在和javascript中设置渲染器。可以在 https://csl.name/mandelbrot 看到运行中的代码。作者由 Christian ...

Global site tag (gtag.js) - Google Analytics