资源描述:
《No 11-2 Julia集和Mandelbrot集》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Julia集和Mandelbrot集这个美丽的分形图形表现的就是时的Julia集。考虑复数函数,不同的复数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=-
2、0.70176,-0.3842 类似地,我们固定z0=0,那么对于不同的复数c,函数的迭代结果也不同。由于复数c对应平面上的点,因此我们可以用一个平面图形来表示,对于某个复数c,函数从z0=0开始迭代是否会发散到无穷。我们同样用不同颜色来表示不同的发散速度,最后得出的就是Mandelbrot集分形图形: 前面说过,分形图形是可以无限递归下去的,它的复杂度不随尺度减小而消失。Mandelbrot集的神奇之处就在于,你可以对这个分形图形不断放大,不同的尺度下你所看到的景象可能完全不同。放大到一定时候,你可以看到更小规模的Mande
3、lbrot集,这证明Mandelbrot集是自相似的。下面的15幅图演示了Mandelbrot集的一个放大过程,你可以在这个过程中看到不同样式的分形图形。函数及程序考虑函数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.25z2=f(0.25)=0.25^2-0.75=-0.6875z3=f(-0.6875)=(-0.6875)^2-0.75=-0.2773z4=f(-
4、0.2773)=(-0.2773)^2-0.75=-0.6731z5=f(-0.6731)=(-0.6731)^2-0.75=-0.2970... 可以看出,z值始终在某一范围内,并将最终收敛到某一个值上。 但当z0=2时,情况就不一样了。几次迭代后我们将立即发现z值最终会趋于无穷大:z1=f(2.0)=(2.0)^2-0.75=3.25z2=f(3.25)=(3.25)^2-0.75=9.8125z3=f(9.8125)=(9.8125)^2-0.75=95.535z4=f(95.535)=(95.535)^2-0.75=9126.2z
5、5=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函数值最终不会趋于无穷。我
6、们用深灰色表示不会使函数值趋于无穷的z0;对于其它的z0,我们用不同的颜色来区别不同的发散速度。由于当某个时候
7、z
8、>2时,函数值一定发散,因此这里定义发散速度为:使
9、z
10、大于2的迭代次数越少,则发散速度越快。这个图形可以编程画出。和上次一样,我用Pascal语言,因为我不会C的图形操作。{$ASSERTIONS+}usesgraph;type complex=record re:real; im:real; end;operator*(a:complex;b:complex)c:complex;begin c.re:=a.
11、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
12、; fori:=-300to300do forj:=-200to200do begin z.